文档章节

在C#使用AnyCAD三维控件の场景节点详解

AnyCAD三维控件
 AnyCAD三维控件
发布于 2015/05/08 16:58
字数 821
阅读 930
收藏 3

SceneNode是AnyCAD三维图形平台的AnyViz显示引擎的核心对象之一,只有放在场景管理器(SceneManager)里的节点才能被显示引擎所显示。

1.   节点分类

SceneNode是场景节点的基类,从SceneNode继承的子类有以下三大类:

Ø  EntitySceneNode

挂接显示对象/几何对象的节点。比如创建的TopoShape需要显示,就需要挂接在EntitySceneNode上才能加到场景中。

为了提高内存利用率,显示引擎允许一个TopoShape被挂接在多个EntitySceneNode上。比如一个车的两个前轮,几何对象可以共享。

Ø  CustomizedSceneNode

自定义的比较特殊的场景节点。从它又继承了若干的子类。

Ø  GroupSceneNode

用来对场景节点进行分组。GroupSceneNode下面可以挂接各种SceneNode,包括GroupSceneNode类型。

有的组合对象也是从该类集成而来,比如GridNode, LineNode, PointNode等。

 

注意:使用GroupSceneNode可以把场景组织为的结构。假如形成,后果就很严重了。

        

2.   属性设置

SceneNode上除了可以设置几何对象的显示样式如PointStyleLineStyleFaceStyle,设置变换矩阵等,还可以设置其他几个你可能感兴趣的属性。

 

2.1.  矩阵变换

SceneNode:SetTransform(trf); //变换到另外一个位置。

通过GlobalInstance.MatrixBuilder可以创建平移、旋转、缩放矩阵。

 

2.2.  设置可见性

SceneNode:SetVisible(false); //隐身

2.3.  设置是否可被选择

SceneNode:SetPickable(false);//对象不会被鼠标拾取到了

 

2.4.  设置是否受显示模式影响

SceneNode:SetFilterable(false);//这下切换显示点、边、面都不会对这个节点有影响。它里面有什么就会显示什么。

 

2.5.  设置不受视图缩放影响

SceneNode:SetFixedSize(true); //再怎么缩放视图,物体的大小都不会改变了。

 

注意:所有上面的属性都具有状态继承性,即在GroupSceneNode上设置,它的子节点自动具备上述属性。

 

2.6.  Id

Id是一个神奇的属性,给每个节点一个唯一的Id很有必要。这样在选择到某个SceneNode后,就可以根据它上面的Id关联到用户自定义数据。

另外根据Id,通过SceneManager:FindNode(id)就可以找到对应的SceneNode

 

3.   代码示例

3.1.  TopoShape挂接到多个SceneNode

如果使用的是.Net三维控件,类RenderWindow3d提供了ShowGeometry方法直接把TopoShape转换为SceneNode

如:

TopoShape cylinder = GlobalInstance.BrepTools.MakeCone(new Vector3(100, 0, 0), new Vector3(0, 0, 1), 20, 100, 40, 315);

SceneNode node1 = renderView.ShowGeometry(cylinder, ++shapeId);

SceneNode node2 = renderView.ShowGeometry(cylinder, ++shapeId);

//此时node1node2是在同一个位置

//调用SceneNode:SetTransform(…)就可以把node移到其他的位置

 

3.2.  阵列

阵列本质上是改变物体的位置。对于几何相同位置不同的物体,可以使用MatrixBuilder来构造位移矩阵,把矩阵施加到各个SceneNode上即可。

for (int i = 0; i < 10; ++i)

{

Matrix4 trf = GlobalInstance.MatrixBuilder.MakeTranslate(i * 100, 0, 0);

SceneNode aNode = renderView.ShowGeometry(cylinder, ++shapeId);

node.SetTransform(trf);

}

 

4.   练习

利用以上的API,可以创建出一个四轮汽车了吧。

© 著作权归作者所有

AnyCAD三维控件
粉丝 18
博文 6
码字总数 2279
作品 0
浦东
架构师
私信 提问
在MFC程序中使用AnyCAD三维控件

AnyCAD三维控件有.Net版本和C++两个版本,使用C++要比C#稍微繁杂一点。SDK中提供了针对MFC的文档视图的封装,只需改一下几个基类即可。 准备 VS2010 下载C++版本的AnyCAD图形控件:http://pa...

AnyCAD三维控件
2015/05/06
891
0
基于AnyCAD的三维机器人运动仿真应用

AnyCAD SDK企业版提供完整的三维运动仿真解决方案。基于AnyCAD提供的建模引擎、显示引擎和数据引擎,可以使用C#/C++快速地搭建三维应用程序。

AnyCAD三维控件
2015/06/18
459
0
在Qt中使用AnyCAD三维建模控件

下载 Qt高速下载:http://pan.baidu.com/s/1bng1kwJ AnyCAD C++ SDK高速下载:http://pan.baidu.com/s/1qWFS1tE QtCreator配置 假如AnyCAD C++ SDK目录为 ${AnySDK} 设置include路径: INCL......

AnyCAD三维控件
2015/05/10
964
0
基于OpenCASCADE的.Net开发包发布了

基于OpenCASCADE的.Net开发包 AnyCAD .Net SDK发布了,欢迎试用。 下载包包括.Net源码和说明文档。 下载

AnyCAD三维控件
2013/01/10
4.1K
2
基于AnyCAD的机器人仿真应用框架

AnyCAD Robot Platform(ARP)提供了从几何造型、三维显示、数据管理全方位的解决方案。使用AnyCAD机器人平台可以方便快速的定制个性化的机器人仿真应用。 ARP由AnyCAD Assembly Editor(AAE...

AnyCAD三维控件
2016/06/28
512
0

没有更多内容

加载失败,请刷新页面

加载更多

最好的重试是指数后退和抖动

1. 概述 在本教程中,我们将探讨如何使用两种不同的策略改进客户端重试:指数后退和抖动。 2. 重试 在分布式系统中,多个组件之间的网络通信随时可能发生故障。 客户端应用程序通过实现重试来...

liululee
22分钟前
3
0
聊一聊大厂内部的安全管理机制

工作了两个月了体会到了很多之前做外包小项目没有的东西,不得不说大厂的还是有自己一套的完善的体制,不会像B站那样泄露自己整个后台的源码这种事情发生。 电脑办公 比如说在使用电脑办公这...

gzc426
49分钟前
4
0
如何利用deeplearning4j中datavec对图像进行处理

NativeImageLoader Labelloader = new NativeImageLoader(112, 112, 3,new FlipImageTransform(-1)); 一、导读 众所周知图像是有红绿蓝三种颜色堆叠而成,利用deeplearning对图像处理,必须把...

冷血狂魔
51分钟前
8
0
1. Context - React跨组件访问数据的利器

《react-router-dom源码揭秘》系列 2. React-Router的基本使用 3. react-router-dom源码揭秘 - BrowserRouter Context提供了一种跨组件访问数据的方法。它无需在组件树间逐层传递属性,也可以...

前端老手
今天
6
0
Docker入门实战--开篇,为什么要使用Docker

前面Thrift文章中,我曾经介绍过我为什么要用Thrift。Docker的使用却是不一样的。纯属没事找事,因为我现在一个人的团队,项目只要一个project目录足够了! 那我何苦要用Docker呢 各位且听听...

后天的奇点
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部