明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1987|回复: 4

[事件] 麻烦看下代码从外部CAD文件插入块有啥错误

[复制链接]
发表于 2014-10-31 14:32:16 | 显示全部楼层 |阅读模式
下面的代码,运行提示eKeyNotFound,PFD的DWG文件中我将块命名为9020101,其中代码都能看明白。有几处疑惑,1:BlockName是PFD.DWG文件中的块名称么?还是其ID,如果是ID,我应该用什么编辑其ID?ArxDbg2010?
2:单击一个按钮CLICK用CALL调用该过程。该按钮下没有其他代码。我想问下问题出现在哪?麻烦解答下疑惑。。下面是代码:
  1. Public Sub InserBlock()
  2.         Dim acDoc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
  3.         Dim acDatabase As Database = acDoc.Database
  4.         Dim acEditor As Editor = acDoc.Editor
  5.         Dim pPtRes As PromptPointResult
  6.         Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
  7.         pPtOpts.Message = vbLf & "请选择插入点:"
  8.         pPtRes = acEditor.GetPoint(pPtOpts)
  9.         Dim InsertPt As Point3d = pPtRes.Value
  10.         If pPtRes.Status = PromptStatus.Cancel Then
  11.             Exit Sub
  12.         End If
  13.                 Using trans As Transaction = acDatabase.TransactionManager.StartTransaction
  14.                 Dim acBlockTable As BlockTable = trans.GetObject(acDatabase.BlockTableId, OpenMode.ForRead)
  15.                 Dim FilePath As String = "D:\2RD\PMDS\PMDS\Resources\PFD.dwg"
  16.                 Dim FileName As String = "PFD.dwg"
  17.                 Dim BlockName As String = "TextBox1.Text"

  18.                 If acBlockTable.Has(BlockName) = True Then
  19.                     Dim Block As BlockReference = New BlockReference(InsertPt, acBlockTable(BlockName))
  20.                     Block.ScaleFactors = New Scale3d(1, 1, 1)
  21.                     Block.Rotation = 0

  22.                     Dim ModelSpace As BlockTableRecord = trans.GetObject(acDatabase.CurrentSpaceId, OpenMode.ForWrite)
  23.                     ModelSpace.AppendEntity(Block)

  24.                     trans.AddNewlyCreatedDBObject(Block, True)
  25.                     trans.Commit()
  26.                 Else
  27.                     Dim db As New Database(False, False)
  28.                     db.ReadDwgFile(FilePath, IO.FileShare.Read, False, "")
  29.                     Dim id As ObjectId = acDatabase.Insert(FileName, db, False)
  30.                     If id.IsValid = False Then
  31.                         Exit Sub
  32.                     End If
  33.                     Dim Block As BlockReference = New BlockReference(InsertPt, acBlockTable(BlockName))
  34.                     Block.ScaleFactors = New Scale3d(1, 1, 1)
  35.                     Block.Rotation = 0
  36.                     Dim ModelSpace As BlockTableRecord = trans.GetObject(acDatabase.CurrentSpaceId, OpenMode.ForWrite)
  37.                     ModelSpace.AppendEntity(Block)
  38.                     trans.AddNewlyCreatedDBObject(Block, True)
  39.                     trans.Commit()
  40.                 End If
  41.             End Using
  42.     End Sub
发表于 2014-10-31 14:50:48 | 显示全部楼层
1:BlockName是PFD.DWG文件中的块名称么?这个是blockName是文件的块名。每个实体的ID是dwg文件数据库自动生成的,我不知道你要改ID是什么意思
2.单击一个按钮CLICK用CALL调用该过程。该按钮下没有其他代码。Else以后的代码,最后拿一个ID,我不太清楚这个方法的作用是什么。
 楼主| 发表于 2014-10-31 15:10:23 | 显示全部楼层
epwt 发表于 2014-10-31 14:50
1:BlockName是PFD.DWG文件中的块名称么?这个是blockName是文件的块名。每个实体的ID是dwg文件数据库自动生 ...

BLOCKNAME是PFD.DWG中的块的名称,我的意思是我现在不知道我自己在程序中设置的块的名称和PFD.DWG的块名称怎么对应起来。之所以提修改ID,是怕程序中设置的块的名称和PFD.DWG的块名称不能通过程序中的代码联系起来
 楼主| 发表于 2014-10-31 15:46:13 | 显示全部楼层
epwt 发表于 2014-10-31 14:50
1:BlockName是PFD.DWG文件中的块名称么?这个是blockName是文件的块名。每个实体的ID是dwg文件数据库自动生 ...

2这块 我的那个贴错了 应该Filename修改成Blockname,是检查PFD.DWG文件是否存在刚才要插入的那个块。如果没有,则退出。
 楼主| 发表于 2014-10-31 16:21:32 | 显示全部楼层
epwt 发表于 2014-10-31 14:50
1:BlockName是PFD.DWG文件中的块名称么?这个是blockName是文件的块名。每个实体的ID是dwg文件数据库自动生 ...

现在问题是所有的PFD.DWG文件中的块都进来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:53 , Processed in 0.170730 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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