乐筑天下

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

多行属性绘制顺序

[复制链接]

9

主题

23

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2017-9-2 16:49:20 | 显示全部楼层 |阅读模式
好的,我一直在考虑设置我们的大部分块,以便在有意义的块中使用多行属性。我遇到的问题是,当我通过. net插入块时,多行属性会出现在ALL linework之上。这根本不适合我。所以我开始四处挖掘,发现这是一个相当常见的问题。Kean Walmsley在C中有一个不错的帖子,我能够将其全部转换并使其大部分工作,但多行属性无论如何都不会改变Draworder。下面是我正在使用的函数的当前迭代,我将线条放在顶部,而不是将属性发送到后面。起初,我认为我错过了一些东西,因为我正在尝试“修复”它是一个动态块,但是,它工作得很好,除非尝试将线条放在多行属性的顶部。我已经验证了该块设置正确。你们中有人对您的任何块这样做吗?或者有没有一种方法可以创建一个不断变化的wipeout,根据多行属性调整高度和宽度?我试图副歌从标题孵化背景路线,我不认为我想开始在所有属性周围设置边界。不过,开放的建议和想法。
  1. Private Shared Function _MoveLineTop(_Trans As Transaction, _IDColl As ObjectIdCollection) As ObjectIdCollection
  2.         Dim _BlkRecIDColl = New ObjectIdCollection()
  3.         Dim _SpecClass = RXClass.GetClass(GetType(Line))
  4.         Dim _BTRIDs = New ObjectId(_IDColl.Count - 1) {}
  5.         _IDColl.CopyTo(_BTRIDs, 0)
  6.         For Each _BlkTblRecID As ObjectId In _BTRIDs
  7.             Dim _BlkTblRec = DirectCast(_Trans.GetObject(_BlkTblRecID, OpenMode.ForWrite), BlockTableRecord)
  8.             Dim _Line = New ObjectIdCollection()
  9.             For Each _ID As ObjectId In _BlkTblRec
  10.                 Dim _AttEnt = DirectCast(_Trans.GetObject(_ID, OpenMode.ForRead), Autodesk.AutoCAD.DatabaseServices.Entity)
  11.                 If _AttEnt.GetRXClass().IsDerivedFrom(_SpecClass) Then
  12.                     _Line.Add(_ID)
  13.                 End If
  14.             Next
  15.             If _Line.Count > 0 Then
  16.                 Dim _DOTbl = DirectCast(_Trans.GetObject(_BlkTblRec.DrawOrderTableId, OpenMode.ForWrite), DrawOrderTable)
  17.                 _DOTbl.MoveToTop(_Line)
  18.                 Dim _BlkRefIDs = _BlkTblRec.GetBlockReferenceIds(False, False)
  19.                 For Each btrBrId As ObjectId In _BlkRefIDs
  20.                     _BlkRecIDColl.Add(btrBrId)
  21.                 Next
  22.             Else
  23.                 _IDColl.Remove(_BlkTblRecID)
  24.             End If
  25.         Next
  26.         Return _BlkRecIDColl
  27.     End Function

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

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

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

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

铜币
238
发表于 2017-9-3 07:53:49 | 显示全部楼层
如果您感兴趣的块是动态块,您可能会遇到与我相同的问题,我在这里写道:
http://drive-cad-with-code.blogspot.ca/2013/11/draw-order-problem-with-dynamic-block.html
正如我在文章中所猜测的,当动态属性更改导致AutoCAD创建新的匿名块定义时,块创建逻辑可能遵循AutoCAD的所有者建议手动创建块:首先选择非属性实体,并按属性编辑对话框中列出的属性的倒序选择属性。因此,在创建新的匿名块定义时,属性(无论是否为MText)很可能是添加到块定义中的最后一个(或最后一个,如果有多个属性),因此,该属性将位于块定义的Draworder表的顶部。
也就是说,即使您在动态块定义中设置了正确的Draworder,属性draworder也可以被AutoCAD重置为“Top”,因为动态属性更改。我在文章中再次声称,这纯粹是我的猜测,但似乎有道理。
回复

使用道具 举报

9

主题

23

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2017-9-3 15:07:31 | 显示全部楼层
我明白你的意思,事实上我在寻找如何处理这个问题的时候偶然看到了你的文章...让我困惑的是,假设我选择将所有行都放在前面,这是可行的,只要它们不在我的multiline属性的“后面”,该属性在插入所需块的代码中内置了屏蔽。我很好奇这是否是由于块在插入时改变可见性状态后变成匿名的。如果是这种情况,那么我需要“编辑”匿名块而不是原始块吗?让我感到沮丧的是,如果我以“老式”的方式插入动态块,那么包括绘制顺序在内的一切都会正常工作,即使是在插入并更改可见性状态之后。考虑到目前只定义了两个状态,我可能需要重做我的块,从有问题的显示状态开始。稍后我会再多逛逛,看看我还能破坏些什么。
回复

使用道具 举报

9

主题

23

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
59
发表于 2017-9-3 21:31:54 | 显示全部楼层
好了,我现在放弃了,至少对于带有背景遮罩的多行属性...因此,我决定使用标准的遮蔽,然后使用线性拉伸参数集,我可以在通过. Net插入块时相应地更改这些参数集。
由于我的设置方式,我对其他一些东西感到好奇。目前,我正在隐藏我正在使用的块中的遮蔽的线性拉伸参数的属性和夹点,但是我想知道,对于像这样的项目,关于隐藏像这样的东西有什么普遍的共识?我明白,如果用户覆盖了程序中输入的内容,他们“可能”需要对此进行调整,但是在手动编辑时,可以使用我的自定义命令来自动调整大小...谢谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 13:03 , Processed in 0.223112 second(s), 60 queries .

© 2020-2025 乐筑天下

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