几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-20, 06:19 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 使用.net来创建一个局部cui文件并在autocad中装载它

使用.net来创建一个局部cui文件并在autocad中装载它
www.dimcax.com
使用.net来创建一个局部cui文件并在autocad中装载它
欢迎转载,但请注明出处,谢谢!
原文:
翻译:才鸟()
这一次我将使用不同的方法(在kean的另一篇文章里他使用了com的方法来加载菜单):利用autodesk.autocad.customization里的功能,通过编程来创建一个局部cui文件,把它保存到磁盘,并确保它在每一次autocad进程启动时被装载。我不准备把重点放在如何添加菜单等到autocad的列表——这留到下面的帖子——这篇帖子主要关心的是确保一个cui文件被创建和装载所需要的逻辑。下面是c#代码。俗话说得好,条条大路通罗马,但下面的代码可以确保我们的局部菜单被创建和加载。顺便说一句,为了使代码可以被编译,你必须把accui.dll作为一个引用项添加到你的项目中。
using autodesk.autocad.applicationservices;
using autodesk.autocad.databaseservices;
using autodesk.autocad.editorinput;
using autodesk.autocad.runtime;
using autodesk.autocad.geometry;
using autodesk.autocad.customization;
using system;
using system.collections.specialized;
namespace partialcui
{
public class commands : iextensionapplication
{
public void initialize()
{
buildmenucui();
}
public void terminate()
{
}
[commandmethod("bm")]
public void buildmenucui()
{
const string mycuifile = "c:\\kean.cui";
const string mycuifiletosend = "c:/kean.cui";
const string mycuisecti;
editor ed = application.documentmanager.mdiactivedocument.editor;
string maincui =
application.getsystemvariable("menuname") + ".cui";
customizationsection cs =
new customizationsection(maincui);
partialcuifilecollection pcfc = cs.partialcuifiles;
if (pcfc.contains(mycuifile))
{
ed.writemessage(
"\ncustomization file \""
+ mycuifile
+ "\" already loaded."
);
}
else{
if (system.io.file.exists(mycuifile))
{
ed.writemessage(
"\ncustomization file \""
+ mycuifile
+ "\" exists - loading it."
);
loadmycui(mycuifiletosend);
}
else
{
ed.writemessage(
"\ncustomization file \""
+ mycuifile
+ "\" does not exist - building it."
);
// 为我们的局部菜单创建一个自定义区域(customization section)
customizationsection pcs = new customizationsection();
pcs.menugroupname = mycuisectionname;
// 添加一个带两个命令的菜单组
macrogroup mg =
new macrogroup(mycuisectionname, pcs.menugroup);
menumacro mm1 =
new menumacro(mg, "cmd 1", "^c^ccmd1", "id_mycmd1");
menumacro mm2 =
new menumacro(mg, "cmd 2", "^c^ccmd2", "id_mycmd2");
// 现在添加一个带两个项的下拉菜单
stringcollection sc = new stringcollection();
sc.add("pop15");
popmenu pm =
new popmenu(
mycuisectionname,
sc,
"id_mypop1",
pcs.menugroup
);
popmenuitem pmi1 =
new popmenuitem(mm1, "pop cmd 1", pm, -1);
popmenuitem pmi2 =
new popmenuitem(mm2, "pop cmd 2", pm, -1);
// 最后保存文件并重新载入它
pcs.saveas(mycuifile);
loadmycui(mycuifiletosend);
}
}
}
private void loadmycui(string cuifile)
{
// 这个载入的技术是向命令行发送一个lisp字符串
// (这可以避免设置filedia为0)
// 设置cmdecho为0后,尽量不显示回显信息。
// 我们要确保在最后重置lisp字符串的值
// (由于字符串的执行是非同步的,所以我们没有机会在调用的函数中来实现)。
document doc =
application.documentmanager.mdiactivedocument;
object oldcmdecho = application.getsystemvariable("cmdecho");
application.setsystemvariable("cmdecho", 0);
doc.sendstringtoexecute(
"(command \"_.cuiload\" \""
+ cuifile
+ "\")(setvar \"cmdecho\" "
+ oldcmdecho
+ ")(princ) "
, false, false, false
);
}
}
}
下面是当我们第一次装载我们的模块时,发生的情况: command: netload customization file "c:\kean.cui" does not exist - building it. command: customization file loaded successfully. customization group: kean command: 下面是当我们再次手动运行命令"bm"(它会调用与上面相同的代码)时,发生的情况: command: bm customization file "c:\kean.cui" already loaded. command: 当局部菜单被创建和装载时,它应当在autocad启动时被自动装载——运行cuiload命令时可以看到:
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 05:27 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多