文档章节

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

AnyCAD三维控件
 AnyCAD三维控件
发布于 2015/05/08 16:58
字数 821
阅读 932
收藏 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
900
0
基于AnyCAD的三维机器人运动仿真应用

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

AnyCAD三维控件
2015/06/18
465
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
967
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
522
0

没有更多内容

加载失败,请刷新页面

加载更多

关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
6
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0
Docker容器实战(七) - 容器中进程视野下的文件系统

前两文中,讲了Linux容器最基础的两种技术 Namespace 作用是“隔离”,它让应用进程只能看到该Namespace内的“世界” Cgroups 作用是“限制”,它给这个“世界”围上了一圈看不见的墙 这么一...

JavaEdge
今天
8
0
文件访问和共享的方法介绍

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号...

老孟的Linux私房菜
今天
7
0
面试套路题目

作者:抱紧超越小姐姐 链接:https://www.nowcoder.com/discuss/309292?type=3 来源:牛客网 面试时候的潜台词 抱紧超越小姐姐 编辑于 2019-10-15 16:14:56APP内打开赞 3 | 收藏 4 | 回复24 ...

MtrS
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部