1、AutoCAD二次开发程序的自动安装处理AutoCAD二次开发程序的自动安装处理 AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大
2、批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。为此笔者用VC+开发了一套自动安装程序,使原本需要五、六分钟的人工操作在十几秒内即可自动完成。 一、 基本思路 整个安装程序遵循以下思路: 1) 首先获得所在机器AutoCAD2000系统的安装路径; 2) 寻找菜单文件AutoCAD2000supportacad.mnu,打开文件并将要添加的内容加至末尾; 3) 寻找LISP文件AutoCAD2000supportacad2000doc.lsp,打开文件并将要添加的内
3、容加至末尾; 4) 创建一个预先命名的子目录,将所有二次开发形成的各类文件拷入; 5) 给出信息框,告知安装成功,如有问题则告知安装失败。 需要指出的是,在添入acad2000doc.lsp的内容中须有如下语句: (command“_menu”(strcat (getvar menuname) .mnu)),目的是为了强制执行菜单文件装入命令,将改动后的acad.mnu文件编译后装入。 另外,在添入acad2000doc.lsp的内容中还有一赋值语句,将准备创建的包含所有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在AutoCAD环境下交互设定路径的
4、麻烦。 二、 实现方式及关键函数 为获得AutoCAD2000的安装路径,需要利用WINDOWS系统注册表的有关功能。 首先通过RegOpenKey函数打开注册表: HKEY hKey; LONGret=RegOpenKey( HKEY_LOCAL_MACHINE, SoftwareAutodeskAutoCADR14.0ACAD-1:804, &hKey); 其中第一参数HKEYLOCALMACHINE为注册表中预定义的主键句柄,第二参数为注册表中HKEYLOCALMACHINE下的子键内容,第三参数hKey将返回一子键句柄,用于接下来的键值查询。若该函数运行成功,将返回一长整型数ERROR
5、SUCCESS。 接下来利用RegQueryValueEx函数进行键值查询: DWORD dwType=REG_SZ; BYTE szData100; DWORD dwSize=sizeof(szData); If (ret=ERROR_SUCCESS) ret=RegQueryValueEx(hKey, AcadLocation, 0, &dwType, szData, &dwSize); 其中第一参数hKey为由RegOpenKey函数获得的欲查询的子键句柄;第二参数“AcadLocation”为欲查询的键值名;第三参数为保留项,要求添0;第四参数为键值数据类型;第六参数为键值缓冲器容量;
6、最关键的是第五参数szData,欲查询的键值结果将由其带回,该键值即为所需要的AutoCAD2000的安装路径。 以上涉及到的有关注册表中主键、子键、键值名、及键值的关系可通过下列方法由WINDOWS系列注册表查出:单击“开始”“运行”添入“regedit”“确定”“HKEY_LOCAL_MACHINE”“Software”“Autodesk”“Autocad”“R15.0”“ACAD-1:804”“AcadLocation”“e:autocad2000”。其中的键值名“AcadLocation”所对应的键值为“e:autocad2000”,就是AutoCAD2000的安装路径,在不同的机器上
7、可能内容不同。 键值查询函数若运行成功,将返回长整型数ERRORSUCCESS。 下面可利用szData带回的路径名与已知路径名组合成全路径从而打开菜单文件acad.mnu添加内容: char szRootName100=supportacad.mnu; if (ret=ERROR_SUCCESS) 1strcat(char*) szData, szRootName); 现在szData中装有acad.mnu的全路径,以下操作将打开该文件并添入内容: HANDLE hfile=CreateFile(char*) szData, GENERIC_READ|GENERIC_WRITE, 0, NU
8、LL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); If(hfile!=INVALID_HANDLE_VALUE) if (0xFFFFFFFF!=SetFilePointer(hfile, 0, NULL, FILE_END) char szBuf1000= *POP12 *CAM &CAM -基本参数 卡盘原点ccchuck_datam 换刀原点 cctool_datam 刀具管理 创建新刀 cccreate_new_tool -刀库增删 cctool_manage ; DWORD dwWrite=0; BRet=WriteFile(hfile
9、, szBuf, Lstrlen(szBuf), &dwWrite, NULL); If (!bRet) Printerror(); CloseHandle(hfile); 上述操作中用CreateFile函数打开文件,SetFilePointer函数将指针移至文件末尾,字符串数组szBuf中装有欲添加的内容,以WriteFile函数写入,PrintError为自编的错误处理函数。 以同样的方法可以找到acad2000doc.lsp文件并添入内容。 以下操作将创建一个名为“C:hkcam”的子目录,并将事先准备好的本程序所在目录下的所有文件拷贝进去: Cstring nam1, nam2; B
10、OOL bCreate=CreateDirectory(C:hkcam, NULL);/创建子目录 CfileFind finder; 创建类对象 BOOL b Working=finder.FindFile(*.*);/利用类函数搜索所有文件 While(b Working)/循环搜索及文件拷贝 b Working=finder.FindNextFile(); nam1= finder.GetFileName();/获得文件名 nam2= c:hkcam; nam2=nam2+nam1;/组成全路径 BOOL bCopy=CopyFile(nam1, nam2, FALSE);/文件拷贝 所
11、有操作成功后,以信息框告知: MessageBox( NULL,“安装成功,请按OK钮继续”,“安装结果”,MBOK); 整个程序以MFC静态链接库创建。上述所有内容可以写入一个源文件内,这里称其为Append.cpp。为使最终执行文件尽可能小,应删去程序框架中所有不需要的内容。为此,源文件中只保留Append.cpp,Append.rc,及StdAfx.cpp几项;而头文件中只有Append.h,Resource.h,及StdAfx.h几项。所定义的唯一派生类为class CappendApp:public CwinApp,置于Append.h之内。 三、结束语 在VC+环境下利用有关WIN
12、DOWS系统注册表操作函数获得AutoCAD系统的安装路径,从而找出并改写AutoCAD有关文件;创建子目录并拷入各种二次开发形成文件,由此实现了AutoCAD二次开发程序与AutoCAD系统的自动衔接与嵌入。文中程序已由实践验证,完全可用于AutoCAD二次开发程序的自动安装。用 IBM Net.date解决CAD图纸等大对象问题苏州供电局信息中心 唐一均 - IBM Net.data是IBM在web上的一种中间件,以往的CGI方式是在服务器端应每个客户端请求而产生各个进程,当使用人数大量增多时,响应速度就会明显下降,Net.data则是长驻服务,执行效率更高,编写以脚本为主并支持Java,
13、 REXX, Perl 和 C+等开发语言,使得开发更快更方便,Net.data和ASP(Active Server Page)有类似之处,但较ASP除支持NT外支持更多平台,如linux、Solaris、AIX、AS/400、OS/390、OS/400等,而目前而言UNIX等平台比NT要稳定很多,而且Net.data的平台之间的移植性相当好。从性能上看Net.data也支持高性能的FastCGI,如果需要应用于电子商务等数据流量大而重要的领域,Net.data就显的更为适合, 1998年的冬奥会期间使用了Net.data,网上流量达到每分钟110,414次,Net.data还是运行良好, 所
14、以虽然现在有很多种方式可以实现web与db2之间的数据交换,但是基于各类综合性能全面考虑,我们更乐意用Net.data方式解决一些问题。 - 为了让大家有个直观的了解,下面简单介绍一个用Net.data方式解决的基于web、db2的cad图纸的查询与显示的实现方法,假使您和您的同事正致力于飞机制造和设计,或是正在为建造一个大厦而设计图纸,那么成堆的图纸就可以通过这样的方式简便的查询到,并同时被您和您的同事所利用,应该在此声明的是,Net.data不仅只是能做一些查询工作,它提供的是完整的SQL语言的支持,也就是说可以通过它输入,删除,更新数据,也许有人会担心Net.data实现方式的安全问题,
15、Net.data它可被安装于很多操作系统和很多web server,您尽可以挑选您认为比较安全的系统,而且您可以在安装Net.data的web server上安装db2 CAE,由CAE去取存放于另一台服务器上的db2数据,更有很多方法限于篇幅问题,在此不祥述了。 - 请您先访问下面地址下载net.data。 - NT上安装好Net.data以及IBM UDB 5.2, 假定NT服务器地址是172.23.160.6。 用UDB控制中心或UDB命令行处理器 中新建一个数据库名为:tyjdb 连接到数据库tyjdb connect to tyjdb user userid using passwo
16、rd; 新建一个放大对象的表,表名为 cadtable; create table pictable (name varchar(30) not NULL, photo BLOB(2M), primary key (name) ); 把大对象输入到数据库tyjdb中的表cadtable中。 Lob_in是文本文件, import from lob_in.txt of del modified by lobsinfile method p(1,2) messages imp_lob.msg insert_update into cadtable( name, photo ); lob_in.tx
17、t中的内容假定为: - CAD图纸,t1.dwf, CAD图纸2,t2.dwf - - t1.dwf和t2.dwf应放在db2命令行省缺目录下,而且应该小于2M, 然后在db2命令行窗口中运行上面的import语句,两张大对象图片就插入了表中,如果您愿意,也可用delphi编小段程序把图片插入表中。 - 在NT服务器端Net.data安装目录下的macro目录中新建文本pic.d2w作为将要运行脚本。 - %DEFINE DATABASE=tyjdb LOGIN=userid PASSWORD=password docroot=c:inetpubwwwroot mplobs rename2=
18、%EXEC rename c:inetpubwwwroot mplobsDTW_rDELSTR ($(V2), 1, 9) DTW_rDELSTR($(V2), 1, 9).dwf % %FUNCTION(DTW_SQL) queryData() SELECT name,photo FROM pictable %REPORT CAD图档管理系统 看cad图纸前请先下载并安装autodesk 公司的whip.exe 下面是从DB2库中查询到的结果 %ROW $(rename2) $(V1) 看具体图纸 % % % %HTML(REPORT) queryData() % - 下一步就是在浏览器上显
19、示CAD图纸了,一般我们可以选择很多控件,因为dwf文件显示速度越是显示dwg的七倍,所以在这里假设我们使用Autodesk公司的whip!您可以访问 下载它,每个浏览器用户只需要安装whip,就可以直接用浏览器观看任何dwf文件了,netdata在处理大对象时,sql语句用db2中取出BLOB对象即dwf格式的cad图纸,并不给它原来的文件名,而是给它一个临时文件,而且没有后缀名,并省缺的把它保存到你web server的根目录的tmplobs目录下,如果你用IIS的话,一般就在C:inetpubwwwroot mplobs下,而在已经安装了whip的浏览器端,如果最后返回的文件不是dwf后
20、缀的话,就不能正常显示dwf文件,所以我们最后要把这些文件改一下文件名,上面脚本中DTW_rDELSTR($(V2), 1, 9)意思是把变量$(V2)从第一个字符到第九个字符全删除,因为$(V2)本身值是类似/tmplobs/?的字符串,当脚本执行NT外部命令rename时,“/”应该是“”,所以要把“/”全删除,如果您用基于AIX或Linux的Net.data的话,就不用担心了,另外,如果您的大对象是Net.data认识的jpg或gif等文件类型的话,就不用改名字了。 - 现在您就可以打开浏览器输入URL,如果您都按省缺配置的话,应该输入,http:/172.23.160.6/cgi-bi
21、n/db2www.exe/pic.d2w/report 就可以看到两张cad图片在网页上显示出来了。 - 以上是Net.data显示查询CAD图纸等大对象的例子,您可以把它利用到电子商务的商品图片显示等等方面,最后,建议大家在使用BLOB时多考虑一下系统性能。您可以访问以下网站获取更多有用信息: - 在AutoCAD同一张图上自动实现不同的标注比例 做机械制图时可能经常遇到这样的问题,装配图或者零件图的某一部分经常需要局部放大。出图时也需要出在同一张纸上。如果不涉及标注,可能并没有太大的问题,但常常不得不处理标注的比例。Auto CAD标注时可以选择自动测尺寸标注,这样当改变标注线位置时标注的
22、尺寸数值自动变化。如果不是自动测尺寸,而是强行输入一个数值字符串,那么如果尺寸线位置变动(比如你改变设计尺寸),标注数值是不变化的,这不符合客观情况。 在同一张图上标注不同比例的实体时,虽然作为Auto CAD实体,他们的大小是不一样的,但作为实际设计模型,尺寸是一样的,不过是局部放大显示罢了!假如使用自动测尺寸,照顾了原图就照顾不了放大图,必须有一个图是使用不自动检测尺寸,这对改图又改尺寸标注是很不方便的。如果开不同视窗,又会涉及到文字比例问题,因为图放大了文字也放大,而实际需要的是图放大而文字不放大。 解决这个问题有一个方法可以参考,就是使用DIMSCALE系统变量控制,例如,我们需要将原
23、图一部分局部放大10倍,原图标注尺寸是150的地方,在放大图上也是150,虽然图变大了10倍,绝对不会检测成1500, 我们只要在标注时将DIMSCALE系统变量设成0.1就可以了。 改变系统变量固然可以解决尺寸自测问题,但是,DIMSCALE变量是全局的,他将影响以后所有的标注,如果在实际操作时反复切换这个变量,又为绘图添加很多新的麻烦,所以,下一步就是考虑如何自动切换标注比例问题。 以笔者的成功范只要指例,采用下列方式达到自动切换标注比例的功能,定了一个矩形框,确定在此框内的比例,以后凡是在此框内绘图都自动设置DIMSCALE变量,在框外绘图标注比例会设回去。 第一 : 截获Auto CA
24、D鼠标按键消息;重新编制窗口处理过程,采用SetWindowLong将此过程附加到Auto CAD绘图窗口。 第二 : 在窗口处理过程里面判断鼠标的位置,是否落在规定的矩形框内,如果在则改变系统变量。 第三 : 为了记录特定的矩形框位置,设计了一个新实体,新实体可以显示可以隐藏,可以移动、缩放,但不能随意删除,必须用指定的命令才可删除,如果使用Auto CAD命令删除它,在存盘时可以恢复,并设为隐藏状态,新实体的一个重要属性就是标注比例,可以随时改动,并影响框内所有实体。 综上所述,采取这几个简单的技术,就实现了在同一张图上自动实现不同的标注比例AutoCAD 至 PhotoShop 的几种图
25、形传输方法机械工业部第五设计研究院计算中心近年来,随着计算机硬件设备与软件的不断发展,电脑效果图己在建筑行业的CAD应用中普及开来。电脑效果图的制作一般可分为以下几个步骤: 建立建筑物的外观模型。由于AutoCAD具有精确、易于定位与修改的优点,又可利用前期的设计成果,因此本阶段常使用AutoCAD建立模型,并将模型转化为DXF格式以备输出。在场景中加入合适的摄象机、灯光,并为建筑物赋予材质,最后渲染为一个图像文件。常用的软件为3DS4、3DSMAX、3DSVIZ。在PHOTOSH0P中打开渲染结果,并为之加入前景、背景以及配景(树木、花草、汽车、人物、天空等),然后调整图像的明暗、色彩并加以
26、修饰润色后即可完成一幅精美的电脑效果图。由于以上三个步骤是在不同的软件中进行的,需要在三个软件中进行转化,但有的时候需要制作一张立面或平面效果图,这就需要制图者直接利用AutoCAD中制作的平面图或立面图,将其调入到PHOTOSH0P中后再加以润色。 本文将就此问题介绍几种传输的方法,并加以对照。(本文所举例子的软件环境为中文WINDOWS98、AutoCAD14+中望隆迪汉化组件、PHOTOSHOP5.0) 1屏幕抓图法 1.启动AutoCAD14并打开需要转化的图,关闭不需要的图层,并将所有可见图层的颜色都转化为同一种颜色-白色(white)。 2.使用菜单命令“工具系统配置”,在弹出的对
27、话框中选中Display标签,单击color按钮,弹出一对话框,在其中将屏幕作图区的颜色改为白色(即R=G=B=255)后,按下确定按钮,注意此时屏幕作图区的底色变为白色,而原来设置为臼色的图层现在以黑色来显示。 3.按下键盘的“PrintScreen”按键,将当前屏幕以图像的形式存入剪贴板,然后关闭AUTOCAD。 4.打开PHOTOSH0P5.0,使用菜单命令“FileNew,文件只寸使用缺省值,Contents项令White选项为选中状态。 5.使用菜单“EditPaste,将剪贴板中暂存的图像粘贴到当前文件之中,利用“Crop,剪切工具将周围不用的区域剪裁掉。 6.利用“MagicWa
28、nd,魔术棒工具选择不同区域,并加以润色即可。 注意:此方法只适用于Windows版的AutoCAD,而对于仍在使用D0S版的AutoCADR12的用户则不能利用Windows中剪贴板(Clippingboard)的这种功能。 屏幕抓图法的优点:此方法充分利用了Win-系统的资源,操作简单,易于使用。 屏幕抓图法的缺点: 1.只能获得固定尺寸的图像,且所获得图像的大小取决于屏幕所设的分辨率,在本例中为1024768pixels,尤其是去掉周围的无用信息后,最后获得的实际图像大小为683524pixels,显然不能满足出一张大图的需要,因此此方法仅适用于出小图的需要; 2.由于传入PHOTOSH0P的图为图像文件,因此线条没有单独区分出一层,增加了修改的难度,且灵活性不够。 2输出位图(BMP)法 输出位图可按下述步骤进行: 1.启动AutoCADR14,打开需转化的图并关闭不需要的图层。 2.确认当前屏幕作图区的颜色为白色,(若是则略过此步)若不是,则使用菜单命令“工具系统配置”,在弹出的对话框中选中Display标签,单击color按钮,弹出一对话框,在其中将屏幕作图区的颜色改为白色(即R=G=B=255)后,按下确定按钮,注意此时屏幕作图区的底色变为白色,而原来设置为白色的图层现在以黑色来显示。 3.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1