文档库

最新最全的文档下载
当前位置:文档库 > CAD二次开发实验1

CAD二次开发实验1

实验一 ObjectARX .NET托管开发包的使用

一、主要内容

1、下载安装ObjectARX .NET托管开发包

2、创建AutoCAD命令

3、创建自定义用户菜单

4、创建自定义用户工具条

5、创建用户自定义窗体

二、学时安排

三、预习内容及要求

回顾ObjectARX API和其托管API之间的对应关系;掌握不同API版本对应的http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html开发版本;熟悉创建用户需求所要引用命名空间。

开发语言使用C#,AutoCAD版本2010,objectARX2010。

四、下载安装ObjectARX

4.1下载ObjectARX

不同的ACAD版本用不同的开发包及开发环境

ACAD2000~ACAD2002 : VC++ 6.0

ACAD2004~ACAD2006 : http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html 2002

ACAD2007~ACAD2009 : http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html 2005

ACAD2010~ACAD2011 : http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html 2008

ACAD2012~ : http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html 2010

下载ObjectARX

在打开打开默认网页浏览器并浏览http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html网站.

的网页上,点击License & Download(许可&下载).

填写必填字段并选择ObjectARX for AutoCAD 2010. 点击Submit(提交)按扭.

在下载页, 点击Download Now(现在下载)使用下载管理器或点击Standard Download Method(标准下载方法)使用你的网页浏览器的默认下载方法下载.

点击Save(保存)或用于保存文件到你的本地驱动器的选项。

指定下载ObjectARX SDK安装包文件存放的位置。

一旦安装包文件下载完成,就浏览你保存在本地的安装并双击它,安装向导将显示

在ObjectARX <释放>对话框中, 指定一个新的安装位置或接受默认的安装位置。点击

Install(安装)按扭. 如果没有遇到问题,安装向导完成后关闭它

安装ObjectARX向导和托管项目模板

一旦ObjectARX SDK被安装,请使用默认目录c:\ObjectARX 浏览它的安装文件夹。浏览安装文件夹后,打开Utils 文件夹和ObjARXWiz文件夹。

在ObjARXWiz 文件夹中, 双击ArxWizards.msi文件。

在ObjectARX Wizards for AutoCAD 2010 对话框中, 点击Next.

在Enter Your Preferred Default RDS Symbol框中,输入你的公司名字的缩写并点击Next按扭。你输入的RDS文字被用于默认名字的前缀,这个名字是用ObjectARX向导与工程模板创建类或命令时使用的。

注意RDS代表Registered Developer Symbol, 它用于创建命令和类的标识,以帮助避免与其它应用程序之间的潜在冲突。

在Member Variable Wizard页,选择同意"Replace MS Member Variable Wizard by Autodesk Member Variable Wizard"并单击Next按扭.

在选择Select Installation Folder(安装文件夹)页,点击向导的Browse按扭指定一个新的安装位置或者同意默认位置。点击Next按扭.

再次点击安装向导的Next 按扭。

点击向导的Close按扭退出。

4.2 Hello World程序创建

1)在http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html 2010中建项目HelloWorld

①如果使用托管ObjectARX API,则使用C#语言作为开发语言,操作如下:

→选择Visual C#下的ObjectARX

→选择项目类型

②本实验采用.NET托管API

从“项目类型”列表中选择第二个“Visual C#”,从模板中选择“AutoCAD Managed Project”,输入项目名称“HelloWorld”

.Net扩展选项,单击“完成”按钮

如果弹出如下对话框说明没安装正确,可以手动加载托管DLL

从ObjectARX安装目录下加载acmgd.dll和acdbmgd.dll

使用.NET对象浏览器查看

acmgd.dll--AutoCAD .NET托管类

acdbmgd.dll– ObjectDBX .NET托管类

完整程序如下

using System;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.EditorInput;

[assembly: CommandClass(typeof(HelloWorld.Hello))]

namespace HelloWorld

{

///

/// Summary description for rdsCommands.

///

public class Hello

{

public Hello()

{

}

[CommandMethod("HW")]

static public void HW()

{

Editor pEd = Application.DocumentManager.MdiActiveDocument.Editor;

pEd.WriteMessage("CAD欢迎你!");

}

}

}

编译,并在AutoCAD加载DLL

输入命令“HW”,查看运行结果

CAD二次开发实验1

CAD二次开发实验1

4.3、创建上下文菜单

using System;

using Autodesk.AutoCAD.Windows;

using Autodesk.AutoCAD.Runtime;

[assembly: CommandClass(typeof(Contextmenu.Contextmenu))]

namespace Contextmenu

{

public class Contextmenu : IExtensionApplication

{

ContextMenuExtension contextMenu;

HelloForm hfrm;

//初始化菜单

public void Initialize()

{ AddMenu();

}

//释放资源,移除菜单

public void Terminate()

{ Remove();

}

//添加菜单

public void AddMenu()

{

try

{ contextMenu = new ContextMenuExtension();

contextMenu.Title = "Ting_Menu";

Autodesk.AutoCAD.Windows.MenuItem menuItem;

menuItem = new Autodesk.AutoCAD.Windows.MenuItem("welcome");

menuItem.Click += new EventHandler(CallbackOnClick);

contextMenu.MenuItems.Add(menuItem);

Autodesk.AutoCAD.ApplicationServices.Application.AddDefaultContextMenuExtension(contextMenu) ;

}

catch (System.Exception ex)

{hfrm = new HelloForm(ex.ToString(), "异常");

}

}

//移除菜单

public void Remove()

{ try{

if (contextMenu != null)

{

Autodesk.AutoCAD.ApplicationServices.Application.RemoveDefaultContextMenuExtension(contextMe nu);

}

}

catch (System.Exception ex)

{

hfrm = new HelloForm(ex.ToString(), "异常");

}

}

public void CallbackOnClick(object sender, EventArgs e)

{

hfrm = new HelloForm("欢迎进入我的CAD二次开发");

hfrm.Show();

}

}

}

CAD二次开发实验1

CAD二次开发实验1

4.4、创建弹出式下拉菜单

1)在vs2010中,选择模板C#,创建类库命名为TurndownMenu。

2)从ObjectARX安装目录下加载acmgd.dll、accui和acdbmgd.dll

3)主要代码

CustomizationSection cs;

CustomizationSection entCs;

CustomizationSection[] partials;

int numPartialFiles;

bool entCsLoaded;

[CommandMethod("Ad_Cui")]

public void AD_CUI_Load()

{ this.init_cui();

this.add_menu();

this.save_cui();

}

private void init_cui()

{

string mainCuiFile = (string)Application.GetSystemVariable("MENUNAME");

mainCuiFile += ".cuix";

cs = new CustomizationSection(mainCuiFile);

string entCuiFile = (string)Application.GetSystemVariable("ENTERPRISEMENU");

if (entCuiFile.Equals("."))

entCsLoaded = false;

else

{ entCs = new CustomizationSection(entCuiFile);

entCsLoaded = true;

}

partials = new CustomizationSection[cs.PartialCuiFiles.Count];

int i = 0;

foreach (string fileName in cs.PartialCuiFiles)

{

if (File.Exists(fileName))

{

partials[i] = new CustomizationSection(fileName);

i++;

}

}

numPartialFiles = i;

}//添加菜单

private void add_menu()

{

if (cs.MenuGroup.PopMenus.IsNameFree("测试菜单"))

{

MacroGroup mg = new MacroGroup(cs.MenuGroupName, cs.MenuGroup);

MenuMacro m1 = new MenuMacro(mg, "wdgl_cmd1", "^C^CAd_FindCAD", "ID_AD_FindCAD");

MenuMacro m2 = new MenuMacro(mg, "wdgl_cmd2", "^C^CAd_FileInfo", "ID_Ad_FileInfo");

MenuMacro m3 = new MenuMacro(mg, "wdgl_cmd3", "^C^CAd_Help", "ID_Ad_Help");

System.Collections.Specialized.StringCollection pmAliases = new System.Collections.Specialized.StringCollection();

pmAliases.Add("POP12");

PopMenu pm = new PopMenu("测试菜单", pmAliases, "测试菜单", cs.MenuGroup);

PopMenuItem pmi = new PopMenuItem(m1, "测试菜单", pm, -1);

pmi = new PopMenuItem(m2, "测试菜单", pm, -1);

pmi = new PopMenuItem(pm, -1);

pmi = new PopMenuItem(m3, "菜单项", pm, -1);

addMenu2Workspaces(pm);

foreach (Workspace wk in cs.Workspaces)

{

WorkspacePopMenu wkpm = new WorkspacePopMenu(wk, pm);

wkpm.Display = 1;

}

}

else

{ }

}

private void addMenu2Workspaces(PopMenu pm)

{}

private void save_cui()

{

if (cs.IsModified)

cs.Save();

for (int i = 0; i < numPartialFiles; i++)

{

if (partials[i].IsModified)

partials[i].Save();

}

if (entCsLoaded && entCs.IsModified)

entCs.Save();

string flName = cs.CUIFileBaseName;

Application.SetSystemVariable("FILEDIA", 0);

Application.DocumentManager.MdiActiveDocument.SendStringToExecute("cuiunload "+ flName + " ", false, false, false);

Application.DocumentManager.MdiActiveDocument.SendStringToExecute("cuiload "+ flName + " filedia 1 ", false, false, false);

}

4)编译,并在AutoCAD加载DLL,输入命令“ad_cui”,查看运行结果

CAD二次开发实验1

4.5、创建工具条

1)在vs2010中,选择模板C#,创建类库命名为AddToolbar。

2)从ObjectARX安装目录下加载acmgd.dll、AcCui.dll和acdbmgd.dll

3)完整程序如下

public void addToolbar()

{

Toolbar newTb = new Toolbar(" New Toolbar ", cs.MenuGroup);

foreach (Workspace wk in cs.Workspaces)

{

WorkspaceToolbar wkTb = new WorkspaceToolbar(wk, newTb);

wk.WorkspaceToolbars.Add(wkTb);

wkTb.Display = 1;

}

Editor pEd = Application.DocumentManager.MdiActiveDocument.Editor;

pEd.WriteMessage("Hello World");

}

[LispFunction("adtoolbar")]

public void addToolbar(ResultBuffer args)

{

addToolbar();

}

public void remToolbar()

{

Toolbar tbr = cs.MenuGroup.Toolbars.FindToolbarWithName(" New Toolbar ");

if (tbr != null)

{

foreach (Workspace wk in cs.Workspaces)

{

WorkspaceToolbar wkTb = wk.WorkspaceToolbars.FindWorkspaceToolbar(tbr.ElementID, http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.html);

if (wkTb != null)

wk.WorkspaceToolbars.Remove(wkTb);

}

cs.MenuGroup.Toolbars.Remove(tbr); }

}

4)编译,并在AutoCAD加载DLL,输入命令“addtoolbar”,查看运行结果

CAD二次开发实验1

CAD二次开发实验1

4.6、创建有模态和无模态对话框

1)在vs2010中,选择模板C#,创建类库命名为pallelate。

2)从ObjectARX安装目录下加载acmgd.dll和acdbmgd.dll

3)完整程序如下

[CommandMethod("Palette")]

public void addPalette()

{

Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Edit or;

PaletteSet ps = new PaletteSet("test pallette set");

ps.MinimumSize = new System.Drawing.Size(300, 300);

http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.htmlerControl myctrl = new http://www.wendangku.net/doc/5398c298ff00bed5b9f31dc0.htmlerControl ();

ps.Add("test", myctrl);

ps.Visible = true;

ps.Style = PaletteSetStyles.ShowTabForSingle;

ps.Opacity = 90;

}

CAD二次开发实验1

CAD二次开发实验1

CAD二次开发实验1

CAD二次开发实验1

CAD二次开发实验1

4)编译,并在AutoCAD加载DLL

4.7、修改状态栏

1)在vs2010中,选择模板C#,创建类库命名为addbutton。

2)从ObjectARX安装目录下加载acmgd.dll和acdbmgd.dll

3)完整程序如下

[CommandMethod("addbutton")]

public void AddButton()

{

Pane pane = new Pane();

pane.Enabled = true;

pane.Text = "添加按钮实例";

pane.ToolTipText = "添加按钮实例ToolTipText";

pane.Visible = true;

pane.Style = PaneStyles.Normal;

Application.StatusBar.Panes.Add(pane);

}

4)编译,并在AutoCAD加载DLL

CAD二次开发实验1

CAD二次开发实验1

4.8创建进度条

1)在vs2010中,选择模板C#,创建类库命名为progressbar。

2)从ObjectARX安装目录下加载acmgd.dll和acdbmgd.dll

3)完整程序如下

[CommandMethod("pbm")]

public void ProgressBarManaged()

{

ProgressMeter pm = new ProgressMeter();

pm.Start("正在数据入库请稍后¨¨");

pm.SetLimit(1000);

// Now our lengthy operation

for (int i = 0; i <= 1000; i++)

{

System.Threading.Thread.Sleep(5);

// Increment Progress Meter...

pm.MeterProgress();

//

}

pm.Stop();

}

4)编译,并在AutoCAD加载DLL,输入命令“pbm”,查看运行结果

CAD二次开发实验1

CAD二次开发实验1