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