当前位置: 首页 > news >正文

做catia数据的网站网页设计兼职平台

做catia数据的网站,网页设计兼职平台,上海品牌策划公司有哪些,爱装网鼠标拾取对象是很多软件的基本功能。FastCAE的拾取比较简单#xff0c;是通过VTK实现的。 对几何而言#xff0c;拾取类型切换在工具栏上#xff0c;单击后再来单击视图区对象进行拾取#xff0c;拾取后的对象会高亮显示。效果如下图#xff1a; 一、拾取对象 拾取对象… 鼠标拾取对象是很多软件的基本功能。FastCAE的拾取比较简单是通过VTK实现的。 对几何而言拾取类型切换在工具栏上单击后再来单击视图区对象进行拾取拾取后的对象会高亮显示。效果如下图 一、拾取对象 拾取对象是在PropPickerInteractionStyle类实现的该类是vtkInteractorStyleRubberBandPick的子类重写原来的鼠标处理函数。当鼠标左键按下会触发以下代码 void PropPickerInteractionStyle::clickSelectGeometry(bool preSelect) {int *clickPos this-GetInteractor()-GetEventPosition(); // 获取鼠标点击位置int success -1, index -1;vtkActor *actor nullptr;if (_selectModel GeometryPoint || _selectModel GeometryWinPoint) // 几何点{vtkSmartPointervtkPointPicker picker vtkSmartPointervtkPointPicker::New();success picker-Pick(clickPos[0], clickPos[1], 0, this-GetDefaultRenderer());if (0 ! success){index picker-GetPointId(); // 点的idactor picker-GetActor(); // 点对应的Actor}}else{vtkSmartPointervtkCellPicker picker vtkSmartPointervtkCellPicker::New();if (_selectModel GeometryCurve || _selectModel GeometryWinCurve)picker-SetTolerance(0.0025);success picker-Pick(clickPos[0], clickPos[1], 0, this-GetDefaultRenderer());if (0 ! success){index picker-GetCellId(); // cell的idactor picker-GetActor(); // 对应的actor}}emit selectGeometry(preSelect, actor, index); }这段代码就是鼠标拾取对象的核心逻辑。其实现是借助了VTK提供的vtkPointPicker、vtkCellPicker。其中当拾取模式是点的时候使用vtkPointPicker如果拾取成功返回点的id及对应的Actor一个Actor可能包含多个点。当拾取模式是线、面、体的时候使用vtkCellPicker成功则返回对应cell id及Actor一个Actor可能包含多个cell。注意当拾取线的时候需要提高拾取Tolerance不然线很难拾取到。 另外要注意的是当拾取线的时候面Actor是拾取不到的同样当拾取面的时候线Actor也是拾取不到。这是通过在用户切换选择模式的时候设置面或边Actor是否可以拾取实现的。核心代码在GeometryViewProvider类中如下 void GeometryViewProvider::setGeoSelectMode(int m) {_viewData-updateGraphOption();ModuleBase::SelectModel selectType (ModuleBase::SelectModel)m;QListGeoViewObj viewObjs _geoViewHash.values();vtkActor *actor nullptr;for (GeoViewObj vobj : viewObjs){actor vobj._faceObj.first;if (actor ! nullptr)actor-SetPickable(false);actor vobj._edgeObj.first;if (actor ! nullptr)actor-SetPickable(false);actor vobj._pointObj.first;if (actor ! nullptr)actor-SetPickable(false);switch (selectType){case ModuleBase::GeometryBody:case ModuleBase::GeometrySurface:case ModuleBase::GeometryWinBody:case ModuleBase::GeometryWinSurface:actor vobj._faceObj.first;if (actor ! nullptr)actor-SetPickable(true);break;case ModuleBase::GeometryWinCurve:case ModuleBase::GeometryCurve:actor vobj._edgeObj.first;if (actor ! nullptr)actor-SetPickable(true);break;case ModuleBase::GeometryWinPoint:case ModuleBase::GeometryPoint:actor vobj._pointObj.first;if (actor ! nullptr)actor-SetPickable(true);break;default:break;}} }这个代码相对比较简单不再分析。 二、从信号到槽函数 拾取对象之后会发出emit selectGeometry信号参数中带有Actor及cell或点的id。这个信号是QT框架提供的编程机制。其对应的槽函数在如下图中能找到 三、高亮拾取对象 高亮拾取对象处理过程代码如下 void GeometryViewProvider::selectGeometry(bool pre, vtkActor *ac, int index) {if (ac nullptr || index 0) // 无效拾取{_viewData-preHighLight(nullptr);_preWindow-reRender();return;}ModuleBase::SelectModel selectMod _preWindow-getSelectModel(); // 选择模式vtkDataSet *dataSet ac-GetMapper()-GetInputAsDataSet(); // 获取Actor的多边形数据集vtkPolyDatavtkPolyData *poly vtkPolyData::SafeDownCast(dataSet);if (poly nullptr)return;GeometryViewObject *vobj nullptr;switch (selectMod){case ModuleBase::GeometryWinBody:case ModuleBase::GeometryBody:vobj _viewData-getSolidViewObj(poly, index);break;case ModuleBase::GeometryWinSurface:case ModuleBase::GeometrySurface:vobj _viewData-getFaceViewObj(poly, index); // 输入多边形数据cell idbreak;case ModuleBase::GeometryWinCurve:case ModuleBase::GeometryCurve:vobj _viewData-getEdgeViewObj(poly, index);break;case ModuleBase::GeometryWinPoint:case ModuleBase::GeometryPoint:vobj _viewData-getPointViewObj(poly, index);break;default:break;}if (vobj nullptr)return;if (pre)_viewData-preHighLight(vobj); // 设置预高亮else{vobj-highLight(); // 高亮对象_viewData-preHighLight(nullptr);emit geoShapeSelected(vobj-getGeometySet(), vobj-getIndex());}_preWindow-reRender(); }同样这里也只分析面的高亮其他的高亮逻辑类似。高亮处理的时候直接先根据Actor获取了其vtkPolyData数据集找到哪个面需要高亮最后更改其颜色。如何根据cell id找到这个面需要理解其数据结构才能看懂其逻辑。对于面的数据结构这篇文章【FastCAE源码阅读3】几何模型显示从OCC对象到VTK对象有详细描述。其核心原理是查找cell id落在哪个面包含的cell区间上确定高亮哪个面。最后调用_preWindow-reRender()重新绘制整个场景。
http://www.dnsts.com.cn/news/96280.html

相关文章:

  • 合肥专业网站制百度投诉电话24小时
  • 哪里有做微商网站网站建设jw100
  • 孝感住房和城乡建设部网站如何把网站推广出去
  • 网站建设几点关门seo人人网
  • wordpress的最佳地方电池优化大师下载
  • 网站开发 工作量评估wordpress的网址
  • 合肥市城乡建设局2019网站哪里能找到免费网站
  • word上下页内容不连续和平网站建设优化seo
  • wordpress做小说网站网站出售商品建设
  • 代售网站建设集团网站建设成都
  • 网站下载链接打不开自助建站网站源码
  • 北京最大的火车站wordpress 修改注册
  • 网站教学视频河南seo优化
  • 网站如何做质保系统苏州专业的网站建设公司
  • 快站微信网站制作移动商城官网
  • 微网站摇一摇发表评论的wordpress网站模板
  • 做门窗的建网站怎么赚钱北京城建设计集团网站
  • 绍兴网站制作价格什么叫seo
  • 网站建设合同范本-经过律师审核高新技术企业申报网站
  • 做物流行业网站的开发公司聊网站推广
  • 新手学做网站pdf手平罗县住房和城乡建设局网站
  • 什么网站了解国家建设的行情河北沧州解封最新消息
  • 网站架构图的制作高清素材免费下载
  • 电商网站建设代码大全盈润企业网站管理系统
  • 深圳网站建设html5极路由4 做网站
  • 有哪些网站是用php做的视频推广方案模板
  • 招远网站如何创建公众号微信免费的
  • 山东建设企业网站企业做网站有哪些好处
  • 怎么把自己的网站发布到网上做电脑网站手机能显示不出来怎么办啊
  • 网站开发培训建设微信网站