明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6428|回复: 12

利用ObjectDbx预览块图像

  [复制链接]
发表于 2004-7-2 12:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2004-7-2 14:36:20 编辑

Private pFileName As String
Private objDbx As AxDbDocument
Public Names As New Collection Private Sub Class_Initialize() Set objDbx = GetInterfaceObject("ObjectDBX.AxDbDocument.16")

End Sub Public Function GetBlock(ByVal BlockName As String) As AcadBlock
'将文件中的块读入当前图形 Dim pBlock As AcadBlock
Dim pnt(2) As Double
Dim pObjs() As AcadEntity

Set pBlock = objDbx.Blocks(BlockName)

ReDim pObjs(pBlock.Count - 1) As AcadEntity

For i = 0 To pBlock.Count - 1
Set pObjs(i) = pBlock(i)
Next i

Set GetDbxBlock = ThisDrawing.Blocks.Add(pnt, "*U")
objDbx.CopyObjects pObjs, GetDbxBlock

End Function Public Function GetBlockImage(ByVal BlockName As String) As IPictureDisp
'获取块的预览图像 Dim pObj(0) As AcadEntity
Dim pnt(2) As Double
Dim ss As AcadSelectionSet

Set pObj(0) = objDbx.ModelSpace.InsertBlock(pnt, BlockName, 1, 1, 1, 0)
objDbx.CopyObjects pObj, ThisDrawing.ModelSpace

Set pObj(0) = ThisDrawing.ModelSpace(ThisDrawing.ModelSpace.Count - 1)
pObj(0).GetBoundingBox d1, d2

ThisDrawing.Application.ZoomWindow d1, d2

On Error Resume Next
ThisDrawing.SelectionSets("*TlsDbx*").Delete
Set ss = ThisDrawing.SelectionSets.Add("*TlsDbx*")
ss.AddItems pObj

ThisDrawing.Export "c:\Temp", "wmf", ss
ss.Delete
pObj(0).Delete
ThisDrawing.Blocks(BlockName).Delete
ThisDrawing.Application.ZoomPrevious

Set GetBlockImage = LoadPicture("c:\temp.wmf")
Kill "c:\temp.wmf"

End Function
Public Property Let FileName(ByVal str As String)
'打开文件 Dim i As AcadBlock pFileName = str
objDbx.Open str

Set Names = New Collection

For Each i In objDbx.Blocks
If Not (i.IsLayout Or i.IsXRef) Then
Names.Add i.Name
End If
Next i End Property 上述代码存为TlsDbx类 插入一个窗体 加入ListBox控件和Image控件 在窗体加入下列代码 Dim a As New TlsDbx Private Sub ListBox1_Click()
Set Me.Image1.Picture = a.GetBlockImage(ListBox1.Text) End Sub Private Sub UserForm_Activate()
a.FileName = "d:\ccd.dwg"
For Each i In a.Names
Me.ListBox1.AddItem i
Debug.Print i
Next i
End Sub
发表于 2004-7-4 15:35 | 显示全部楼层
太好了,试试看
发表于 2004-8-10 09:05 | 显示全部楼层
强大!!! ObjectDbx看来要好研究研究 关注ing
发表于 2004-8-18 18:34 | 显示全部楼层
可是预览那一块似乎不好用,算法好像是把图插入当前图然后输出为wmf再导入图形控件中,预览不完善而且觉得这样的过程似乎有点麻烦,有没有更好的方法呢?
发表于 2004-8-21 15:03 | 显示全部楼层
Private objDbx As AxDbDocument 此句无效,是为什么
发表于 2004-8-25 15:09 | 显示全部楼层
上述代码存为TlsDbx类?以上所有的代码么?不好意思水平比较差
 楼主| 发表于 2004-8-25 16:16 | 显示全部楼层
yicol发表于2004-8-21 15:03:00Private objDbx As AxDbDocument 此句无效,是为什么

引用DBX
发表于 2004-8-25 17:52 | 显示全部楼层
不行啊,版主,看到了文件生成,但那个图元文件是没有图像的,在窗体中预览不到,另外我在原文件中确定块是正常的,单击list后没有任何反应
发表于 2004-9-13 11:00 | 显示全部楼层
我正准备用objectdbx在不打开autocad情况下读取dwg里图框里的文字信息,能举一例子或提示用哪些方法和属性可以成功吗,(不熟cad编程,但要马上交货了,盼能得到您的帮助),谢谢,我是用vb开发的。
 楼主| 发表于 2004-9-13 15:39 | 显示全部楼层
不打开autocad,objectdbx也干不了,:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-6 23:24 , Processed in 0.803363 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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