明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2696|回复: 2

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

[复制链接]
发表于 2012-2-25 16:43:55 | 显示全部楼层 |阅读模式
  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文档中的一个块。








发表于 2012-2-25 19:46:58 | 显示全部楼层
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)
 楼主| 发表于 2012-2-25 21:12:08 | 显示全部楼层
本帖最后由 zhangtaosp 于 2012-2-25 21:13 编辑
shirazbj 发表于 2012-2-25 19:46
bnameStr是你要插入块的名字


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

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

本版积分规则

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

GMT+8, 2024-11-25 18:39 , Processed in 0.246463 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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