乐筑天下

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

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

[复制链接]

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2014-10-31 14:32:00 | 显示全部楼层 |阅读模式
下面的代码,运行提示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..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
回复

使用道具 举报

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2014-10-31 14:50:00 | 显示全部楼层
1:BlockName是PFD.DWG文件中的块名称么?这个是blockName是文件的块名。每个实体的ID是dwg文件数据库自动生成的,我不知道你要改ID是什么意思
2.单击一个按钮CLICK用CALL调用该过程。该按钮下没有其他代码。Else以后的代码,最后拿一个ID,我不太清楚这个方法的作用是什么。
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2014-10-31 15:10:00 | 显示全部楼层

BLOCKNAME是PFD.DWG中的块的名称,我的意思是我现在不知道我自己在程序中设置的块的名称和PFD.DWG的块名称怎么对应起来。之所以提修改ID,是怕程序中设置的块的名称和PFD.DWG的块名称不能通过程序中的代码联系起来
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2014-10-31 15:46:00 | 显示全部楼层

2这块 我的那个贴错了 应该Filename修改成Blockname,是检查PFD.DWG文件是否存在刚才要插入的那个块。如果没有,则退出。
回复

使用道具 举报

10

主题

25

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2014-10-31 16:21:00 | 显示全部楼层

现在问题是所有的PFD.DWG文件中的块都进来了
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:16 , Processed in 0.415469 second(s), 62 queries .

© 2020-2025 乐筑天下

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