AutoCAD Civil 3D-部件-石料场开挖边坡部件设计及装配

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hjpqindong/article/details/97249416

前几日的博客介绍了石料场边坡部件的简单设计过程,该边坡共十级,坡比1:1高差30米边坡5级,坡比1:1.25高差30米边坡4级,顶部1:1.5边坡一级与山顶原始地面接合,设3米马道7条、5米和8米马道各一条,开挖边坡总高284米。以前介绍的简单开挖边坡部件只在顶部考虑了与原始曲面的接合,以下9级边坡同高,因此生成的道路曲面与实际不符。这两日对边坡部件重新进行了设计,对每级边坡加入了逻辑判断,在两端能与原始地面接合。新部件装配后生成的曲面如下图:

图一
图二

一、开挖边坡部件设计

部件从最底部开始逐级向上创建。本工程轴线为平台与边坡的折线,桩号零点位于图中上方,大平台为轴线左侧。

1、创建左面的开挖平台。创建一个点P2从起点开始,类型为“坡至曲面”,水平(坡比0.00%),目标曲面为“原始曲面”,连接代码“开挖边坡”(后续所有连接的代码均设为此代码)。如下图:

图三、左侧的2650开挖平台

2、创建右侧的10级开挖边坡

先创建一个辅助点用于判断边坡高度,两侧边坡与曲成接合的点其高度均小于边坡高度30米,若高于30米则按坡比、坡高建连接并继续下一级边坡的创建,依此类推完成后续所有边坡的创建。现看第一级边坡的部件参数:

图四、第一级边坡定义相关参数

后续边坡步骤与第一级边坡类似,十级边坡设计结束后如下图:

图五、十级边坡流程图

边坡部件制作完成保存退出部件编辑器。

二、Civil 3D中部件的组装

部件的组装过程以前已有博文详述,此处总结一下步骤:

1、展点;

2、创建曲面;

3、绘制轴线、创建路线;

4、生成曲面纵断面、绘制纵断面图;

5、绘制布局纵断面(即路线设计纵断面),为方便一般先将折点桩号和高程建一个文本文件,从文件创建布局纵断面更方便。要注意的是文本文件中桩号和高程间以空格分隔;

6、导入部件、创建装配;

7、创建道路、指定装配与目标曲面;

8、生成道路曲面(可适当调整道路步长,否则生成曲面边界不圆滑);

9、横断面编辑、生成采样线、工程量计算等。

展开阅读全文

事件问题 父窗口部件与子窗口部件问题

02-09

////////////////////////////////////////////main.cpp ///////////////////////////////// rn #include"KDlg.h" rn int main(int argc,char* argv[]) rn rn QApplication app(argc,argv); rn KDialog kdlg; ////////////////////////第一个疑问点点点点点点点点点点点点点点点点点 rn kdlg.resize(400, 300); rn kdlg.setWindowTitle(QObject::tr("KDialog")); rn kdlg.show(); rn return app.exec(); rn rnrn //////////////////////////////////////////KDlg.h////////////////////////////////////// rn #ifndef KDLG_H rn #define KDLG_H rnrn #include rn #include rn #include rn #include rnrn class KDialog:public QDialog rn rn Q_OBJECT rn public: rn KDialog(); rn private: rn QPushButton *KBtn1; rn QPushButton *KBtn2; rn protected: rn void keyPressEvent(QKeyEvent *event); rn ; rnrn #endif // KDLG_H rnrn /////////////////////////////////KDlg.cpp /////////////////////////////////// rn #include"KDlg.h" rnrn KDialog::KDialog() rn rn KBtn1 = new QPushButton(this); /////////////////////////第一个疑问点点点点点点点点点点点点点点点点点 rn KBtn1->setGeometry(50,50,85,27); rn KBtn1->setText("BTN1111111"); rnrn KBtn2 = new QPushButton(this); rn KBtn2->setGeometry(150,50,85,27); rn KBtn2->setText("BTN2222222"); rn rnrn void KDialog::keyPressEvent(QKeyEvent *event) rn rn if(event->key() == Qt::Key_F1) rn rn KBtn1->setText("KEYPRESS111111111"); rn KBtn2->setText("KEYPRESS222222222"); rn rn rnrn //////////////////////////////////////////////////////////////////////////////////////////// rn ///////////////////////////大家帮我看看,我对下面的现象不是很明白,哪位帮我解读解读,谢谢啦! rn /////////////////////////////////////////实现同一种效果,上面是第一种方式,下面是第二种方式。rn/////////////////////////////第一种方式父窗口是自定义类的对象,第二种方式父窗口部件是QDialog。 rn //////////////////////////////////////////////////////////////////////////////////////////// rn/////////////////////////////////////////main.cpp /////////////////////////////////////////// rn #include"KDlg_parent.h" rnrn int main(int argc,char* argv[]) rn rn QApplication app(argc,argv); rn QDialog* dlg = new QDialog; rn KDialog kdlg(dlg); /////////////////////////////////第一个疑问点点点点点点点点点点点点点点点点点 rn dlg->resize(400, 300); rn dlg->setWindowTitle(QObject::tr("KDialog")); rn dlg->show(); rn return app.exec(); rn rnrn /////////////////////////////////////KDlg_parent.h /////////////////////////////////////////// rn #ifndef KDLG_PARENT_H rn #define KDLG_PARENT_H rnrn #include rn #include rn #include rnrn class KDialog:public QDialog rn rn Q_OBJECT rn public: rn KDialog(QDialog* = 0); rn private: rn QPushButton *KBtn1; rn QPushButton *KBtn2; rn protected: rn bool eventFilter(QObject *target, QEvent *event); rn ; rnrn #endif // KDLG_PARENT_H rnrn /////////////////////////////////////KDlg_parent.cpp //////////////////////////////////// rn #include"KDlg_parent.h" rnrn KDialog::KDialog(QDialog* parent):QDialog(parent) rn rn KBtn1 = new QPushButton(parent); //////////////////////第一个疑问点点点点点点点点点点点点点点点点 rn KBtn1->setGeometry(50,50,85,27); rn KBtn1->setText("BTN1111111111"); rnrn KBtn2 = new QPushButton(parent); rn KBtn2->setGeometry(150,50,85,27); rn KBtn2->setText("BTN2222222222"); rnrn KBtn2->installEventFilter(this); ////////////////////////////////安装事件过滤器 rn rnrn bool KDialog::eventFilter(QObject *target, QEvent *event) rn rn if(target == KBtn2) rn rn if(event->type() == QEvent::KeyPress) rn rn QKeyEvent *keyEvent = static_cast(event); rn if(keyEvent->key() == Qt::Key_F1) rn rn KBtn2->setText("KEYPRESS111111111"); rn KBtn2->setText("KEYPRESS222222222"); rn rn return true; rn rn rn return QDialog::eventFilter(target,event); rn rnrn //////////////////////////////////////////////////////////////////////////////////////////////// rn 我不明白的问题有几个: rn 一、第一种方法 KBtn1 = new QPushButton(this); 中 this 意思是父窗口是他本身,第二种方法 KBtn1 = new QPushButton(parent); 中的 parent 意思是父窗口是QDialog的对象。我的解释有没有错?如果没有错为什么第二种方法中的 parents 不能用 this ?哪种方法好(也就是要不要 QDialog 作为父窗口)? rn 二、为什么第二个工程的事件不能用重新实现 keyPressEvent() 的方法,而只能用安装事件过滤器的方法? rn 三、为什么第二种方法中只有当 KBtn2 获得焦点后(运行之初要通过方向键将焦点移至 KBtn2 )按键盘 F1 键才能响应键盘事件? 有什么方法能一运行 按 F1 键就能响应键盘事件? rn 谢谢朋友的回答!!! 论坛

没有更多推荐了,返回首页