乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 6

将块插入到图形中

[复制链接]

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 18:49:27 | 显示全部楼层 |阅读模式
好的,我'很明显,我的大脑在放屁,但我可以#039;我想不出这是为了救我的命
I'我从一张图上取一块,放在另一张图中
我不't有一个文件I'm插入,I'我并不是在动态中创建块
类似ThisDrawing.Blocks的内容。添加(MyBlockObject)
有什么想法吗 这有意义吗?
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 19:02:42 | 显示全部楼层
CopyObjects?其中,要复制的对象是1个图形中的块定义,目标是第二个图形的块集合?
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 19:23:08 | 显示全部楼层

Can'我不能让它工作
我尝试了以下方法
  1.     Dim BlockCollection(0) As Object
  2.     Dim NewDrawing As Variant
  3.    
  4.     NewDrawing = ThisDrawing.ModelSpace
  5.     Set BlockCollection(0) = BlockObject
  6.    
  7.     ThisDrawing.CopyObjects BlockCollection, NewDrawing

没有成功 我得到一个;对象不在数据库中“;错误
你'我认为这会更容易。英雄联盟
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 19:44:53 | 显示全部楼层
没有经过测试,但我认为它应该可以工作
  1. Function CopyBlock2ThisDrawing(OtherDrawing As AcadDocument, strBname As String) As Boolean
  2.    
  3.     Dim oBlock As AcadBlock
  4.     On Error Resume Next
  5.     Set oBlock = OtherDrawing.Blocks(strBname)
  6.     If Err Then
  7.         CopyBlock2ThisDrawing = False
  8.         Exit Function
  9.     End If
  10.     Dim oCopyMe(0) As AcadObject
  11.     Set oCopyMe(0) = oBlock
  12.     OtherDrawing.CopyObjects oCopyMe, ThisDrawing.Blocks
  13.     CopyBlock2ThisDrawing = True
  14. End Function
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 20:04:34 | 显示全部楼层
呸……没关系 本人'我是个白痴 我在copyobjects语句中使用了我的源图形作为我的新图形。谢谢。这很有魅力
给我一点时间收拾东西,我'我会发布完整的程序
这是一个方便的小工具,或者至少是。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 20:16:47 | 显示全部楼层
好的。给你'这是我正在做的部分;谢谢你,杰夫 这将从外部文件中获取块定义,而无需使用AutoCAD打开它,并将其添加到当前图形中
I'我将把要引入哪个块的计算和实际插入例程留给您个人的喜好。请确保添加对AutoCAD/ObjectDBX Common(ver#)类型库的引用
  1. Option Explicit
  2. Function OpenSourceFile(FileName As String) As AXDBLib.AxDbDocument
  3.    
  4.     If Dir(FileName)  "" Then
  5.         Dim SourceDWG As New AXDBLib.AxDbDocument
  6.         SourceDWG.Open (FileName)
  7.         
  8.         If Err.Number  0 Then
  9.             If Err.Number  -2147467259 Then 'File Moved
  10.                 SourceDWG.Open (FileName)
  11.             End If
  12.         End If
  13.         
  14.         Set OpenSourceFile = SourceDWG
  15.     End If
  16.             
  17. End Function
  18. Function ImportBlock(SourceName As String, BlockName As String) As AcadBlock
  19.     Dim SourceDWG As New AXDBLib.AxDbDocument
  20.     Dim EvryBlock As AcadBlock
  21.    
  22.     Set SourceDWG = OpenSourceFile(SourceName)
  23.    
  24.     For Each EvryBlock In SourceDWG.Blocks
  25.         If UCase(BlockName) = UCase(EvryBlock.Name) Then
  26.             Set ImportBlock = EvryBlock
  27.         End If
  28.     Next
  29.    
  30.     Dim BlockCollection(0) As AcadObject
  31.    
  32.     Set BlockCollection(0) = ImportBlock
  33.     SourceDWG.CopyObjects BlockCollection, ThisDrawing.Blocks
  34.    
  35.    Set SourceDWG = Nothing
  36.    
  37. End Function
  38. Sub Palette_Helper_Blocks()
  39.    
  40.     Dim SourceFile As String
  41.     Dim BlockName As String
  42.         
  43.     SourceFile = "ContentMaster.dwg"
  44.     BlockName = ""
  45.    
  46.     ImportBlock SourceFile, BlockName
  47.    
  48. End Sub
也感谢jbuzzbee为我指明了这个方向。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2007-6-18 20:22:21 | 显示全部楼层
我想你可能在尝试这种方法,'这就是为什么我选择只显示两个开放的图纸之间…我知道你'd找出剩下的。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 19:03 , Processed in 0.914662 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表