找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 576|回复: 3

[分享]:利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块

[复制链接]
发表于 2003-4-22 14:39:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. 利用ObjectDbx技术在当前图形中插入其它未打开的图形中的图块(mccad)

  2. 以前,我们为了做图库,每一个图块均必须保存为一个图形文件,以便在编程时直接插入选定的图形,这样做出来的程序,图形文件的数量就会很多,因为有时你的图库内容很多。
  3. 现在利用ObjectDbx技术可以将这些图块放在一个图形中,做到真正的图库,以下为程序内容:

  4. 引用:ObjectDbx 1.0类型库(文件为:c:\program files\autocad 2002\AXDB15.TLB)
  5. 插入模块1,输入以下代码:
  6. 以下内容为程序代码:

  7. Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" _
  8.     (LPOPENFILENAME As OPENFILENAME) As Long
  9. Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
  10.     (pOpenfilename As OPENFILENAME) As Long
  11. Public Const OFN_PATHMUSTEXIST = &H800
  12. Public Const OFN_FILEMUSTEXIST = &H1000
  13. Public Const OFN_HIDEREADONLY = &H4 '隐蔽只读复选框

  14. Public Type OPENFILENAME
  15.     lStructSize As Long
  16.     hwndOwner As Long '拥有对话框的窗口
  17.     hInstance As Long
  18.     lpstrFilter As String '装载文件过滤器的缓冲区
  19.     lpstrCustomFilter As String
  20.     nMaxCustFilter As Long
  21.     nFilterIndex As Long
  22.     lpstrFile As String
  23.     nMaxFile As Long
  24.     lpstrFileTitle As String
  25.     nMaxFileTitle As Long
  26.     lpstrInitialDir As String
  27.     lpstrTitle As String '对话框的标题
  28.     flags As Long
  29.     nFileOffset As Integer
  30.     nFileExtension As Integer
  31.     lpstrDefExt As String
  32.     lCustData As Long
  33.     lpfnHook As Long
  34.     lpTemplateName As String
  35. End Type

  36. Function GetFile(strTitle As String, strFilter As String, Optional strIniDir As String) As String

  37. On Error Resume Next
  38. Dim FileName As String
  39. Dim OFileBox As OPENFILENAME
  40. With OFileBox
  41.     .lpstrTitle = strTitle '对话框标题
  42.     .lpstrInitialDir = strIniDir '初始目录
  43.     .lStructSize = Len(OFileBox)
  44.     .hwndOwner = ThisDrawing.HWND
  45.     .flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
  46.     .lpstrFile = String$(255, 0)
  47.     .nMaxFile = 255
  48.     .lpstrFileTitle = String$(255, 0)
  49.     .nMaxFileTitle = 255
  50.     .lpstrFilter = strFilter  '过滤器
  51.     .nFilterIndex = 1
  52. End With

  53. lntFile = GetOpenFileName(OFileBox) '执行打开对话框
  54. If lntFile <> 0 Then
  55.     FileName = Left(OFileBox.lpstrFile, InStr(OFileBox.lpstrFile, vbNullChar) - 1)
  56.     GetFile = FileName
  57. Else
  58.     GetFile = ""
  59. End If

  60. End Function




  61. 插入窗体userform1,自上而下插入以下控件:
  62.   标签(Label1)
  63.      文本框(TextBox1)
  64.               命令按钮(CommandButton1)
  65.   标签(Label2)
  66.      组合框(ComboBox1)
  67. 命令按钮(CommandButton2)  命令按钮(CommandButton3)

  68. 然后在窗体的代码窗中输入以下代码:
  69. 以下内容为程序代码:

  70. Option Explicit
  71.     Dim objDbx As AxDbDocument
  72.     Dim elem As Object
  73.     Dim blkName As String
  74.     Dim dwgName As String
  75.     Dim blkObj(0) As Object
  76.     Dim pnt As Variant

  77. Private Sub CommandButton1_Click()
  78.     Me.TextBox1 = GetFile("打开图形", "图形文件(*.dwg)" & vbNullChar & "*.dwg")
  79. End Sub

  80. Private Sub CommandButton2_Click()
  81.     blkName = Me.ComboBox1.SelText
  82.     dwgName = Me.TextBox1.Value
  83.     Me.Hide
  84.      
  85.     pnt = ThisDrawing.Utility.GetPoint(, "选择插入点:")
  86.     Set blkObj(0) = objDbx.Blocks(blkName)
  87.     objDbx.CopyObjects blkObj, ThisDrawing.ModelSpace
  88.     ThisDrawing.ModelSpace.InsertBlock pnt, blkName, 1, 1, 1, 0
  89.     Unload UserForm1
  90.     Set elem = Nothing
  91.     Set objDbx = Nothing
  92.      
  93. End Sub

  94. Private Sub CommandButton3_Click()
  95.     Unload UserForm1
  96.     Set elem = Nothing
  97.     Set objDbx = Nothing

  98. End Sub

  99. Private Sub TextBox1_Change()
  100.     If Dir(Me.TextBox1.Value) <> "" Then
  101.         objDbx.Open Me.TextBox1.Value
  102.         For Each elem In objDbx.Blocks
  103.             If Left(elem.Name, 1) <> "*" Then
  104.                 Me.ComboBox1.AddItem elem.Name
  105.             End If
  106.         Next
  107.     End If
  108.          
  109. End Sub

  110. Private Sub UserForm_Initialize()
  111.     Set objDbx = GetInterfaceObject("ObjectDBX.AxDbDocument")
  112.     Me.CommandButton1.Caption = "浏览"
  113.     Me.CommandButton2.Caption = "插入"
  114.     Me.CommandButton3.Caption = "取消"
  115.     Me.Label1.Caption = "选择图形:"
  116.     Me.Label2.Caption = "选择图块:"
  117.     Me.Caption = "插入外部图形中的图块示例"
  118. End Sub


  119. 然后在ThisDrawing代码窗中输入以下代码:
  120. 以下内容为程序代码:

  121. Sub InsBlk()
  122.     Load UserForm1
  123.     UserForm1.Show
  124. End Sub



  125. 这样就可以试试你的程序了。
  126. 如果觉得麻烦,这个我已经打包成一个文件,大家拿去试试吧:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-4-22 17:29:40 | 显示全部楼层
我有个相同功能的ARX程序,没有界面的,是函数,下面是他的头文件
BOOL        InsertBlock(const char* pBlockName,
                                                                AcGePoint3d Base_point = AcGePoint3d(0.0,0.0,0.0),
                                                                double ScaleFactorX = 1.0,
                                                                double ScaleFactorY = 1.0,
                                                                double angle = 0.0,
                                                                BOOL bExplore = TRUE,
                                                                const char* pFileName = _T(""));
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-4 09:33:32 | 显示全部楼层
binbin,可以把你的arx程序发上来让我们学习一下吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-4 10:34:36 | 显示全部楼层
楼主是不是发错地方了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 10:05 , Processed in 0.170840 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表