1 VC2008语言:一个简单的浏览dwg程序 3 (控件名称 看楼主头像)
2 HTML语言:网页中显示dwg控件 8
3 VB语言:使用控件简单例程说明: 10
4 Delphi语言:下使用控件 16
5 C++Bulider语言:下使用控件 22
6 C#语言: 下使用控件 24
7 VC6语言: 下使用控件 27
8 ARX编程接口: 简单使用 29
8.1 把dwg文件中的图元信息读到文本文件代码 29
8.2 绘一个简单表格的例程代码 32
8.3 插入图块的代码 33
8.4 读写扩展数据 36
1 VC2010语言:一个简单的浏览dwg程序
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 安装VC2010
安装VC2010服务包 我们将使用控件的DLL版本
2. 设置VC的INC,和LIB路径中包含控件的INC,LIB路径 1) 运行VC2010
2) 打开工程,点工程属性窗口
3) 在属性窗口中,设置INC,LIB目录
效果如下图:
4) 点击”确定”按钮退出设置对话框
3. 新建对话框工程View
4. 在应用程类型选择对话框类型,字符串语言要选择“使用Unicode库”,因为近控件的字符串集是使用Unicode编码。
再点完成按钮建立工程完成。
5. 在stdafx.h头文件中加入包含控件头文件代码
6. 在CViewApp::InitInstance函数中加入对初化控件函数的调用
7. 在CViewApp::InitInstance函数中最后,加入释放控件函数的调用。
8. 给CViewDlg类增加控件窗口句柄的成员变量
9. 在CViewDlg::OnInitDialog增加创建控件窗口的代码
10. 编辑对话框资源,增加一个按钮,按钮名为”打开dwg文件”
11. 在资对话框上双击按钮,为按钮增加单击函数, OnBnClickedOpendwgfile
Button,在单击函数中增加打开dwg图纸的代码
12. 拷贝文件 把编译后生成的exe,发行版本拷贝到bin\vc100,调试版本拷贝到bin\vc100d
13. 运行程序 运行程序,并打一张dwg图的效果如图:
14. 参考例程 控件安装目录下的sample目录:
Edit,MxDrawCADTools,MxDrawOcx,ExApp,CustomEntity, MxExpressTools
2 HTML语言:网页中显示dwg控件
在网页中显示DWG文件,需要使用的控件ActiveX版。
在网页中显示dwg控件步骤如下
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 用记事本,新建一个htm文件,并在文件编写使用控件代码 代码内容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>MxDraw控件</title>
</head>
<body topmargin="0" leftmargin="0">
<p align="center">
<object classid="clsid: 74A777F8-7A8F-4e7c-AF47-7074828086E2" id="MxDrawXCtrl" width=100% height=100%>
<param name="_Version" value="65536">
<param name="_ExtentX" value="24262">
<param name="_ExtentY" value="16219">
<param name="_StockProps" value="0">
<param name="DwgFilePath" value="">
<param name="IsRuningAtIE" value="1">
<param name="EnablePrintCmd" value="0">
</object>
</p>
说明:
74A777F8-7A8F-4e7c-AF47-7074828086E2是控件的GUID。
3. 用IE打开htm文件,并单击按钮 打开一张dwg。 效果如下:
4. 在网页中,可以JavaScript语言判断系统有没有安装控件 function DetectActiveX()
{
try
{
var comActiveX
= new ActiveXObject(“MXDRAWX.MxDrawXCtrl.1”);
}
catch(e)
{
return false;
}
return true;
}
5. 网页使用控件时,控件的发布方法 详细参考后面的“网页中使用控件”章节。
6. 参考例程 控件安装目录下的sample目录:
AspNet,ie
3 VB语言:使用控件简单例程说明:
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 新建一个VB工程
3. 引用控件组件 A、 在工具箱窗口上右键弹出菜单上,运行“选择项”命令
B、 在组件窗口中选择MxDrawX控件,点确定就导入控件
C、 点击“视图”=》“对象浏览器”命令,通过VB的对象浏览可以看到控件的所有接口定义:如下
接口浏览抓图:
4. 增加控件到对话框上 把这个放到对话框下:
放上去后如图:
5. 增加交互绘直线功能 A. 在对话框上增加一个“绘直线按钮”
B. 在绘直线按钮点击命令中,执行一个控件命令:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
AxMxDrawX1.DoCommand(1)
End Sub
DoCommand函数功能是,执行控件命令,因为控件很多函数,特是与用户交互的函数都必须在控件命令中执行,所以这里调用DoCommand执行控件命令。
这里传的参数“1”是命令的ID号,这个ID号可以随便取值,有多个命令时,ID值不一样就行。
C. 增加控件命令执行事件处理函数:
D. 在命令执行函数中增加交互绘直线代码:
Private Sub AxMxDrawX1_ImplementCommandEvent(ByVal sender As System.Object, ByVal e As AxMxDrawXLib._DMxDrawXEvents_ImplementCommandEventEvent) Handles AxMxDrawX1.ImplementCommandEvent
Dim app As MxDrawXLib.MxDrawApplication
app = New MxDrawXLib.MxDrawApplication
'绘制直线命令代码
If e.iCommandId = 1 Then
Dim curSpace2 As MxDrawXLib.MxDrawBlockTableRecord
curSpace2 = app.WorkingDatabase.CurrentSpace
Dim mxUtility As MxDrawXLib.MxDrawUtility
mxUtility = New MxDrawXLib.MxDrawUtility
Dim getPt1 As MxDrawXLib.MxDrawPoint
getPt1 = mxUtility.GetPoint(, Chr(13) + Chr(10) + "点取第一点:")
If (getPt1 Is Nothing) Then
MsgBox("用户取消..")
' 释放非托管对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(curSpace2)
curSpace2 = Nothing
Exit Sub
End If
Dim getPt2 As MxDrawXLib.MxDrawPoint
getPt2 = mxUtility.GetPoint(getPt1, Chr(13) + Chr(10) + "点取第二点:")
If (getPt2 Is Nothing) Then
MsgBox("用户取消..")
' 释放非托管对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(curSpace2)
curSpace2 = Nothing
Exit Sub
End If
Dim newLine As MxDrawXLib.MxDrawLine
newLine = curSpace2.AddLine(getPt1.x, getPt1.y,getPt2.x, getPt2.y)
newLine.colorIndex = MxDrawXLib.MCAD_COLOR.mcRed
' 释放非托管对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(curSpace2)
curSpace2 = Nothing
System.Runtime.InteropServices.Marshal.ReleaseComObject(newLine)
newLine = Nothing
End If
End Sub
6. 运行效果如图
4 Delphi语言:下使用控件
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 运行Delphi,导入控件的类型库 A. 运如图菜单命令,出来导出类型库对话框:
类型库导入对话框:
B. 点击 CreateUnit 按钮,对导入的控件接口创建代码定义:
C. 点击”Install…” 按钮把控件组件安装到Delphi中。
D. 安装完组件后,可以在控件面板,看到控件组件:
3. 新建一个Delphi 工程,把控件放到对话框中 新建一个Delphi工程
在对话框中,放入控件:
4. 增加一个按钮,读取图中属性块的属性 在对话框编辑器中增加一个按钮:
双击按钮,跳到按钮点击事件处理函数中,并增加代码:
procedure TForm1.Button1Click(Sender: TObject);
var
modleSpace : IMxDrawBlockTableRecord ;
newIterator : IMxDrawBlockTableRecordIterator ;
pEnt : IMxDrawEntity;
pBlkRef : IMxDrawBlockReference;
pAttribute : IMxDrawAttribute;
tag : WideString;
text : WideString;
ii : Integer;
begin
// 得到当前图形空间对象
modleSpace := MxDrawApplication1.WorkingDatabase.CurrentSpace ;
// 生成一个图纸空间对象浏览器
newIterator := modleSpace.NewIterator ;
// 遍历浏览器,得到每个实体
if newIterator <> nil then
begin
while newIterator.Done() = False do
begin
// 到实体对象
pEnt := newIterator.GetEntity();
newIterator.Step(True,False);
if pEnt <> nil then
begin
// 把实体对象转成块引用对象
pEnt.QueryInterface(IMxDrawBlockReference, pBlkRef);
if pBlkRef <> nil then
begin
// 得到块对象名称
if pBlkRef.GetBlockName() = 'BLKNAME' then
begin
// 遍历块引用对象的属性
for ii := 0 to pBlkRef.AttributeCount -1 do
begin
// 得到属性对象
pAttribute := pBlkRef.AttributeItem(ii);
// 得到属性对象的文字,和tag.
tag := pAttribute.Get_Tag();
text := pAttribute.Get_TextString();
showmessage(tag + ':' + text);
end;
end;
end;
end;
end;
end;
if text = '' then
begin
showmessage('没有发现块名为' + ' BLKNAME ' + '的块实体');
end;
end;
5. 编译运行程序效果
6. 参考例程 控件安装目录下的sample目录:
Delphi7Smaple,Delphi7Smaple2
5 C++Bulider语言:下使用控件
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 运行C++Bulider,导入控件的类型库 A. 运行如下图的菜单命令,出来导入类型库窗口
B. 类型导入窗口
C. 安装完组件后,可以在控件面板,看到控件组件:
3. 新建一个C++Bulider 工程,把控件放到对话框中 在对话框中,放入控件:
4. 参考例程 控件安装目录下的sample目录:
C++Bulider6
6 C#语言: 下使用控件
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 运行VS2008.net,新建一个工程 A. 在工具窗口键弹出菜单,点击选择项命令,如下图:
B. 弹出“选择工具箱项”窗口,选择“COM组件”Tab选项
C. 点击确定按钮,把控件放到工具箱中,如下图:
3. 把控件放到对话框中 如图:
4. 参考例程 控件安装目录下的sample目录:
CSharp,CSharpMidDoc,例程效果如下图:
7 VC6语言: 下使用控件
实现步骤:
步骤序号 操作内容 实现代码或结果抓图
1. 注册控件,运行控件安装目录下的bin\vc100\RegistMxDrawX.exe向系统注册控件 操作情况抓图:
2. 运行VC6,新建工程,并导入控件 点击如下图“菜单命令”,出现插入组件窗口
导入控件后的工具条:
3. 在stdafx.h文件中导入控件的类型库 代码如下:
#import "..\..\..\..\..\Bin\vc100d\MxDrawX.ocx" rename("GetObject", "MxGetObject") rename("DrawText", "MxDrawText") rename("GetClassName", "MxGetClassName") rename("SetProp", "MxSetProp") rename("GetProp", "MxGetProp") rename("GetTempPath", "MxGetTempPath")
4. 在对话框资源中插入控件 如下图,编译程序后运行:
8 ARX编程接口: 简单使用
控件目前提供常用的ARX编程接口,下面演示一些ARX编程接口的使用。
8.1 把dwg文件中的图元信息读到文本文件代码
在前面那个显示dwg文件的例子基础上,遍历McDbDatabse数据库中的模型空间实体,并把实体信息写到文本文件中。
代码说明如下:
功能说明 代码实现
取到当前活动控件的McDbdtabse数据库对象
打开数据库中的模型空间块表记录
创建块表记录遍历使用的迭代器
遍历迭代器,输出图元信息
释放迭代器的内存
WirteEntityInfoToFile函数说明: 写直线信息:
写圆弧信息
写圆信息
写LWPL线信息
8.2 绘一个简单表格的例程代码
绘表过程,就是往McDbDatabase数据库添实体的过程,详细代码可参考控件安装目录下的samples\Edit目录代码,例程运行效如图:
绘表算法这里不再讲解,大家可去看例程代码实现,这里只讲些关于ARX操作的关键代码。
关键代码说明:
功能说明 代码实现
把图元对象添加数据库的模型空间中
往数据库中画一条直线的代码
居中方式绘制一个文字
8.3 插入图块的代码
插入图块代码可参考控件安装目录下的samples\Edit目录代码,例程运行效如图:
关键代码说明:
功能说明 代码实现
得到插入图块的ID。
构建一个拖放Jig对象,动态的确定块的插入点,拖放成功后,并插入图块。
拖放类CInsertBlockJig的定义
拖放类CInsertBlockJig的实现
8.4 读写扩展数据
读写扩展数据代码可参考控件安装目录下的samples\Edit目录代码,例程运行效如图:
关键代码说明:
功能说明 代码实现
写扩展数据函数