zoukankan      html  css  js  c++  java
  • 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,可以创建出一个四轮汽车了吧。

  • 相关阅读:
    BCP导出导入
    JBehave
    JavaWeb框架的基石
    SWI-Prolog
    面向对象设计三大特性
    android app启动过程(转)
    人,技术与流程(转)
    打破定式,突破屏障,走出自己的创意舒适区(转)
    野生程序员是指仅凭对计算机开发的兴趣进入这个行业,从前端到后台一手包揽,但各方面能力都不精通的人(转)
    Spring MVC异常处理详解 ExceptionHandler good
  • 原文地址:https://www.cnblogs.com/anycad/p/4488195.html
Copyright © 2011-2022 走看看