CAD二次开发实验报告.docx
《CAD二次开发实验报告.docx》由会员分享,可在线阅读,更多相关《CAD二次开发实验报告.docx(92页珍藏版)》请在冰豆网上搜索。
CAD二次开发实验报告
实验一ObjectARX.NET托管开发包的使用
一、主要内容
1、下载安装ObjectARX.NET托管开发包
2、创建AutoCAD命令
3、创建自定义用户菜单
4、创建自定义用户工具条
5、创建用户自定义窗体
二、学时安排:
2学时
三、预习内容及要求
回顾ObjectARXAPI和其托管API之间的对应关系;掌握不同API版本对应的VS.NET开发版本;熟悉创建用户需求所要引用命名空间。
开发语言使用C#,AutoCAD版本2012,objectARX2012。
四、下载安装ObjectARX
4.1下载ObjectARX
不同的ACAD版本用不同的开发包及开发环境
⏹ACAD2000~ACAD2002:
VC++6.0
⏹ACAD2004~ACAD2006:
VS.NET2002
⏹ACAD2007~ACAD2009:
VS.NET2005
⏹ACAD2010~ACAD2011:
VS.NET2008
⏹ACAD2012~:
VS.NET2010
1).在打开打开默认网页浏览器并浏览
网站.
2).或从AutoCAD官网下载
4.2安装ObjectARX向导和托管项目模板
1).一旦ObjectARXSDK被安装,请使用默认目录c:
\ObjectARX浏览它的安装文件夹。
2).浏览安装文件夹后,打开Utils文件夹和ObjARXWiz文件夹。
3).在ObjARXWiz文件夹中,双击ArxWizards.msi文件。
4).在ObjectARXWizardsforAutoCAD2010对话框中,点击Next.
5).在EnterYourPreferredDefaultRDSSymbol框中,输入你的公司名字的缩写并点击Next按扭。
你输入的RDS文字被用于默认名字的前缀,这个名字是用ObjectARX向导与工程模板创建类或命令时使用的。
6).注意RDS代表RegisteredDeveloperSymbol,它用于创建命令和类的标识,以帮助避免与其它应用程序之间的潜在冲突。
7).在MemberVariableWizard页,选择同意"ReplaceMSMemberVariableWizardbyAutodeskMemberVariableWizard"并单击Next按扭.
8).在选择SelectInstallationFolder(安装文件夹)页,点击向导的Browse按扭指定一个新的安装位置或者同意默认位置。
点击Next按扭.
9).再次点击安装向导的Next按扭。
10).点击向导的Close按扭退出。
4.3HelloWorld程序创建
(1)在VS.Net2012建项目HelloWorld
1.实验采用.NET托管API
→从“项目类型”列表中选择第二个“VisualC#”,从模板中选择“控制台应用程序”,输入项目名称“HelloWorld”
→单击“确定”按钮。
添加引用,右击引用选择“添加引用”→点击“浏览”→从ObjectARX安装目录下加载AcCoreMgd.dll、AcCui.dll、Acmgd.dll和AcDbMgd.dll→点击“添加”→点击“确定”。
→使用解决方案资源管理器查看
→输入完整程序如下
usingSystem;
usingAutodesk.AutoCAD.Runtime;
usingAutodesk.AutoCAD.ApplicationServices;
usingAutodesk.AutoCAD.DatabaseServices;
usingAutodesk.AutoCAD.Geometry;
usingAutodesk.AutoCAD.EditorInput;
[assembly:
CommandClass(typeof(HelloWorld.Hello))]
namespaceHelloWorld
{
///
///SummarydescriptionforrdsCommands.
///
publicclassHello
{
publicHello()
{
//
//TODO:
Addconstructorlogichere
//
}
//DefineCommand"AsdkCmd1"
[CommandMethod("HW")]
staticpublicvoidHW()//Thismethodcanhaveanyname
{
//Putyourcommandcodehere
EditorpEd=Application.DocumentManager.MdiActiveDocument.Editor;
pEd.WriteMessage("HelloWorld");
}
}
}
→编译,并在AutoCAD加载DLL
→输入命令“HW”,查看运行结果
4.4创建上下文菜单
(1)加载命名空间
ØusingSystem;
ØusingAutodesk.AutoCAD.Runtime;
ØusingAutodesk.AutoCAD.Windows;
ØusingAutodesk.AutoCAD.EditorInput;
(2)输入完成程序如下
usingSystem;
usingAutodesk.AutoCAD.Windows;
usingAutodesk.AutoCAD.Runtime;
usingAutodesk.AutoCAD.EditorInput;
[assembly:
CommandClass(typeof(MyMenu.MyMenu))]
namespaceMyMenu
{
publicclassMyMenu:
IExtensionApplication
{
ContextMenuExtensionMyMenu;
//初始化菜单
publicvoidInitialize()
{
AddMenu();
}
//释放资源,移除菜单
publicvoidTerminate()
{
Remove();
}
//添加菜单
publicvoidAddMenu()
{
try
{
MyMenu=newContextMenuExtension();
MyMenu.Title="An_Menu";
Autodesk.AutoCAD.Windows.MenuItemmenuItem;
menuItem=newAutodesk.AutoCAD.Windows.MenuItem("Welcome");
menuItem.Click+=newEventHandler(CallbackOnClick);
MyMenu.MenuItems.Add(menuItem);
Autodesk.AutoCAD.ApplicationServices.Application.
AddDefaultContextMenuExtension(MyMenu);
}
catch(System.Exceptionex){}
}
//移除菜单
publicvoidRemove()
{
try
{
if(MyMenu!
=null)
{
Autodesk.AutoCAD.ApplicationServices.Application.
RemoveDefaultContextMenuExtension(MyMenu);
}
}
catch(System.Exceptionex){}
}
publicvoidCallbackOnClick(objectsender,EventArgse){}
}
}
(3)编译,并在AutoCAD利用NETLOAD加载dll。
4.5创建弹出式下拉菜单
(1)输入完整程序如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.IO;
usingAutodesk.AutoCAD.Customization;
usingAutodesk.AutoCAD.ApplicationServices;
usingAutodesk.AutoCAD.Runtime;
namespaceTurndownMenu
{
publicclassTurndownMenu
{
CustomizationSection[]partials;
CustomizationSectioncs;
CustomizationSectionentCs;
intnumPartialFiles;
boolentCsLoaded;
[CommandMethod("Ad_Cui")]
publicvoidAd_Cui_Load()
{
this.init_Cui();
this.add_Menu();
this.save_Cui();
}
privatevoidinit_Cui()
{
stringmainCuiFile=(string)Application.GetSystemVariable("MENUNAME");
mainCuiFile+=".cuix";
cs=newCustomizationSection(mainCuiFile);
stringentCuiFile=(string)Application.
GetSystemVariable("ENTERPRISEMENU");
if(entCuiFile.Equals("."))
entCsLoaded=false;
else
{entCs=newCustomizationSection(entCuiFile);
entCsLoaded=true;
}
partials=newCustomizationSection[cs.PartialCuiFiles.Count];
inti=0;
foreach(stringfileNameincs.PartialCuiFiles)
{
if(File.Exists(fileName))
{
partials[i]=newCustomizationSection(fileName);
i++;
}
}
numPartialFiles=i;
}
privatevoidadd_Menu()
{
if(cs.MenuGroup.PopMenus.IsNameFree("测试菜单"))
{
MacroGroupmg=newMacroGroup(cs.MenuGroupName,cs.MenuGroup);
MenuMacrom1=newMenuMacro(mg,"wdgl_cmd1","^C^CAd_FindCAD","ID_AD_FindCAD");
MenuMacrom2=newMenuMacro(mg,"wdgl_cmd2","^C^CAd_FileInfo","ID_Ad_FileInfo");
MenuMacrom3=newMenuMacro(mg,"wdgl_cmd3","^C^CAd_Help","ID_Ad_Help");
System.Collections.Specialized.StringCollectionpmAliases=new
System.Collections.Specialized.StringCollection();
pmAliases.Add("POP12");
PopMenupm=newPopMenu("测试菜单",pmAliases,"测试菜单",cs.MenuGroup);
PopMenuItempmi=newPopMenuItem(m1,"测试菜单",pm,-1);
pmi=newPopMenuItem(m2,"测试菜单",pm,-1);
pmi=newPopMenuItem(pm,-1);
pmi=newPopMenuItem(m3,"菜单项",pm,-1);
addMenu2Workspaces(pm);
foreach(Workspacewkincs.Workspaces)
{
WorkspacePopMenuwkpm=newWorkspacePopMenu(wk,pm);
wkpm.Display=1;
}
}
else{}
}
privatevoidaddMenu2Workspaces(PopMenupm)
{}
privatevoidsave_Cui()
{
if(cs.IsModified)
cs.Save();
for(inti=0;i{
if(partials[i].IsModified)
partials[i].Save();
}
if(entCsLoaded&&entCs.IsModified)
entCs.Save();
stringflName=cs.CUIFileBaseName;
Application.SetSystemVariable("FILEDIA",0);
Application.DocumentManager.MdiActiveDocument.SendStringToExecute(
"cuiunload"+flName+"",false,false,false);
Application.DocumentManager.MdiActiveDocument.SendStringToExecute(
"cuiload"+flName+"filedia1",false,false,false);
}
}
}
(2)编译,并在AutoCAD利用NETLOAD加载dll。
4.6创建工具条
(1)输入完整程序如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingAutodesk.AutoCAD.DatabaseServices;
usingAutodesk.AutoCAD.Customization;
usingAutodesk.AutoCAD.EditorInput;
usingAutodesk.AutoCAD.ApplicationServices;
usingAutodesk.AutoCAD.Runtime;
usingSystem.IO;
usingSystem.Data;
[assembly:
CommandClass(typeof(AddToolbar.ToolBar))]
namespaceAddToolbar
{
publicclassToolBar
{
Databasem_db=HostApplicationServices.WorkingDatabase;
CustomizationSectionpMainCS=null;
CustomizationSection[]partials;
publicintBlockCount=0;
publicstringfname=null;
EditorpEd=Application.DocumentManager.MdiActiveDocument.Editor;
stringmainCuiFile;
publicToolBar()
{
mainCuiFile=(string)Application.GetSystemVariable("MENUNAME");
mainCuiFile+=".cuix";
pMainCS=newCustomizationSection(mainCuiFile);
partials=newCustomizationSection[pMainCS.PartialCuiFiles.Count];
foreach(stringfileNameinpMainCS.PartialCuiFiles)
{
if(File.Exists(fileName))
{}
}
}
#region
[CommandMethod("LoadRoad")]
publicvoidaddToolbar()
{
ToolbarnewTb=newToolbar("公路边桩绘制工具",pMainCS.MenuGroup);
newTb.ToolbarOrient=ToolbarOrient.floating;
newTb.ToolbarVisible=ToolbarVisible.show;
newTb.Description="公路边桩绘制工具";
MacroGroupoMacroGroup=newMacroGroup("myMenuGroup0",pMainCS.MenuGroup);
MenuMacrooMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro01",
"SetFirst","MenuMacro01",MacroType.Any);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\beginset.BMP";
oMenuMacro1.macro.LargeImage=@"C:
\RoadSet\beginset.BMP";
ToolbarButtontbBtn=newToolbarButton(newTb,-1);
tbBtn=newToolbarButton(newTb,-1);
tbBtn.Name="起始里程设置";
tbBtn.MacroID=oMenuMacro1.ElementID;
oMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro02",
"SetAnyPointLC","MenuMacro02",MacroType.Any);
tbBtn=newToolbarButton(newTb,-1);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\Anyset.BMP";
oMenuMacro1.macro.LargeImage=@"C:
\RoadSet\Anyset.BMP";
tbBtn.Name="任意点设置边桩";
tbBtn.MacroID=oMenuMacro1.ElementID;
oMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro03",
"SetKnowedPointLC","MenuMacro03",MacroType.Any);
tbBtn=newToolbarButton(newTb,-1);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\Knowset.BMP";
oMenuMacro1.macro.LargeImage=@"C:
\RoadSet\Knowset.BMP";
tbBtn.Name="已知里程设置边桩";
tbBtn.MacroID=oMenuMacro1.ElementID;//ModifyBZ
oMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro04",
"ModifyBZ","MenuMacro04",MacroType.Any);
tbBtn=newToolbarButton(newTb,-1);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\Modify.BMP";
oMenuMacro1.macro.LargeImage=@"C:
\RoadSet\Modify.BMP";
tbBtn.Name="修改边桩";
tbBtn.MacroID=oMenuMacro1.ElementID;
oMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro05",
"queryMidPL","MenuMacro05",MacroType.Any);
tbBtn=newToolbarButton(newTb,-1);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\MidQuery.BMP";
oMenuMacro1.macro.LargeImage=@"C:
\RoadSet\MidQuery.BMP";
tbBtn.Name="属性查看";//OutputBZ
tbBtn.MacroID=oMenuMacro1.ElementID;//DelMidPl
oMenuMacro1=newMenuMacro(oMacroGroup,"MenuMacro06",
"DelMidPl","MenuMacro06",MacroType.Any);
tbBtn=newToolbarButton(newTb,-1);
oMenuMacro1.macro.SmallImage=@"C:
\RoadSet\DelMidPl.