乐筑天下

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

求助: cad2010插入块的问题.......

[复制链接]

6

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
41
发表于 2012-2-25 16:43:00 | 显示全部楼层 |阅读模式
Public Shared Sub insetBLocka()
        Dim obj As Object
        Dim doc As Document = Application.DocumentManager.MdiActiveDocument
        Dim ed As Editor = doc.Editor
        Dim ppr As PromptPointResult = ed.GetPoint("请选择插入点:")
        Dim pt As Point3d = ppr.Value
        'utility.WriteToEditor(pt.ToString())
        Dim pidBlock As New PIDBlock()
        '自己定义的图块类,保存图块的路径和名称
        pidBlock.Name = "sample"
        pidBlock.Path = "D:\AutoPIS_DQ\OCSNBTK\byq.dwg"
        Using blkDb As New Database(False, True)
        
            blkDb.ReadDwgFile(pidBlock.Path, System.IO.FileShare.Read, True, Nothing)
            blkDb.CloseInput(True)
            Using docLock As DocumentLock = doc.LockDocument()
                '多文档要先这样,否则报至命错误
                Using t As Transaction = doc.TransactionManager.StartTransaction()
        
                    Dim idBTR As ObjectId = doc.Database.Insert(pidBlock.Name, blkDb, False)
                    'create a ref to the block
                    Dim bt As BlockTable = DirectCast(t.GetObject(doc.Database.BlockTableId, OpenMode.ForRead), BlockTable)
                    Dim btr As BlockTableRecord = DirectCast(t.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
                    Using bref As New BlockReference(pt, idBTR)
                        btr.AppendEntity(bref)
                        t.AddNewlyCreatedDBObject(bref, True)
               t.Commit()
                End Using
            End Using
        End Using
这是一段在CAD中插入块的代码,小弟刚开始入手CAD.net二次开发。想问的一个问题是,这段代码插入的块是以一个外部的文件形式插入的        pidBlock.Path = "D:\AutoPIS_DQ\OCSNBTK\byq.dwg" 。我想把这段代码改成直接插入CAD文档中的一个块。也就是说我已经在CAD文档中做好了一个块,怎样才能用代码实现。
以前用VBA的时候这样插入就行 Set BlockRefObj = ACADDoc.ModelSpace.InsertBlock(InsPnt,  BDwgName, 1#, 1#, 1#, InsAng)
BDWGNAME是CAD文档中的一个块。
回复

使用道具 举报

40

主题

133

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
277
发表于 2012-2-25 19:46:00 | 显示全部楼层
bnameStr是你要插入块的名字
  1.                         Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
  2. 'blockId = bt(bnameStr)
  3.                         'Dim pt As Point3d
  4.                         'pt = insPoint.TransformBy(ed.CurrentUserCoordinateSystem)
  5.                         '// Create a block reference
  6.                         'Dim br As BlockReference = New BlockReference(pt, blockId)
  7.                         '// Add the block reference to Model space
  8.                         'oBTR.AppendEntity(br)
  9.                         'trans.AddNewlyCreatedDBObject(br, True)
回复

举报

6

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
41
发表于 2012-2-25 21:12:00 | 显示全部楼层

  太感谢你了!呵呵,刚入手,很多不明白。都不知道从那儿入手,只有找个代码读读,再练一下子。
          自我感觉这种插入块的办法,比直接从外部插入文件速度会快一些,我自己想是这样子的,不知道结果会不会是这样子。
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-16 14:52 , Processed in 0.653781 second(s), 58 queries .

© 2020-2025 乐筑天下

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