乐筑天下

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

带有关联块的.Net引线

[复制链接]

9

主题

23

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2017-6-25 17:41:50 | 显示全部楼层 |阅读模式
一直在四处寻找,但似乎没有找到任何可以解决我正在寻找的东西,所以希望有人可能有一些见解。
我已经能够轻松地使用.Net创建MLeaders,Leaders,Leaders w/ MText等等,但是对于具有关联块的领导者,我并没有真正成功地做到这一点。我有一些相当详细的动态块,我想将它们与用户最终同时创建的领导者的末尾相关联。
起初,我想到了Leader.BlockName或。BlockId会让我朝着正确的方向前进,但它们都是只读的,我现在正在挠头......有人有任何想法或方向可以指出我吗?如果有帮助,请为2016 AutoCAD编程。
提前致谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2017-6-25 18:49:54 | 显示全部楼层
创建块引用,然后设置Mleader.BlockContentId使用块引用的ObjectId。
ml.MLeaderStyle=mlstyle;。
MLeaderStyle样式=(MLeaderStyle)mlstyle.Open(OpenMode.ForRead);。
区块参考br=new区块参考(new Point3d(),style.BlockId);。
ml.BlockContentIdbr.ObjectId。

回复

使用道具 举报

9

主题

23

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2017-6-25 22:10:13 | 显示全部楼层
谢谢你的回复,杰夫,看起来我不像是一个标准的领导者。如果我使用MLeaders,是的,这与我使用的类似,但对于标准leader,没有从我看到的内容中实际分配BlockId的选项。同样,我只是希望创建一个标准的领导者与相关的动态块。抱歉,如果我有点误导。
这正是我想要的...
  1. Using _LeaderItm As Leader = New Leader()
  2.                 Dim _BlkRef As BlockReference = New BlockReference(New Point3d(4, 4, 0), _LeaderItm.BlockId)
  3.                 _LeaderItm.AppendVertex(New Point3d(0, 0, 0))
  4.                 _LeaderItm.AppendVertex(New Point3d(4, 4, 0))
  5.                 ''' Somehow set block id below. '''
  6.                 _LeaderItm.BlockId ' PromptStatus.OK Then Exit Do
  7.                     Dim CurrentBlkTbl As BlockTable
  8.                     CurrentBlkTbl = CurrentTrans.GetObject(CurrentDB.BlockTableId, OpenMode.ForRead)
  9.                     Dim CurrentBlkTblRec As BlockTableRecord
  10.                     CurrentBlkTblRec = CurrentTrans.GetObject(CurrentBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  11.                     Dim _PntStartRes As PromptPointResult = CurrentEd.GetPoint(_PntStart)
  12.                     If _PntStartRes.Status  PromptStatus.OK Then Exit Do
  13.                     _PntEnd.BasePoint = _PntStartRes.Value
  14.                     Dim _PntEndRes As PromptPointResult = CurrentEd.GetPoint(_PntEnd)
  15.                     If _PntEndRes.Status  PromptStatus.OK Then Exit Do
  16.                     Dim _RotMat As Matrix3d = CurrentEd.CurrentUserCoordinateSystem
  17.                     Dim _BaseStartPnt As Point3d = _PntStartRes.Value.TransformBy(_RotMat)
  18.                     Dim _BaseEndPnt As Point3d = _PntEndRes.Value.TransformBy(_RotMat)
  19.                     Dim _BlkTbl As BlockTable = CurrentTrans.GetObject(CurrentDB.BlockTableId, OpenMode.ForRead)
  20.                     Dim _BlkId = _BlkTbl(_BlkNameString)
  21.                     Dim _BlkRef As BlockReference = New BlockReference(_BaseEndPnt, _BlkId)
  22.                     _LeaderItm.AppendVertex(_BaseStartPnt)
  23.                     _LeaderItm.AppendVertex(_BaseEndPnt)
  24.                     _LeaderItm.HasArrowHead = True
  25.                     CurrentBlkTblRec.AppendEntity(_LeaderItm)
  26.                     CurrentTrans.AddNewlyCreatedDBObject(_LeaderItm, True)
  27.                     CurrentBlkTblRec.AppendEntity(_BlkRef)
  28.                     CurrentTrans.AddNewlyCreatedDBObject(_BlkRef, True)
  29.                     '
  30.                     _LeaderItm.Annotation = _BlkRef.ObjectId
  31.                     Dim _DynBlkRef As BlockReference = DirectCast(CurrentTrans.GetObject(_BlkRef.ObjectId, OpenMode.ForWrite), BlockReference)
  32.                     Dim _DynBlkTblRec As BlockTableRecord = DirectCast(CurrentTrans.GetObject(_DynBlkRef.DynamicBlockTableRecord, OpenMode.ForWrite), BlockTableRecord)
  33.                     For Each _AttID As ObjectId In _DynBlkTblRec
  34.                         Dim ent As DBObject = CurrentTrans.GetObject(_AttID, OpenMode.ForWrite)
  35.                         If TypeOf ent Is AttributeDefinition Then
  36.                             Dim AttDef As AttributeDefinition = ent
  37.                             If AttDef.Tag = "NT" Then AttDef.TextString = _NoteStrRes.StringResult
  38.                             _DynBlkTblRec.SynchronizeAttributes
  39.                         End If
  40.                     Next
  41.                     _LeaderItm.EvaluateLeader()
  42.                     CurrentTrans.Commit()
  43.                     CurrentEd.Regen()
  44.                 End Using
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 13:45 , Processed in 0.208854 second(s), 69 queries .

© 2020-2025 乐筑天下

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