欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    zwcad二次开发文档简易指南.docx

    • 资源ID:4926944       资源大小:149.90KB        全文页数:12页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    zwcad二次开发文档简易指南.docx

    2二.使用SDS进行二次开发2.2SDS和ADS接口的主要差异2编译SDS应用程序4三. 使用AUTOLISP进行开发4四. 使用VBA/VB进行开发5五. ZWCAD的定制5.5屏幕菜单及其定制5Image菜单(图标菜单)的定制7PROFILE的定制 9ZWCAD-LSP和 ZWCAD-SDS文件的作用和定制10别名的定制11其他定制11(内部参考)一.概述在zwcad上可以通过二次开发来定制和扩展zwcad的功能.当前的zwcad提供 AutoLISP,SDS 以及 Visual Basic for Applications (VBA,COM开发包进行二次 开发.在zwcad上,你也可以使用许多原来在autocad平台上开发的应用程序.例 如使用autolisp编制的程序可以在几乎不用修改的情况下移植到zwcad平 台.Zwcad还完整支持AutoCAD Dialog Control (DCL)语言,不需修改.目前的 zwcad 还不支持 Object ARX,DBX.二. 使用SDS进行二次开发SDS 是一个和 ADS® (AutoCAD® Development System)开发包相兼容的C/C+ 语言接口.大部分ads应用程序经过再编译可以直接应用于zwcad。中望建筑就 是用sds sdk开发的。下面所述内容均以ads开发包为比较对象,以ads开发程 序员为讲解对象.具体的sds函数说明请参考帮助文档.SDS和ADS接口的主要差异SDS和ADS的接口差异可以直接从sds.h和ads.h这两个头文件的比较得出. 主要差异如下.1.Sds开发包的接口函数以sds_为前缀.Ads开发包的接口函数主要以ads_, acad_, and acrx等为前缀.在sds.h中提供了移植ads用的宏例如 #define adsentdelsdsentdel这样只需要在ads应用程序源代码中将#include “ads.h”以#include“sds.h”替换,并将要链接的库文件改为sds.lib编译链接即可完成从ads到 sds的移植.2. sds开发包主要扩展的函数#if defined(_WINDOWS_)HDC *sds_getviewhdc(void);int sds_getrgbvalue(int nColor); RGBHPALETTE sds_getpalette(void);HWND sds_getviewhwnd(void);HWND sds_getmainhwnd(void);int sds_drawLinePattern(HDC h_dc, RECT rect, struct sds_resbuf *lineParam);#endif int sds_setcallbackfunc(int (*cbfnptr)(int flag,void *arg1,void *arg2,void *arg3);/ Command Start/End.#define SDS_CBCMDBEGIN 0/ arg1="command name" cast as (char *)/ Callback return RTERROR will cause command to not be called.#define SDS_CBCMDEND1/ arg1="command name" cast as (char *) / Return code does not matter./ Mouse movements and Mouse buttons.#define SDS_CBMOUSEMOVE#define SDS_CBLBUTTONDN#define SDS_CBLBUTTONUP#define SDS_CBLBUTTONDBLCLK#define SDS_CBRBUTTONDN#define SDS_CBRBUTTONUP234567/ arg1=X pixel/ arg1=X pixel/ arg1=X pixel/ arg1=X pixel/ arg1=X pixel/ arg1=X pixelarg2=Y pixelarg2=Y pixelarg2=Y pixelarg2=Y pixelarg2=Y pixelarg2=Y pixeletc.进度条的控制.int sds_progresspercent(int iPercentDone);int sds_progressstart(void);int sds_progressstop(void);加载别名文件-pgp文件int sds_readaliasfile(char *szAliasFile);不同于sds_printf,这个函数可以发送命令,例如”LINE” int sds_sendmessage(char *szCommandMsg);/在绘制窗口和命令历史窗口间切换焦点.int sds_swapscreen();组操作int sds_createGroup(const char* pName, const char* pDescription, int selectable, int unnamed, sds_name sdsGroupName);int sds_modifyGroup(const char* pNewName, const char* pNewDescription, int selectable, sds_name sdsGroupName);int sds_addSSToGroup(sds_name ss, sds_name sdsGroupName);int sds_removeSSFromGroup(sds_name ss, sds_name sdsGroupName);int sds_getSSFromGroup(sds_name ss, sds_name sdsGroupName);int sds_findGroup(const char* pName, sds_name sdsGroupName);int sds_findGroupByEnt(sds_name entity, sds_name ssGroups);/求实体交点int sds_intersect(sds_name entFirst, sds_name entSecond, struct sds_resbuf *ptList);实体所占矩形空间void sds_entextent(sds_name ename, sds_point minPoint, sds_point maxPoint);SDS不支持的ads函数主要有以下几个intads_ssGetKwordCallbackPtr(struct resbuf* (*pFunc)(const char*);intads_ssSetKwordCallbackPtr(struct resbuf* (*pFunc)(const char*);intads_ssGetOtherCallbackPtr(struct resbuf* (*pFunc)(const char*);intads_ssSetOtherCallbackPtr(struct resbuf* (*pFunc)(const char*);adsw_acadMainWnd,/sds 中使用 HWND sds_getmainhwnd(void);and adsw_acadDocWnd./sds 中使用 HWND sds_getviewhwnd(void);注意一个函数SDS: int sds_dictdel(const sds_name nmDict, const char *szDelThis);ADS: int ads_dictremove (const ads_name dictname, const char* symname);编译SDS应用程序一般使用VC编译环境主要做好sds头文件和库文件的路径设置,然后#include “sds.h”#pragma comment( lib,sds ) 或设置链接弓|用到 sds.libOK三. 使用AutoLISP进行开发zwcad提供了调用Autolisp程序的接口,可以将大部分的lisp程序正常执行,但需要注意以下事项1. 最为重要的一点。Zwcad中的LISP无法进行COM调用,无法使用VLA开头的函数。因 此,在ZWCAD中,你就不能通过lisp使用ACTICEX方式产生图元并用变量储存该图元的 指针以进行以后的修改查询等操作,你只能使用COMMAND和ENTMAKE的方式进行产生图 元,同时你只能使用图元名间接对图元进行操作。(VLISP提供的AutoLISP扩展函 数由曲线测量函数、数据转换函数、对象处理函数、特性处理函数、集合操作函数和 词典函数组成。函数名以vlax-为前缀。这些函数和ActiveX方法都提供vla-*函 数。有些vlax-*函数在使用ActiveX命令时是必需的。)2. 无实现如VLISP中的反应器及其机制。3. Zwcad也并没有提供一个如acad中的visual lisp的编译环境,只能直接使用写好的的 lisp程序。4. ZWCA D能加载未经加密的*.LSP文件或以“AutoCAD PROTECTED LISP file”方式加密的 *.LSP文件。ZWCAD的LISP中能使用DCL文件。5. ZWCAD不能加载经AUTOCAD的VISUAL LISP编译集成的VISUAL LISP可执行文件vax (一 个或多个LSP文件和/或对话框控制语言(DCL)文件的编译集合。)ZWCAD不能加载FAS文件(.fas)- 一个LSP程序文件的二进制编译版本。四. 使用VBA/VB进行开发zwcad可以提供vba/vb支持,但是在一般的版本里没有提供.重要区别:Automation对象不同.使用支持vba版本的zwcad,最重要的是理解,zwcad里面的对象和acad的对象是不相同 的.zwcad的对象和acad的对象可能在使用上和名字上有很多相似的地方,但是他们是不同的 对象,有自己的唯一标识id.以前基于acad开发的vba/vb应用引用到的acad对象,其对象实现 在acad里,不在zwcad里,所以不能把这些应用直接拿到zwcad上使用。另外,Acad中关于界面 的对象如MenuBar,PopMenu,MenuGroup(s),Toolbar(s),PopMen uItem,ToolbarItem等对象在中望CAD中还没有实现.五. ZWCAD的定制屏幕菜单及其定制zwcad提供一个和ACAD2000及 以后版本类似的屏幕菜单.中望建筑软件使用了该功能,如右图所示.功能详解:1. 样式如F立 面的浅蓝色底,实心箭头朝下的按钮表明了 当前激活的菜单.图中所示,尺寸标注为当前激活的菜单.除了顶级菜 单按钮(这里是“中望建筑”)外,可以右键点击当前激活的菜单按钮, 可以弹出其下的所有级别的菜单及菜单项.2. 带有卜的按钮,左键点击可以进入的下一层菜单.右键点击 可以弹出其下的所有级别的菜单及菜单项.3. 带有的按钮是当前激活菜单的上级菜单.左键点击可以百 接回到该菜单。右键点击可以弹出其下的所有级别的菜单及菜单项.4. 没有箭头的按钮是菜单命令项.左键点击执行命令。中望CAD开始运行时,会检测当前日录下是否存在 ScreenMnu.mnu文件,如果存在就会加载该菜单文件.定制该文件主要注意事项1. 可以使用/*.*/及/来注释内容2. MENU_TITLE指出该屏幕菜单的顶级文字,如中望建筑中为 MENU_TITLE二中望建筑.3. *SCREEN行下开始定义菜单菜单项定义如下.MENUITEM_ID MenuItemNameCommandStringMenuItemName是显示在屏幕菜单上的名称CommandString是发送给命令行窗口的命令如 ID_Desaxis直线轴网C"C"Czhxzhw如果要指明当前的项有子菜单可以使用-> 符号表明菜单进入点.如ID_Axis-> 轴网使用-表明该菜单项为子菜单最后一项,如ID_axin<-取消外偏C"C"Cqxwp又如ID_DELMDBT:<-<-删除窗套LLCshchcht返回两级菜单.子菜单可以嵌套但不可以交叉.4. *RESOURCE行下开始定义图标图标定义如下MENUITEM_ID =MenuItemBmp.bmp”只需要求菜单项定义中的ID和图标定义中的ID 一致即可把图标 和命令项联系起来.可以不给菜单项指定图标.注意,位图必须位于当前日录下的子目录icon中.5. -行指明一个分割条Image菜单(图标菜单)的定制在*IMAGE行下开始定义图标菜单,格式同acad菜单文件.例如一个简单的screenmnu.mnu文件如下MENU_TITLE="Image Test"/屏幕菜单*SCREENID_TEST->TestID_SCREENMENUITEMID_SCREENMENUITEMItem1$I=JZD $i=*<-Item2$I=WTBZ $i=*IMAGE *JZD 界址相关符号 cass2(jzd1,界址线)ACACAPjzline;APcass2(jzd2,街道线)ACACAPdd;300010,Pcass2(jzd3,街坊线)ACACAPdd;300020,P*WTBZ 图标菜单项调用图标菜单cass3(bz1,Test)$i=JZD $i=* *RESOURCEID_SCREENMENUITEM="1.bmp","欢迎”点击Item 1的效果如下profile的定制通过profile的定制可以在zwcad上指定菜单以及工具栏和指定支持路径(搜索路径).定制profile的方法是:1. 在程序图标的“日标”项加命令参数“/p配置项”(配置项是字符串,如 zwarch、zwfur 等)和“起始位置”项加程序的工作路径(如右图),这样以“/p配置项”来启动ZWCAD,ZWCAD会在注册表里的 HKEY_CURRENT_USERSoftware中望龙腾 ZWCAD建立一个为 “配 置项”的配置。2. 在注册表里的HKEY_CURRENT_USERSoftware中望龙腾 ZWCAD 配置项Config的Menu File项指定菜单位置(路径和名称不包 括菜单的扩展名)和"Drawing”、"Font"、"Help"、"Xref"、 HatchPat、"Blocks"指定相应的支持路径(搜索路径)路径间用 分号连接。下面以中望建筑软件为例说明:“配置项”为ZWARCHZWCAD 的安装路径为:“D:Program Files中望 CADzwcad.exe”中望建筑软件安装路径为:“D:Program Files中望建筑软件1.0”,要加载的菜单为 ZWARCH.mnUo1. 程序图标项设置:如:目标:"D:Program Files中望 CADzwcad.exe" /P ZWARCH起始位置:"D:Program Files中望建筑软件1.0"2. 注册表项设置:需在注册表里写以下注册项HKEY_CURRENT_USERSoftware中望龙腾ZWCADZWARCHConfig/菜单:"Menu File"="D:Program Files、中望建筑软件1.0ZWARCH" /菜单文件目录和文件名 (不要加扩展名)"支持路径:HKEY_CURRENT_USERSoftware中望龙腾ZWCADZWARCHConfig"Drawings"="path1;path2.""Font"="path3;path4.""Help"="path3;path4.""Xrefs"="path5;path6.""Hatch patterns"="path7;path8.""Blocks"="path9;path10."zwcad.lsp和zwcad.sds文件的作用和定制zwcad在每次打开或新建文件的时候,都会在当前路径搜索 zwcad.lsp和zwcad.sds这两个文件,如果找到文件就加载.对于zwcad.lsp,你可以用autolisp语言在里面作一些初始化的工 作.对于zwcad.sds,该文件其实是一个文本文件,每行是一个需要加载的sds应用程序的名称.例如目前中望建筑中使用的zwcad.sds 内容如下:extend.dllarchinit.dll表明中望建筑中任何打开或新建文档都会先加载这两个应用程序.发现的问题:其实这些应用程序只需加载一次就可以了,如果打开或新建 多个文档,后面的重复加载实际上是失败的也是多余的.别名的定制目前我还找不到一个仅仅使用pgp文件就能在zwcad开始运行时就加载的方式.不过在sds中可以使用int sds_readaliasfile (char *filenam)这个函数帮助加载.其他定制菜单(除了屏幕菜单和image菜单外),工具栏和快捷键的程序定制.若前面的profile功能中使用acad菜单文件能正确识别里面的相关信息即可.I目前还有待改善.

    注意事项

    本文(zwcad二次开发文档简易指南.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开