在C#使用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,可以创建出一个四轮汽车了吧。

时间: 2024-10-24 11:09:07

在C#使用AnyCAD三维控件の场景节点详解的相关文章

在MFC程序中使用AnyCAD三维控件

AnyCAD三维控件有.Net版本和C++两个版本,使用C++要比C#稍微繁杂一点.SDK中提供了针对MFC的文档视图的封装,只需改一下几个基类即可. 准备 VS2010 下载C++版本的AnyCAD图形控件:http://pan.baidu.com/s/1c06hmPa 项目设置 $(AnyCADSDK)替换为您的工程相对于AnyCAD C++ SDK的位置,您也可以把AnyCADSDK加到环境变量中. 头文件 $(AnyCADSDK)\inc Lib查找目录 $(AnyCADSDK)\lib

一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/ 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: [csharp] view plaincopy #import <UIKit/UIKit.h> @interface TextViewController : UIViewController <UITextViewDelegate> { UITe

VB ListView控件各种操作详解

VB ListView控件各种操作详解 [vb] view plaincopy Private Sub Form_Load() 'ListView1.SmallIcons = ImageList1.Object '把ImageList1图标列表控件绑定到 ListView1列表控件中来. ListView1.ListItems.Clear               '清空列表 ListView1.ColumnHeaders.Clear           '清空列表头 ListView1.Vi

AnyCAD三维控件(转)

在WinForm中可以方便的集成AnyCAD.Net三维控件,只需要以下几部即可完成. 一.添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation.Net.dll AnyCAD.Exchange.Net.dll 二.初始化控件 1.首先创建一个窗体 2.在窗体上放置一个Panel用来放置三维控件 3.初始化控件 完整代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

delphi控件属性大全-详解-简介

button 组件: CAPTION 属性 :用于在按钮上显示文本内容Cancel     属性:是否设置成默认的取消按钮,当设置为真的时候(true) 按ESC触发改按钮的事件!Default 属性:是否设置成默认的确认按钮,当设置为真的时候 按ENTER键的时候触发事件Hint 属性:设置当鼠标在按钮上短暂停留是显示的提示内容.Showhint 属性: 是否显示提示内容默认为假! Bitbtn 组件Kind 属性: 他的值就是位图按钮组件上所显示的图标!GLYPH 属性: 用于在位图按钮上显

iOS:图像选取器控制器控件UIImagePickerController的详解

图像选择控制器:UIImagePickerController 功能:用于选取相册或相机等里面的照片. @interface UIImagePickerController : UINavigationController 枚举: //图片资源来源类型 typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) { UIImagePickerControllerSourceTypePhotoLibrary,          //图

iOS:提示框(警告框)控件UIActionSheet的详解

提示框(警告框)控件2:UIActionSheet 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.它与导航栏类似,它继承自UIView. 风格类型: typedef NS_ENUM(NSInteger, UIActionSheetStyle) { UIActionSheetStyleAutomatic        = -1,       //iOS系统自动默认的风格 UIActionSheetStyleDefault          = UIB

iOS:提示框(警告框)控件UIAlertView的详解

提示框(警告框)控件:UIAlertView 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能. 类型:typedef NS_ENUM(NSInteger, UIAlertViewStyle) { UIAlertViewStyleDefault = 0,                 //默认类型 UIAlertViewStyleSecureTextInput,          //安全密码的文本框输入类型 UIAlertViewStylePlai

Webbrowser控件execcommand参数详解

2D-Position 允许通过拖曳移动绝对定位的对象.AbsolutePosition 设定元素的 position 属性为“absolute”(绝对).BackColor 设置或获取当前选中区的背景颜色.BlockDirLTR 目前尚未支持.BlockDirRTL 目前尚未支持.Bold 切换当前选中区的粗体显示与否.BrowseMode 目前尚未支持.Copy 将当前选中区复制到剪贴板.CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称.CreateLink