HCComputeSelection n int HCComputeSelectionconst char display const char

  • Slides: 95
Download presentation

HC_Compute_Selection n 得到选中对象 int HC_Compute_Selection(const char *display, const char *start_seg, const char *action, double

HC_Compute_Selection n 得到选中对象 int HC_Compute_Selection(const char *display, const char *start_seg, const char *action, double x, double y) • • • display: 拥有驱动的段 start_seg: 搜索起始段 action: 作用于对象的鼠标事件 x, y: 选择点在窗口空间的坐标值 函数变形 n n n By_Area By_Polygon By_Polyline By_Volume By_Shell

HC_Show_Selection_XXX() n 搜索选择列表中的对象 n 函数变形 • void HC_Show_Selection_XXX() • • • Show_Selection_Elements Show_Selection_Keys Show_Selection_Original_Keys

HC_Show_Selection_XXX() n 搜索选择列表中的对象 n 函数变形 • void HC_Show_Selection_XXX() • • • Show_Selection_Elements Show_Selection_Keys Show_Selection_Original_Keys Show_Selection_Pathname Show_Selection_Position Show_Selection_Source

HC_Find_Related_Selection n 在选择列表中移动, 指向下一个对象 HC_BOOLEAN HC_Find_Related_Selection(void) do { HC_Show_Selection_Element(&key, NULL, NULL); char type[MVO_BUFFER_SIZE]; HC_Show_Key_Type(key,

HC_Find_Related_Selection n 在选择列表中移动, 指向下一个对象 HC_BOOLEAN HC_Find_Related_Selection(void) do { HC_Show_Selection_Element(&key, NULL, NULL); char type[MVO_BUFFER_SIZE]; HC_Show_Key_Type(key, type); HC_KEY temp = note. Is. Note(key); if(temp != -1) { m_p. Note. Key = temp; break; } }while(HC_Fine_Related_Selection());

HC_Set_Selectability n 设置段或基本图元的可选择性 void HC_Set_Selectability(const char *list) • list: 设置字符串 n 缺省情况下不可见的对象是无法选中的 • 通过指定”invisible”或”on!”可以打开对不可见对象的选择

HC_Set_Selectability n 设置段或基本图元的可选择性 void HC_Set_Selectability(const char *list) • list: 设置字符串 n 缺省情况下不可见的对象是无法选中的 • 通过指定”invisible”或”on!”可以打开对不可见对象的选择 • HC_Set_Selectability(“eveything = off”);

选择示例 long primitive; int count, offset 1, offset 2, offset 3; char type[32], pathname[128];

选择示例 long primitive; int count, offset 1, offset 2, offset 3; char type[32], pathname[128]; count = HC_Compute_Selection(“. ”, ”v”, new_point. x, new_point. y ); HC_Show_Selection_Element(&primitive, &offset 1, &offset 2, &offset 3); HC_Show_Key_Type(primitive, type); if(streq(type, ”marker”)) HC_delete_By_Key(&primitive); else Highlight_Primitive(&primitive);

练习 11: 选择 n n n 找出HOOPS可以从几何中得到的信息 参考在线帮助 提示 HC_Show_Selection_element(key, offset 1, offset 2,

练习 11: 选择 n n n 找出HOOPS可以从几何中得到的信息 参考在线帮助 提示 HC_Show_Selection_element(key, offset 1, offset 2, offset 3)

HC_Move_By_Key n 段之间的移动 void HC_Move_By_Key(HC_KEY key, const char* newowner) • key: 待移动的段或几何的键值 • newowner:

HC_Move_By_Key n 段之间的移动 void HC_Move_By_Key(HC_KEY key, const char* newowner) • key: 待移动的段或几何的键值 • newowner: 移动目标段的名称 HC_Move_By_Key(m_key. Arrow, ”. /scene/Highlight”);

HC_Copy_Segment n 将一个段中的内容拷贝到另一个段 void HC_Copy_Segment(const char* old, const char* new) • old: 原先的段 •

HC_Copy_Segment n 将一个段中的内容拷贝到另一个段 void HC_Copy_Segment(const char* old, const char* new) • old: 原先的段 • new: 目标段 HC_Open_Segment(“viewport 1”); HC_Copy_Segment(“. . /viewport 4”, ”. /*”); HC_Close_Segment();

使用示例 //回调函数 定义 void my_marker(HT_Rendition *rendition, HT_DC_Point *point) { HT_RGB red[] = {1. 0,

使用示例 //回调函数 定义 void my_marker(HT_Rendition *rendition, HT_DC_Point *point) { HT_RGB red[] = {1. 0, 0. 0}; HT_Rendition *new_rend = HIC_New_Rendition(rendition); HIC_Set_Marker_Color(new_rend, red); HIC_Draw_DC_Marker(new_rend, point); } //初始时注册回调函数 注册 HC_Define_Callback_Name(“my draw dc marker”, (void (HC_CDECL*)(HC_ANY_ARGS))(my_marker)); //在适当地段中调用回调函数 使用 HC_Set_Callback(“draw dc marker = my draw dc marker”);

HC_Set_Heuristics n 指定启发式选项 n 选项示例 void HC_Set_Heuristics(const char *list) • • • backplane culling

HC_Set_Heuristics n 指定启发式选项 n 选项示例 void HC_Set_Heuristics(const char *list) • • • backplane culling selection sorting clipping concave polygons hidden surfaces memory purge incremental updates partial erase polygon crossings polygon handedness quick moves related selection limit

背平面剔除 n n 通过单面显示提高渲染性能 需要设定多边形左右手系 HC_Set_Heuristics(“[no] polygon handedness = [= left / right]”) HC_Set_Heuristics(“back

背平面剔除 n n 通过单面显示提高渲染性能 需要设定多边形左右手系 HC_Set_Heuristics(“[no] polygon handedness = [= left / right]”) HC_Set_Heuristics(“back plane culling”)

两种方法生成LOD n 由原是网格生成LOD • 需要考虑生成时间 • 读入模型时 n LOD选项由”preprocess”指定 • 更新模型时 n HC_Regenerate_LOD HC_Set_Rendering_Options(“lod=on,

两种方法生成LOD n 由原是网格生成LOD • 需要考虑生成时间 • 读入模型时 n LOD选项由”preprocess”指定 • 更新模型时 n HC_Regenerate_LOD HC_Set_Rendering_Options(“lod=on, lodo=(fallback=coarsest, preprose)”) n 插入一个已生成的LOD模型(自定义) • 可以是任意图形对象 Open_LOD(level) Insert_*(…) Close_LOD()

LOD设置 n 打开LOD • HC_Set_Rendering_Options(“lod=on”); • 设置是否在所有渲染过程中使用LOD n LOD子选项设置 • HC_Set_Rendering_Options(“lodo=(opt 1, opt 2,

LOD设置 n 打开LOD • HC_Set_Rendering_Options(“lod=on”); • 设置是否在所有渲染过程中使用LOD n LOD子选项设置 • HC_Set_Rendering_Options(“lodo=(opt 1, opt 2, …)”); • LOD打开时, 这些子选项才生效

反馈选项 n 如果指定的LOD级别是无效的, 可以指定相应的动作 fallback = [none | bounding | coarsest none] Ø none:

反馈选项 n 如果指定的LOD级别是无效的, 可以指定相应的动作 fallback = [none | bounding | coarsest none] Ø none: 不做任何处理 Ø coarsest: 使用最粗糙的LOD Ø bounding: 使用包含对象的包围盒 Ø coarsest bounding: 使用”最少三角片数目”的LOD. 当没有”min triangle count”时就使用包含对象的包围盒 Ø coarsest none: 缺省设置. 使用”最信号三角片数目”的LOD. 当没有”min triangle count”时什么也不显示 HC_Set_Rendering_Options(“lod=on, lodo=(fallback=coarsest, preprocess)”)

系统设置 n 系统设置函数 • HC_Show_System_Options • HC_Show_Rendering_Options • HC_set_Driver_Options//驱动选项 • HC_Define_System_Options • HC_Define_Error_Handler//错误处理

系统设置 n 系统设置函数 • HC_Show_System_Options • HC_Show_Rendering_Options • HC_set_Driver_Options//驱动选项 • HC_Define_System_Options • HC_Define_Error_Handler//错误处理

HC_Show_system_Options n 得到缺省系统配置 void HC_Show_System_Options(char *list)

HC_Show_system_Options n 得到缺省系统配置 void HC_Show_System_Options(char *list)

HC_Show_Rendering_Options n 得到当前渲染设置 void HC_Show_Rendering_Options(char *list)

HC_Show_Rendering_Options n 得到当前渲染设置 void HC_Show_Rendering_Options(char *list)

HC_Set_Driver_Options n 设置设备相关选项 n 选项示例 HC_Set_Driver_Options() • • • Border color consolidation control area

HC_Set_Driver_Options n 设置设备相关选项 n 选项示例 HC_Set_Driver_Options() • • • Border color consolidation control area debug flags disable input double-buffering fixed colors force black and white gamma correction • • • hardcopy resolution landscape orientation light sc. Daling physical size selection proximity subscreen size colormap ID use window. ID special events

HC_Define_System_Options n 控制图形之外的系统行为 n 选项示例 HC_Define_System_Options() • • • bounding volumes code generation continuous

HC_Define_System_Options n 控制图形之外的系统行为 n 选项示例 HC_Define_System_Options() • • • bounding volumes code generation continuous update debug flags errors, warnings, info font directory license message limit metafile directory error checking n HOOPS注册一个函数, 系统每 50毫秒调用一次

动画: 使用 3 d. GS的方法 n 编辑几何 • HC_Edit_XXX n n 在多帧上改变对象的可见性 HC_Move_By_Key(shell[i], invisible_seg);

动画: 使用 3 d. GS的方法 n 编辑几何 • HC_Edit_XXX n n 在多帧上改变对象的可见性 HC_Move_By_Key(shell[i], invisible_seg); HC_QMove_By_Key(shell[i+1], invisible_seg); HC_Update_Display(); 利用矩阵进行对象的移动 • HC_Translate_XXX • HC_Rotate_XXX • HC_Append_Matrix n 相机的移动 • HC_Set_Camera

练习 15: 用HOOPS Part Viewer创建动画 n 建立新的动画 • 选择[File]-[Open]和bnc. hsf n • • •

练习 15: 用HOOPS Part Viewer创建动画 n 建立新的动画 • 选择[File]-[Open]和bnc. hsf n • • • %HOOPS%datasetshsfcad 选择[Tool]-[Key. Frame Editor] 选择[Top]图标 在场景中的模型上又击, 选择[Manipulator]-[Activate Simple] 单击屏幕上的左右箭头 从Key. Frame中选择[Record]

HOOPS MVO n HOOPS MVO编程要点 • HSelection. Set n HOOPSMVO主要类

HOOPS MVO n HOOPS MVO编程要点 • HSelection. Set n HOOPSMVO主要类

练习 16: 一个HOOPS MFC应用程序 n 创建一个新的基于HOOPS MFC的应用程序 • 使用Visual C++应用程序向导新建一个的 程 • 从HOOPS MFC派生类

练习 16: 一个HOOPS MFC应用程序 n 创建一个新的基于HOOPS MFC的应用程序 • 使用Visual C++应用程序向导新建一个的 程 • 从HOOPS MFC派生类 HOOPS MFC CHoops. Doc CHoops. View CHoops. App 应用程序 CHoops. Mfc. Doc CHoops. Mfc. View CHoops. Mfc. App

Opcode Handler n 管理HSF对象的读写

Opcode Handler n 管理HSF对象的读写

BStream. File. Toolkit: : Set. Write. Flags n 标记设置 BStream. File. Toolkit: : Set.

BStream. File. Toolkit: : Set. Write. Flags n 标记设置 BStream. File. Toolkit: : Set. Write. Flags(int flags) • 标记 n n n TK_Suppress_LOD: 不输出Shell的LOD并且 TK_Full_Resolution_Vertices: 顶点用float表示 TK_Full_Resolution_Normals: 法矢用float表示 TK_Full_Resolution: 顶点和法矢都用float表示 TK_First_LOD_Is_Bounding_Box: 第一级别的LOD用其包围盒表示 • TK_Implicit_Tags: 为所有合适的对象设置标记 n n TK_Disable_Global_Compression: 关闭全局压缩选项 TK_Disable_Insrancing: 关闭实例化支持选项 TK_Generate_Dictionary: HSF规范字典生成选项 TK_Connectivity_Compression: 打开Shell连通性压缩

有损压缩 n Shell中各元素保存位数设置 • BStream. File. Toolkit类 Set. Num. Vertex. Bits(int numbits) n Set.

有损压缩 n Shell中各元素保存位数设置 • BStream. File. Toolkit类 Set. Num. Vertex. Bits(int numbits) n Set. Num. Normal. Bits(int numbits) n Set. Num. Parameter. Bits(int numbits) n Set. Num. Color. Bits(int numbits) n Set. Num. Index. Bits(int numbits) n n 保存位数会影响显示结果 缺省 24 10 24 24 8

Opcode的实现 n 注册了通用的Opcode Handler • 为每一个Opcode读或写HSF数据 • BStream. File. Toolkit: : Set. Opcode. Handler(TKE_Shell,

Opcode的实现 n 注册了通用的Opcode Handler • 为每一个Opcode读或写HSF数据 • BStream. File. Toolkit: : Set. Opcode. Handler(TKE_Shell, new TK_Shell) n 命令规则 • TKE_<*>: 专门的Opcode • TK_<*>: Opcode • TKE_Image是TK_Image Opcode的Opcode Handler n 有时一个Opcode并不仅仅映射到一个Opcode Handler • 示例: TK_Polypoint Handler同时使用TKE_Polyline和TKE_Polygon n n Set. Opcode. Handler(TKE_Polyline, new TK_Polypoint (TKE_Polyline)) Set. Opcode. Handler(TKE_Polygon, new TK_Polypoint (TKE_Polygon))

Opcode的实现 n 生成用户自定义Opcode Handler • 从一个合适的Opcode Handler派生得来 n 为特定的Opcode注册Opcode Handler • 和用到的HOOPS Stream Toolkit对象一起注册

Opcode的实现 n 生成用户自定义Opcode Handler • 从一个合适的Opcode Handler派生得来 n 为特定的Opcode注册Opcode Handler • 和用到的HOOPS Stream Toolkit对象一起注册 n 用流化 具包读取或者写入HSF数据 • 参考HOOPS Partviewer中的TK_My_Initial_View实现

连接用户应用程序 n 连接用户应用程序 • HC_Set_User_Options • HC_Set_User_Index • HC_Renumber_Key

连接用户应用程序 n 连接用户应用程序 • HC_Set_User_Options • HC_Set_User_Index • HC_Renumber_Key

HC_Set_User_Options n 在HOOPS图形数据库中添加用户自定义属性 void Set_User_Options(const char *list) • 和其他属性一样, 能够从父段中派生 • 可以利用Show_User_Options查询自定义属性 • 保存附加信息

HC_Set_User_Options n 在HOOPS图形数据库中添加用户自定义属性 void Set_User_Options(const char *list) • 和其他属性一样, 能够从父段中派生 • 可以利用Show_User_Options查询自定义属性 • 保存附加信息 HC_set_User_Options(“object. Type = part”)

HC_Set_User_Index n 增加序列值与指针之间的关系 void Set_User_Index(long index, void *data) • 为应用程序数据结构存储指针 • 用来建立long和void*之间的关系 HC_Set_User_Index(HOOPS_TRAINING, this);

HC_Set_User_Index n 增加序列值与指针之间的关系 void Set_User_Index(long index, void *data) • 为应用程序数据结构存储指针 • 用来建立long和void*之间的关系 HC_Set_User_Index(HOOPS_TRAINING, this);

HC_Renumber_Key n 更改HOOPS图元或段键值 void HC_Renumber_Key(HC_KEY oldkey, HC_KEY newkey, const char *scope) • 所有对象被定义成唯一的一个长指针 •

HC_Renumber_Key n 更改HOOPS图元或段键值 void HC_Renumber_Key(HC_KEY oldkey, HC_KEY newkey, const char *scope) • 所有对象被定义成唯一的一个长指针 • 对象被映射到应用程序数据 • 键值可以有局部和全局范围 HC_Renumber_Key(key, orig_key_no, ”global”);

HOOPS/ACIS Bridge n 什么是HOOPS/ACIS Bridge • • • n api_initialize_hoops_acis_bridge api_terminate_hoops_acis_bridge HA_Read_Sat_File HA_Write_Sat_File HA_Set_Rendering_Options

HOOPS/ACIS Bridge n 什么是HOOPS/ACIS Bridge • • • n api_initialize_hoops_acis_bridge api_terminate_hoops_acis_bridge HA_Read_Sat_File HA_Write_Sat_File HA_Set_Rendering_Options HA_Get_Rendering_Options 缺省渲染选项 • HA_Compute_Entity_Pointer • HA_Compute_Geometry_Keys n n HOOPS/ACIS Bridge应用程序示例 练习 18: 连接ACIS

api_initialize_hoops_acis_bridge n 初始化HOOPS/ACIS Bridge outcome api_initialize_hoops_acis_bridge() n 初始化Bridge的ACIS组件

api_initialize_hoops_acis_bridge n 初始化HOOPS/ACIS Bridge outcome api_initialize_hoops_acis_bridge() n 初始化Bridge的ACIS组件

api_terminate_hoops_acis_bridge n 终止化HOOPS/ACIS Bridge outcome api_terminate_hoops_acis_bridge() n 终止化Bridge的ACIS组件

api_terminate_hoops_acis_bridge n 终止化HOOPS/ACIS Bridge outcome api_terminate_hoops_acis_bridge() n 终止化Bridge的ACIS组件

HA_Read_Sat_File n 读取SAT文件 logical HA_Read_Sat_File(const char* fname, ENTITY_LIST& entitylist) • 读取ACIS模型 • 对模型进行离散处理 •

HA_Read_Sat_File n 读取SAT文件 logical HA_Read_Sat_File(const char* fname, ENTITY_LIST& entitylist) • 读取ACIS模型 • 对模型进行离散处理 • 插入到HOOPS/3 d. GS图形数据库中

HA_Write_Sat_File n 写出到SAT文件 logical HA_Write_Sat_File(const char* fname, ENTITY_LIST& entitylist)

HA_Write_Sat_File n 写出到SAT文件 logical HA_Write_Sat_File(const char* fname, ENTITY_LIST& entitylist)

HA_Set_Rendering_Options n 读取SAT文件 void HA_Set_Rendering_Options(const char * rendering_options) • “create body segments” n n

HA_Set_Rendering_Options n 读取SAT文件 void HA_Set_Rendering_Options(const char * rendering_options) • “create body segments” n n 指定是否HOOPS为每个ACIS BODY创建一个段 适用于不通的ACIS BODY具有不通的属性和坐标变换的情况 • “preserve color” n n 设定是否忽略颜色设定 设定HOOPS是否需要为每个拥有颜色的面生成新的段 • “merge bodies” n n 设定HOOPS是否将具有相同颜色属性的面合并成一个Shell 提高渲染性能

HA_Get_Rendering_Options 得到当前渲染选项 n Ha_hendering_options & HA_Get_Rendering_Options()

HA_Get_Rendering_Options 得到当前渲染选项 n Ha_hendering_options & HA_Get_Rendering_Options()

HOOPS/ACIS Bridge n 缺省渲染选项

HOOPS/ACIS Bridge n 缺省渲染选项

HA_Compute_Entity_Pointer n 得到ACIS entity指针 ENTITY* HA_Compute_Entity_Pointer(HC_KEY key) n n 由HOOPS的key得到ACIS的entity指针 可用于选择等操作的实现

HA_Compute_Entity_Pointer n 得到ACIS entity指针 ENTITY* HA_Compute_Entity_Pointer(HC_KEY key) n n 由HOOPS的key得到ACIS的entity指针 可用于选择等操作的实现

HA_Compute_Geometry_Keys n n n 返回与ACIS entity对应的HOOPS键值 unsigned long HA_Compute_Geometry_Keys( ENTITY* entity, unsigned long count,

HA_Compute_Geometry_Keys n n n 返回与ACIS entity对应的HOOPS键值 unsigned long HA_Compute_Geometry_Keys( ENTITY* entity, unsigned long count, HC_KEY* keys, const char* geom. Types) 用来保存用于键值的队列 geom. Types可以设置为边, 面和体的任意组合 • 当设置为bodies的时候 n n HOOPS返回保存了体的段的键值 当”create body segments”关闭时, HOOPS返回任何数值 • 当设置edges和faces的时候 n 即使”create body segment”是关闭的HOOPS也有返回值

HOOPS/ACIS Bridge 应用程序架构

HOOPS/ACIS Bridge 应用程序架构