设定和修改3D对象模型例程

例程:%HALCONEXAMPLES%\hdevelop\3D-Object-Model\Creation\
set_object_model_3d_attrib.hdev

        此示例程序演示如何使用运算符set_object_model_3d_attrib 和 set_object_model_3d_attrib_mod 在 3D 对象模型中设置属性。
它还演示了如何使用运算符remove_object_model_3d_attrib 和 remove_object_model_3d_attrib_mod 从 3D 对象模型中删除特定属性。在此示例中,设置了 3D 对象模型的立方体的坐标。第二,三角形和颜色。第三,修改 3D 对象模型的坐标。第四,图示了集合属性的去除。在所有步骤之间,生成的 3D 对象模型是可视化的。

1.创建空模型,设置9个顶点

* 初始化程序。
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
create_pose (0, 0, 40, 30, 60, 15, 'Rp+T', 'gba', 'point', DisplayPose)
VisualParamNames := ['point_size', 'disp_lines', 'attribute_0', 'color_0','disp_pose']
VisualParamValues := [8, 'true', 'points', 'yellow','true']
Instructions := 'Rotate: Left button'
Instructions[1] := 'Zoom: Shift + left button'
Instructions[2] := 'Move: Ctrl + left button'
* 
* 创建一个空的3D模型
gen_empty_object_model_3d (ObjectModel3D)
* 
* 使用附加值设置立方体的点坐标
*在一个平面上的点。这里采用在后面-0.5的方式设定坐标的好处是可以将点整体移动而不用一个个去改
PointCoordX := [0.5, 0, 1, 1, 0, 0, 1, 1, 0] - 0.5
PointCoordY := [0, 1, 1, 1, 1, 0, 0, 0, 0] - 0.5
PointCoordZ := [0.5, 0, 0, 1, 1, 0, 0, 1, 1] - 0.5
*AttribName为要设置的属性的名称,对应AttribValues为属性的值,若需要用到扩展属性,则用AttachExtAttribTo设置
set_object_model_3d_attrib_mod (ObjectModel3D, ['point_coord_x', 'point_coord_y', 'point_coord_z'], [], [PointCoordX,PointCoordY,PointCoordZ])
* 
* 显示这9个点
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], DisplayPose, VisualParamNames, VisualParamValues, 'Define a cube by point coordinates', [], Instructions, DisplayPose) 

 2.利用顶点创建三角形网格多面体

* 利用前面的点设置三角形网格
*T1[0,8,5]代表相应的索引点,例如0是XYZ的第0个数据(0,-0.5,0),8是(-0.5,-0.5,0.5),5是(-0.5,-0.5,-0.5)
T1 := [0, 8, 5]
T2 := [0, 7, 8]
T3 := [0, 6, 7]
T4 := [0, 5, 6]
T5 := [5, 6, 2]
T6 := [5, 2, 1]
T7 := [6, 7, 3]
T8 := [6, 3, 2]
T9 := [7, 3, 4]
T10 := [7, 4, 8]
T11 := [8, 4, 1]
T12 := [8, 1, 5]
T13 := [2, 3, 4]
T14 := [2, 4, 1]
set_object_model_3d_attrib (ObjectModel3D, 'triangles', [], [T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14], ObjectModel3D2)
* 
* 显示三角化的立方体。
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2], [], DisplayPose, VisualParamNames, VisualParamValues, 'Connect points to triangles', [], Instructions, DisplayPose)

3.修改点

* 修改点坐标,把Y的第0个数据改为-1
PointCoordY[0] := [-1]
set_object_model_3d_attrib_mod (ObjectModel3D2, 'point_coord_y', [], PointCoordY)
* 
* 显示修改后的对象(不再是多维数据集)。
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2], [], DisplayPose, VisualParamNames, VisualParamValues, 'Modify some point coordiantes', [], Instructions, DisplayPose)

4.设置三角形的扩展属性&distance来可视化它与平面的距离。

*创建表示平面的3D对象模型。平面中心和旋转角度由pose设置,[-1, -1, 1, 1]和[-1, 1, 1, -1]为xy的坐标,
*用于标定平面边界,返回句柄PlaneOM3D,平面的法向量与z轴一致
gen_plane_object_model_3d ([0, .55, 0, 90, 0, 0, 0], [-1, -1, 1, 1], [-1, 1, 1, -1], PlaneOM3D)
*计算两个模型之间的距离
distance_object_model_3d (ObjectModel3D2, PlaneOM3D, [], 0, [], [])
VisualParamNames2 := [VisualParamNames,'color_attrib_0', 'color_attrib_1', 'color_0', 'color_1', 'color_2']
VisualParamValues2 := [VisualParamValues,'&distance', '&distance', 'yellow', 'orange', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D2,ObjectModel3D2,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2,\
['Set extended attribute \'&distance\'', '(from plane) and display as color value'], [], Instructions, DisplayPose)

5.删除ObjectModel3D2中的扩展属性&distance。

删除ObjectModel3D2中的扩展属性&distance。
remove_object_model_3d_attrib (ObjectModel3D2, '&distance', ObjectModel3D3)
VisualParamNames2 := [VisualParamNames,'color_0', 'color_1', 'color_2']
VisualParamValues2 := [VisualParamValues,'yellow', 'orange', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D3,ObjectModel3D3,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2, ['The extended attribute \'&distance\'', 'has been removed'], [], Instructions, DisplayPose)

6. 删除手动创建的三角形网格。

* 删除手动创建的三角形网格。
remove_object_model_3d_attrib_mod (ObjectModel3D3, 'triangles')
VisualParamNames2 := [VisualParamNames,'color_0', 'color_1']
VisualParamValues2 := [VisualParamValues,'yellow', 'blue']
visualize_object_model_3d (WindowHandle, [ObjectModel3D3,PlaneOM3D], [], DisplayPose, VisualParamNames2, VisualParamValues2, 'The triangles have been removed', [], Instructions, DisplayPose)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值