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

1. 节点分类
SceneNode是场景节点的基类,从SceneNode继承的子类有以下三大类:
- EntitySceneNode
挂接显示对象/几何对象的节点。比如创建的TopoShape需要显示,就需要挂接在EntitySceneNode上才能加到场景中。
为了提高内存利用率,显示引擎允许一个TopoShape被挂接在多个EntitySceneNode上。比如一个车的两个前轮,几何对象可以共享。
- CustomizedSceneNode
自定义的比较“特殊”的场景节点。从它又继承了若干的子类。
- GroupSceneNode
用来对场景节点进行分组。GroupSceneNode下面可以挂接各种SceneNode,包括GroupSceneNode类型。
有的组合对象也是从该类集成而来,比如GridNode, LineNode, PointNode等。
注意:使用GroupSceneNode可以把场景组织为树的结构。假如形成图,后果就很严重了。
2. 属性设置
在SceneNode上除了可以设置几何对象的显示样式如PointStyle、LineStyle、FaceStyle,设置变换矩阵等,还可以设置其他几个你可能感兴趣的属性。
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); //此时node1和node2是在同一个位置 //调用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三维控件场景节点详解的更多相关文章
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- WinForm中使用AnyCAD三维控件 の 初始化
在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成. 一.添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation ...
- AnyCAD三维控件(转)
在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成. 一.添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation ...
- delphi控件属性大全-详解-简介
http://blog.csdn.net/u011096030/article/details/18716713 button 组件: CAPTION 属性 :用于在按钮上显示文本内容 Cancel ...
- 《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
1.简介 我们在实际工作中,有可能遇到有些web产品,网页上有一些时间选择,然后支持按照不同时间段范围去筛选数据.网页上日历控件一般,是一个文本输入框,鼠标点击,就会弹出日历界面,可以选择具体日期.这 ...
- iOS:选择器控件UIPickerView的详解和演示
选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...
- 【VB技巧】VB ListView 控件功能使用详解
来源:http://lcx.cc/?i=494 ListView控件 在工具箱上击鼠标右键,选择快捷菜单的Components(部件)项,在控件列表中选择Microsoft Windows Commo ...
- javascript遍历控件(实例详解)
js遍历页面控件, 代码如下 复制代码 var inputArr = document.forms[0]; for( var i = 0; i < inputArr.length; i++ ...
- Webbrowser控件execcommand参数详解
2D-Position 允许通过拖曳移动绝对定位的对象.AbsolutePosition 设定元素的 position 属性为“absolute”(绝对).BackColor 设置或获取当前选中区的背 ...
随机推荐
- 四步轻松实现用Visio画UML类图
本节和大家一起学习一下用Visio画UML类图的方法,主要有四个步骤,这里和大家分享一下,相信通过本节的学习,你对Visio画UML类图的步骤一定会有所了解. 用Visio画UML类图 对于画类图的工 ...
- 项目中用到的logback列子
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender ...
- oracle新建数据库时怎么选择编码格式
源地址:https://zhidao.baidu.com/question/2009631596107727508.html 启动database configuration assistant,创建 ...
- java小程序 实例 二分法查找
使用二分法在一个数组中查找一个数: package com.test; public class BinaryFind { private final static int size = 500000 ...
- Lua 架构 The Lua Architecture
转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...
- Nginx作为简单代理服务器(Windows环境)
Nginx一个频繁的应用是作为代理服务器,由Nginx代理服务器接受客户请求,并将客户请求发送到应用服务器处理,接受应用服务器的响应,然后将响应发送给客户. 现在要做的一个应用场景就是当客户请求图片资 ...
- 如何下载spring-framework
http://jingyan.baidu.com/album/a65957f49670ac24e67f9b85.html?picindex=1
- Redis单机版安装与部署
Redis官网:http://redis.io 下载Redis wget https://github.com/antirez/redis/archive/3.0.0-rc1.tar.gz 解压并安装 ...
- lua绑定c++的时候常见得错误
1 Error parsing reanslation unit 这种情况,首先来说你的python 2.7以及他的插件安装是完整的,最可能的原因就是自己写的ini文件,header路径错误,可以把这 ...
- Bootstrap 3 How-To #1 下载与配置
Bootstrap 3 发布了,通过简单的几步,我们就可以使用 Bootstrap 的样式表,图标,以及 javascript 来配置一个简单的站点. 准备 Bootstrap 不仅仅是一个代码集,还 ...