CAD软件二次开发
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 举例: typedef unsigned int tag_t, *tag_p_t;
用户界面接口
•
• • • •
信息窗口: UF_UI_Open_Listing_Window(),…,write,save,cl ose,… 对象选择:UF_UI_select_with_class_dialog()按 类选择;UF_UI_select_with_single_dialog()选 择单个实体对话框 文件选择:UF_UI_create_part(), UF_UI_open_part(); 获得输入:uc1600()获得字符串,uc1608实数/整 形输入, uc1607()获得整数输入,uc1609()实数
AcRx类
AcEd类
AcDb类
AcGe类
AcGi类
3.开发实例与作业
• DrawCurve例子
作业:根据曲线曲面理论,在AutoCAD 下作: • 1)Bezier曲线与曲面; • 2)Spline曲线与曲面 • 3)NURBS曲线与曲面。
4.基于AutoCAD的InteCAD介绍 天喻CAD(AutoCAD版)
程序调试
程序格式
//入口 extern "C" void __declspec(dllexport) ufsta( char *name, int *rtcode, int rtlen) { tag_t root_part_occ = NULL_TAG; tag_t displayed_part = NULL_TAG; strcpy(TopPartName," "); strcpy(TopPartName,""); strcpy(PathName,""); //装载AVIDM接口函数-结束 UF_MB_add_actions( actionTable); strcpy(name, ""); displayed_part = UF_PART_ask_display_part(); UF_PART_ask_part_name(displayed_ part,TopPartName);
菜单添加-1
• //AVIDM接口函数声明 typedef LONG (WINAPIV *AVIDM_LOGIN_TYPE)(void); typedef LONG (WINAPIV *AVIDM_CHECKIN_TYPE)(char*&); typedef LONG (WINAPIV *AVIDM_CHECKOUT_TYPE)(AsmNode *&); typedef LONG (WINAPIV *AVIDM_LOGOUT_TYPE)(void); AVIDM_LOGIN_TYPE AVIDM_LogIn=NULL; AVIDM_CHECKIN_TYPE AVIDM_CheckIn=NULL; AVIDM_CHECKOUT_TYPE AVIDM_CheckOut=NULL; AVIDM_LOGOUT_TYPE AVIDM_LogOut=NULL;
菜单添加-5
• //命令的执行——函数调用 int LogInAVIDM() //登陆AVIDM { UF_Initialize(); OpenStdPart(); UF_Terminate(); return 1; }
Байду номын сангаас
• FILE/UGOPEN加载DLL • UG的自动加载,在UG安装路径 C:\UGS180\UGII\menus下的 Custom_dirs.dat文件,则UG启动时自 动的查找该路经下或子目录\startup的 菜单文件和应用程序dll,和 \application下的dll,以及UDO下的自 定义对象。 • 演示
CAD技术及应用——CAD 系统二次开发
华中科技大学CAD中心 吴义忠
内容提要
• • • • 二次开发的界定 1. AutoCAD二次开发 2. Pro/E二次开发 3. UG二次开发
AutoCAD开发
• • • • 1 AutoLISP(R2.5) —— Visual LISP 2 ADS(R10) 3 ObjectARX(R13) 4 ActiveX Automation(VBA)
cadcad技术及应用技术及应用cadcad系统二次开发系统二次开发cadcad技术及应用技术及应用cadcad系统二次开发系统二次开发华中科技大学华中科技大学cadcad中心中心ug二次开发autocad开发autolispr25visuallispactivexautomationvba内模式与opendwg工程配置
菜单添加-2
• //命令余函数对应表 static UF_MB_action_t actionTable[] = { //AVIDM { "LogInAVIDM", (UF_MB_callback_t)LogInAVIDM, NULL }, { "CheckInFromAVIDM", (UF_MB_callback_t)CheckInFromAVIDM, NULL }, { "CheckToAVIDM", (UF_MB_callback_t)CheckToAVIDM, NULL }, { "LogOutAVIDM", (UF_MB_callback_t)LogOutAVIDM, NULL }, { NULL, NULL, NULL} };
UG_ASSEM类应用
• 遍历装配体: extern void ufusr(char *name, int *rtcode, int rtlen) { UF_initialize(); displayed_part = UF_PART_ask_display_part(); if (displayed_part != NULL_TAG) { root_part_occ = UF_ASSEM_ask_root_part_occ(displayed_part); if (root_part_occ != NULL_TAG) { char partname[133]; char ref_name[31]; …… int partNum = UF_ASSEM_ask_part_occ_children(root_part_occ, &chdrs); for(int i=0; i<partNum; i++) {UF_ASSEM_askcomponent_data(chdrs[i], partname, refname, instance_name, origin, matrix, transform);……//处理chdrs[i] RecursCall(chdrs[i]); // } } } UF_terminate(); }
}
程序退出回调 extern int ufusr_ask_unload( void ) { return( UF_UNLOAD_UG_TERMINATE ); } 获得程序错误 static void PrintErrorMessage( int errorCode ) { if ( 0 != errorCode ) { /* Retrieve the associated error message */ char message[133]; UF_get_fail_message( errorCode, message ); /* Print out the message */ UF_UI_set_status( message ); fprintf( stderr, "%s\n", message ); }
内模式与OpenDWG
1. ObjectARX
• 安装 • 应用程序向导(objectArx.awx) • 工程配置:
头文件:objectArx\inc 库文件搜索:objectArx\lib 所需库:rxapi.lib acrx15.lib acdb15.lib acutil15.lib acge15.lib acgiapi.lib achapi15.lib acISMobj15.lib acad.lib acedapi.lib acsiobj.lib adui15.lib acui15.lib
演示
特点: • 符合国标的辅助绘图功能 • 参数化设计工具 • 标准件库 • 零部件设计
UG二次开发
• • • • Unigraphics介绍 UG/Open开发简介 UG/Open开发技术 开发实例
UG简介
UG/OPEN API简介
• UG/OPEN是UG提供的C调用库; 1)对UG的模型文件和模型进行操作,一般只要 命令,都有函数; 2)改变UG的界面,建立自己的交互式程序界面; 3)创建并管理自定义对象。 • 优点:开放性好;易开发调试;帮助较详细
MFC的使用
int fuction() { AFX_MANAGE_STATE(AfxGetStaticModule State()); HINSTANCE hInstResourceClient = AfxGetResourceHandle(); AfxSetResourceHandle(::GetModuleHa ndle("3DLib.dll")); CtestDlg dlg; Dlg.DoModal(); }
UG/Open API约定
• 函数名称:UF_<area>_<Name>; uc<xxxx>和uf<xxxx> • 得到:UF_<area>_ask_<xxxx> • 创建:UF_<area>_create_<xxxx> • 编辑: UF_<area>_edit_<xxxx> • 设置: UF_<area>_set_<xxxx>
UG/OPEN的HTML帮助
• 帮助的使用 • 数据的类型:input, output, Output to be freed
UG/OPEN数据类型含义
• 数据类型: _t(数据类型), _p_t(数据类型的指针), _s(结构标示), _u_t(联合), _u_p_t(联合指针), _f_t(函数指针)
UG/OPEN的加载
UG_PART 类
UG_ASSEM类
• 装配概念: tag——UG对象的标示; Piece Part——单个零件,装配的基本元素,包括几何 和特征 Occurrence——装配的零件的具体实例 Object Occurrence ——零件中对象的实例 Reference Set ——简化表达组件,引用集为NULL Display part —— 显示零件/子装配 Workpart —— 工作零件/子装配
UG开发模式
• 外模式(External):Exe,UF_Initialize()启动所 需的动态连接库,UF_terminate()结束。这种模式主 要用于不需要UG图形界面出现时使用,如PDM中提 取装配体的装配树。UG/OPEN中绝大多函数均可在 External模式下使用。 • 内模式(Internal):dll在UG图形环境下加载运行, 其特点是: 执行代码小、连接快;运行结果在UG的图形窗口中可 见;入口函数ufusr()或ufsta();一旦加载不能手工卸 载,只有调用API函数才能卸载
VC开发环境的设置
• 应用程序向导:Ugopen_v18.awx; • 一般的DLL改变工程设置: 1) link库:libufun.lib libugopenint.lib libopenpp.lib libvmathpp.lib 2) Preprocessor: WIN32,_DEBUG,_WINDOWS,_USRDLL,_AFXDL L,_MBCS 3) Additional Include Path: $(UGII_BASE_DIR)\ugopen,$(UGII_BASE_DIR )\ugopenpp
菜单添加-3
• 编辑菜单命令 文件 .men
菜单添加-4
//建立函数与命令的对应关系 extern "C" void __declspec(dllexport) ufsta( char *name, int *rtcode, int rtlen) { //装载AVIDM接口函数-结束 UF_MB_add_actions( actionTable); …… }
ObjectARX程序框架
• 入口回调函数 extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { //初始化,命令与函数体映射 … }
2. ObjectARX内库
五大类: • 1. AcRx类 • 2. AcEd类 • 3. AcDb类 • 4. AcGi类 • 5. AcGe类
用户界面接口
•
• • • •
信息窗口: UF_UI_Open_Listing_Window(),…,write,save,cl ose,… 对象选择:UF_UI_select_with_class_dialog()按 类选择;UF_UI_select_with_single_dialog()选 择单个实体对话框 文件选择:UF_UI_create_part(), UF_UI_open_part(); 获得输入:uc1600()获得字符串,uc1608实数/整 形输入, uc1607()获得整数输入,uc1609()实数
AcRx类
AcEd类
AcDb类
AcGe类
AcGi类
3.开发实例与作业
• DrawCurve例子
作业:根据曲线曲面理论,在AutoCAD 下作: • 1)Bezier曲线与曲面; • 2)Spline曲线与曲面 • 3)NURBS曲线与曲面。
4.基于AutoCAD的InteCAD介绍 天喻CAD(AutoCAD版)
程序调试
程序格式
//入口 extern "C" void __declspec(dllexport) ufsta( char *name, int *rtcode, int rtlen) { tag_t root_part_occ = NULL_TAG; tag_t displayed_part = NULL_TAG; strcpy(TopPartName," "); strcpy(TopPartName,""); strcpy(PathName,""); //装载AVIDM接口函数-结束 UF_MB_add_actions( actionTable); strcpy(name, ""); displayed_part = UF_PART_ask_display_part(); UF_PART_ask_part_name(displayed_ part,TopPartName);
菜单添加-1
• //AVIDM接口函数声明 typedef LONG (WINAPIV *AVIDM_LOGIN_TYPE)(void); typedef LONG (WINAPIV *AVIDM_CHECKIN_TYPE)(char*&); typedef LONG (WINAPIV *AVIDM_CHECKOUT_TYPE)(AsmNode *&); typedef LONG (WINAPIV *AVIDM_LOGOUT_TYPE)(void); AVIDM_LOGIN_TYPE AVIDM_LogIn=NULL; AVIDM_CHECKIN_TYPE AVIDM_CheckIn=NULL; AVIDM_CHECKOUT_TYPE AVIDM_CheckOut=NULL; AVIDM_LOGOUT_TYPE AVIDM_LogOut=NULL;
菜单添加-5
• //命令的执行——函数调用 int LogInAVIDM() //登陆AVIDM { UF_Initialize(); OpenStdPart(); UF_Terminate(); return 1; }
Байду номын сангаас
• FILE/UGOPEN加载DLL • UG的自动加载,在UG安装路径 C:\UGS180\UGII\menus下的 Custom_dirs.dat文件,则UG启动时自 动的查找该路经下或子目录\startup的 菜单文件和应用程序dll,和 \application下的dll,以及UDO下的自 定义对象。 • 演示
CAD技术及应用——CAD 系统二次开发
华中科技大学CAD中心 吴义忠
内容提要
• • • • 二次开发的界定 1. AutoCAD二次开发 2. Pro/E二次开发 3. UG二次开发
AutoCAD开发
• • • • 1 AutoLISP(R2.5) —— Visual LISP 2 ADS(R10) 3 ObjectARX(R13) 4 ActiveX Automation(VBA)
cadcad技术及应用技术及应用cadcad系统二次开发系统二次开发cadcad技术及应用技术及应用cadcad系统二次开发系统二次开发华中科技大学华中科技大学cadcad中心中心ug二次开发autocad开发autolispr25visuallispactivexautomationvba内模式与opendwg工程配置
菜单添加-2
• //命令余函数对应表 static UF_MB_action_t actionTable[] = { //AVIDM { "LogInAVIDM", (UF_MB_callback_t)LogInAVIDM, NULL }, { "CheckInFromAVIDM", (UF_MB_callback_t)CheckInFromAVIDM, NULL }, { "CheckToAVIDM", (UF_MB_callback_t)CheckToAVIDM, NULL }, { "LogOutAVIDM", (UF_MB_callback_t)LogOutAVIDM, NULL }, { NULL, NULL, NULL} };
UG_ASSEM类应用
• 遍历装配体: extern void ufusr(char *name, int *rtcode, int rtlen) { UF_initialize(); displayed_part = UF_PART_ask_display_part(); if (displayed_part != NULL_TAG) { root_part_occ = UF_ASSEM_ask_root_part_occ(displayed_part); if (root_part_occ != NULL_TAG) { char partname[133]; char ref_name[31]; …… int partNum = UF_ASSEM_ask_part_occ_children(root_part_occ, &chdrs); for(int i=0; i<partNum; i++) {UF_ASSEM_askcomponent_data(chdrs[i], partname, refname, instance_name, origin, matrix, transform);……//处理chdrs[i] RecursCall(chdrs[i]); // } } } UF_terminate(); }
}
程序退出回调 extern int ufusr_ask_unload( void ) { return( UF_UNLOAD_UG_TERMINATE ); } 获得程序错误 static void PrintErrorMessage( int errorCode ) { if ( 0 != errorCode ) { /* Retrieve the associated error message */ char message[133]; UF_get_fail_message( errorCode, message ); /* Print out the message */ UF_UI_set_status( message ); fprintf( stderr, "%s\n", message ); }
内模式与OpenDWG
1. ObjectARX
• 安装 • 应用程序向导(objectArx.awx) • 工程配置:
头文件:objectArx\inc 库文件搜索:objectArx\lib 所需库:rxapi.lib acrx15.lib acdb15.lib acutil15.lib acge15.lib acgiapi.lib achapi15.lib acISMobj15.lib acad.lib acedapi.lib acsiobj.lib adui15.lib acui15.lib
演示
特点: • 符合国标的辅助绘图功能 • 参数化设计工具 • 标准件库 • 零部件设计
UG二次开发
• • • • Unigraphics介绍 UG/Open开发简介 UG/Open开发技术 开发实例
UG简介
UG/OPEN API简介
• UG/OPEN是UG提供的C调用库; 1)对UG的模型文件和模型进行操作,一般只要 命令,都有函数; 2)改变UG的界面,建立自己的交互式程序界面; 3)创建并管理自定义对象。 • 优点:开放性好;易开发调试;帮助较详细
MFC的使用
int fuction() { AFX_MANAGE_STATE(AfxGetStaticModule State()); HINSTANCE hInstResourceClient = AfxGetResourceHandle(); AfxSetResourceHandle(::GetModuleHa ndle("3DLib.dll")); CtestDlg dlg; Dlg.DoModal(); }
UG/Open API约定
• 函数名称:UF_<area>_<Name>; uc<xxxx>和uf<xxxx> • 得到:UF_<area>_ask_<xxxx> • 创建:UF_<area>_create_<xxxx> • 编辑: UF_<area>_edit_<xxxx> • 设置: UF_<area>_set_<xxxx>
UG/OPEN的HTML帮助
• 帮助的使用 • 数据的类型:input, output, Output to be freed
UG/OPEN数据类型含义
• 数据类型: _t(数据类型), _p_t(数据类型的指针), _s(结构标示), _u_t(联合), _u_p_t(联合指针), _f_t(函数指针)
UG/OPEN的加载
UG_PART 类
UG_ASSEM类
• 装配概念: tag——UG对象的标示; Piece Part——单个零件,装配的基本元素,包括几何 和特征 Occurrence——装配的零件的具体实例 Object Occurrence ——零件中对象的实例 Reference Set ——简化表达组件,引用集为NULL Display part —— 显示零件/子装配 Workpart —— 工作零件/子装配
UG开发模式
• 外模式(External):Exe,UF_Initialize()启动所 需的动态连接库,UF_terminate()结束。这种模式主 要用于不需要UG图形界面出现时使用,如PDM中提 取装配体的装配树。UG/OPEN中绝大多函数均可在 External模式下使用。 • 内模式(Internal):dll在UG图形环境下加载运行, 其特点是: 执行代码小、连接快;运行结果在UG的图形窗口中可 见;入口函数ufusr()或ufsta();一旦加载不能手工卸 载,只有调用API函数才能卸载
VC开发环境的设置
• 应用程序向导:Ugopen_v18.awx; • 一般的DLL改变工程设置: 1) link库:libufun.lib libugopenint.lib libopenpp.lib libvmathpp.lib 2) Preprocessor: WIN32,_DEBUG,_WINDOWS,_USRDLL,_AFXDL L,_MBCS 3) Additional Include Path: $(UGII_BASE_DIR)\ugopen,$(UGII_BASE_DIR )\ugopenpp
菜单添加-3
• 编辑菜单命令 文件 .men
菜单添加-4
//建立函数与命令的对应关系 extern "C" void __declspec(dllexport) ufsta( char *name, int *rtcode, int rtlen) { //装载AVIDM接口函数-结束 UF_MB_add_actions( actionTable); …… }
ObjectARX程序框架
• 入口回调函数 extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) { //初始化,命令与函数体映射 … }
2. ObjectARX内库
五大类: • 1. AcRx类 • 2. AcEd类 • 3. AcDb类 • 4. AcGi类 • 5. AcGe类