有二次开发生成文件的子目录全路径名赋予一全局变量,以供二次开发程序在需要时调用,从而避免了在AutoCAD环境下交互设定路径的麻烦。 二、 实现方式及关键函数
为获得AutoCAD2000的安装路径,需要利用WINDOWS系统注册表的有关功能。 首先通过RegOpenKey函数打开注册表: HKEY hKey;
LONGret=RegOpenKey( HKEY_LOCAL_MACHINE, \
其中第一参数HKEY_LOCAL-MACHINE为注册表中预定义的主键句柄,第二参数为注册表中HKEY_LOCAL_MACHINE下的子键内容,第三参数hKey将返回一子键句柄,用于接下来的键值查询。若该函数运行成功,将返回一长整型数ERROR_SUCCESS。
接下来利用RegQueryValueEx函数进行键值查询: DWORD dwType=REG_SZ; BYTE szData[100];
DWORD dwSize=sizeof(szData); If (ret=ERROR_SUCCESS)
ret=RegQueryValueEx(hKey, \ 其中第一参数hKey为由RegOpenKey函数获得的欲查询的子键句柄;第二参数“AcadLocation”为欲查询的键值名;第三参数为保留项,要求添0;第四参数为键值数据类型;第六参数为键值缓冲器容量;最关键的是第五参数szData,欲查询的键值结果将由其带回,该键值即为所需要的AutoCAD2000的安装路径。 以上涉及到的有关注册表中主键、子键、键值名、及键值的关系可通过下列方法由WINDOWS系列注册表查出:单击“开始”――“运行”――添入“regedit”――“确定”――“HKEY_LOCAL_MACHINE”――“Software”――“Autodesk”――“Autocad”――“R15.0”――“ACAD-1:804”――“AcadLocation”――“e:\\autocad2000”。其中的键值名“AcadLocation”所对应的键值为“e:\\autocad2000”,就是AutoCAD2000的安装路径,在不同的机器上可能内容不同。 键值查询函数若运行成功,将返回长整型数ERROR_SUCCESS。
下面可利用szData带回的路径名与已知路径名组合成全路径从而打开菜单文件acad.mnu添加内容:
char szRootName[100]=\\\\support\\\\acad.mnu; if (ret=ERROR_SUCCESS)
1strcat((char*) szData, szRootName);
现在szData中装有acad.mnu的全路径,以下操作将打开该文件并添入内容: HANDLE hfile=CreateFile((char*) szData, GENERIC_READ|GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); If(hfile!=INVALID_HANDLE_VALUE) {
if (0xFFFFFFFF!=SetFilePointer(hfile, 0, NULL, FILE_END)) {
char szBuf[1000]=\基本参数]\\n[卡盘原点]^c^cchuck_datam\\n[换刀原点] ^c^ctool_datam\\n[<-毛坯参数] ^c^cstock\\n[工步
设计] ^c^csteps\\n[仿真加工] ^c^csimulation\\n[代码生成] ^c^cgen_code\\n[代码存盘] ^c^ccode_save\\n[工艺存盘] ^c^csave_inf\\n[工艺装入] ^c^cload_inf\\n[->刀具管理]\\n《创建新刀》 ^c^ccreate_new_tool\\n[<-刀库增删] ^c^ctool_manage\\n\; DWORD dwWrite=0;
BRet=WriteFile(hfile, szBuf, Lstrlen(szBuf), &dwWrite, NULL); If (!bRet) Printerror(); }
CloseHandle(hfile); }
上述操作中用CreateFile函数打开文件,SetFilePointer函数将指针移至文件末尾,字符串数组szBuf中装有欲添加的内容,以WriteFile函数写入,PrintError为自编的错误处理函数。
以同样的方法可以找到acad2000doc.lsp文件并添入内容。
以下操作将创建一个名为“C:\\hkcam”的子目录,并将事先准备好的本程序所在目录下的所有文件拷贝进去: Cstring nam1, nam2;
BOOL bCreate=CreateDirectory(\创建子目录 CfileFind finder; //创建类对象
BOOL b Working=finder.FindFile(\利用类函数搜索所有文件 While(b Working)//循环搜索及文件拷贝 {
b Working=finder.FindNextFile();
nam1= finder.GetFileName();//获得文件名 nam2= \
nam2=nam2+nam1;//组成全路径
BOOL bCopy=CopyFile(nam1, nam2, FALSE);//文件拷贝 }
所有操作成功后,以信息框告知: MessageBox( NULL,“安装成功,请按OK钮继续”,“安装结果”,MB_OK); 整个程序以MFC静态链接库创建。上述所有内容可以写入一个源文件内,这里称其为Append.cpp。为使最终执行文件尽可能小,应删去程序框架中所有不需要的内容。为此,源文件中只保留Append.cpp,Append.rc,及StdAfx.cpp几项;而头文件中只有Append.h,Resource.h,及StdAfx.h几项。所定义的唯一派生类为class CappendApp:public CwinApp,置于Append.h之内。 三、结束语
在VC++环境下利用有关WINDOWS系统注册表操作函数获得AutoCAD系统的安装路径,从而找出并改写AutoCAD有关文件;创建子目录并拷入各种二次开发形成文件,由此实现了AutoCAD二次开发程序与AutoCAD系统的自动衔接与嵌入。文中程序已由实践验证,完全可用于AutoCAD二次开发程序的自动安装。
AutoCAD各大论坛技巧精华集
1.选择技巧:
在选择编辑中,有时不小心多选了某个图元,此时在命令未结束下并不需要取消命令而重来,只须在\选择目标\
的提示后输入remove回车,再在提示下逐一选择哪些多选的图元(当然别太多,否则难选啊!)即可搞定.
在选择时,随便输入两个字母,如mn,这时你会发现command命令行出现一大串提示,包括fence、wc、wf等 ,很方便的。
2.AutoCAD裁剪技巧
如图所示,要对右图部分圆(可以是其他边框)外的直线进行裁剪,普通办法就是选择裁剪边界后再选择要裁
剪的线段即可,实际上AutoCAD还有较为简捷的办法,其做法如下: 1.按常规执行裁剪命令,选择裁剪边界(回车确认); 2.在提示选择要裁剪的线段元素时输入“f”(即fence),回车确认;
3.在提示:First Fence point下绘制与要裁剪线段相交的连续橡皮筋直线,回车确认即可(见图示)。
尚需注意两点:1.橡皮筋直线无需闭合;2.橡皮筋直线与要裁剪线段重复相交时,则剪去以后一次的部 分(这点很重要哦)。
3.选择技巧
用户可以用鼠标一个一个地选择目标,选择的目标逐个地添加到选择集中,另外,AutoCAD还提供了Window
(以键入“w”响应Select object:或直接在屏幕上自右至左拉一个矩形框响应Select object:提示)
,Crossing(以键入“C”响应Select object:或直接在屏幕上自左至右拉一个矩形框响应Select object: 提示),Cpolygon(以键入“CP”响应Select object:),Wpolygon(以键入“WP”响应Select object:)
等多种窗口方式选择目标,其中Window及Crossing用于矩形窗口,而Wpolygon及Cpolygon用于多边形窗口,
在Window及Wpolygon方式下,只有当实体的所有部分都被包含在窗口时,实体才被选中,而在Crossing及 Cpolygon方式下,只要实体的一部分包括在窗口内,实体就被选择像。AutoCAD还提供了Fence方式
(以键入“F”响应Select object:)选择实体,画出一条不闭合的折线,所有和该折线相交的实体即
被选择。在选择目标时,有时会不小心选中不该选择的目标,这时用户可以键入R来响应“select objects:
”提示,然后把一些误选的目标从选择集中剔除,然后键入A,再向选择集中添加目标。当所选择实体和别
的实体紧挨在一起时可在按住CTRL键的同时,然后连续单击鼠标左键,这时紧挨在一起的实体依次高亮度显
示,直到所选实体高亮度显示,再按下enter键(或单击鼠标右键),即选择了该实体。还可以有条件选择
实体,即用'filter响应select objects:,在AutoCAD2000中,还提供了QuickSelect方式选择实体,功能
和filter类似,但操作更简单,方便。AutoCAD提供的选择集的构造方法功能很强,灵活恰当地使用可使制 图的效率大大提高。
4.选择技巧:
在选择编辑中,有时不小心多选了某个图元,此时在命令未结束下并不需要取消命令而重来,只须在\选择目标\
的提示后输入remove回车,再在提示下逐一选择哪些多选的图元(当然别太多,否则难选啊!)即可搞定.
5.如何在WORD表格中引用ACAD的形位公差??(如图红框区所示)
其实也简单,但就怕部分新手不敢一试!
1.将ACAD的背景设为白色,否则在WORD中不能处理背景色;
2.在ACAD中单独直接标注形位公差图框,尽量放大显示至整个绘图区; 3.使用ACAD的copyclip(拷贝至粘贴板)命令,选中形位公差图框;
4.切换至WORD的表格中,粘贴即可,但此时整个表格会被挤得很乱,此时可耐点性子,利用WORD自带的图片编辑
功能将形位公差图框多余的边剪去,并直接拖放形位公差图框图片至表格范围内的合适大小.为利于操作,可 将文档显示放大。
6.如何给ACAD工具条添加命令及相应图标
以cad2004为例
cad的工具条并没有显示所有可用命令,在需要时用户要自己添加。 例如绘图工具条中默认没有多线命令(mline),就要自己添加。 做法如下:
视图->工具栏->命令选项卡,选中绘图右侧窗口显示相应命令 这时找到“多线”,点左键把它脱出,若不放到任何已有工具条中,则它以单独工具条出现;否则成为已有 工具条一员。