vb.net 外部参照 unload 导致cad崩溃
<p><font face="Verdana"> Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor<br/> Dim doc As Document = Application.DocumentManager.MdiActiveDocument<br/> Dim db As Database = doc.Database<br/> ' Dim bt as<br/> '获取当前的选择集对象<br/> Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()<br/> Dim ss As SelectionSet = ed.SelectImplied().Value<br/> Using trans As Transaction = db.TransactionManager.StartTransaction()<br/> '循环遍历选择集中的对象</font></p><p><font face="Verdana"> For Each id As ObjectId In ss.GetObjectIds()<br/> Dim obj As DBObject = trans.GetObject(id, OpenMode.ForRead)<br/> If TypeOf (obj) Is BlockReference Then<br/> Dim br As BlockReference = trans.GetObject(id, OpenMode.ForRead) 'CType(obj, BlockReference)<br/> Dim btr As BlockTableRecord = trans.GetObject(br.BlockTableRecord, OpenMode.ForRead)<br/> If (btr.IsFromExternalReference) Then<br/> Dim xrefId As ObjectId = br.BlockTableRecord<br/> If (Not xrefId = ObjectId.Null) Then<br/> acObjIdColl.Add(xrefId)<br/> 'db.DetachXref(xrefId)<br/> 'db.UnloadXrefs()<br/> ed.WriteMessage(vbCrLf & "Xref:" & btr.Name & " Unload!")<br/> End If<br/> db.UnloadXrefs(acObjIdColl)<br/> trans.Commit()<br/> End If<br/> </font><font face="Verdana"> End If<br/> Next<br/> End Using</font></p>
vb.net 外部参照 unload 导致cad崩溃
运行到db.UnloadXrefs(acObjIdColl) 就崩溃了 <p>其他的没仔细看,但这里应该在For循环外吧</p><p> db.UnloadXrefs(acObjIdColl)<br/> trans.Commit()<br/></p>
vb.net 外部参照 unload 导致cad崩溃
我是想做个右键的快捷菜单 ,一般的选择后执行 我试了试没有问题 ,用在右键的快捷菜单就崩溃了<CommandMethod("AddBlockRefMenu")> _
Public Sub AddBlockRefMenu()
'定义一个ContextMenuExtension对象,用于表示快捷菜单
Dim contextMenu As New ContextMenuExtension()
'对于对象级别的快捷菜单,不必设置菜单名
Dim miBlockUnload As New MenuItem("卸载")
AddHandler miBlockUnload.Click, AddressOf miBlockUnload_Click
contextMenu.MenuItems.Add(miBlockUnload)
Application.AddObjectContextMenuExtension(RXClass.GetClass(GetType(BlockReference)), contextMenu)
End Sub
Sub miBlockUnload_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
' Dim bt as
'获取当前的选择集对象
Dim acObjIdColl As ObjectIdCollection = New ObjectIdCollection()
Dim ss As SelectionSet = ed.SelectImplied().Value
Using trans As Transaction = db.TransactionManager.StartTransaction()
'循环遍历选择集中的对象
For Each id As ObjectId In ss.GetObjectIds()
Dim obj As DBObject = trans.GetObject(id, OpenMode.ForRead)
'如果所选择的对象是
If TypeOf (obj) Is BlockReference Then
'获取所选择的对象
Dim br As BlockReference = trans.GetObject(id, OpenMode.ForRead) 'CType(obj, BlockReference)
Dim btr As BlockTableRecord = trans.GetObject(br.BlockTableRecord, OpenMode.ForRead)
If (btr.IsFromExternalReference) Then
Dim xrefId As ObjectId = br.BlockTableRecord
If (Not xrefId = ObjectId.Null) Then
acObjIdColl.Add(xrefId)
'db.DetachXref(xrefId)
'db.UnloadXrefs()
' ed.WriteMessage(vbCrLf & "Xref:" & btr.Name & " Unload!")
End If
End If
End If
Next
db.UnloadXrefs(acObjIdColl)
trans.Commit()
End Using
End Sub
End Class
vb.net 外部参照 unload 导致cad崩溃
顺便再问问 Dim acTypValAr(0) As TypedValueacTypValAr.SetValue(New TypedValue(DxfCode.Start, "BlockReference"), 0)好像不能过滤到块参照,过滤块参照应该在.net怎么用呢
<p>"Insert"</p>
<p> </p>
<p>右键菜单的话,文档应该加锁的吧</p> 谢谢 飞狐版主 能详细说下文档应该怎么加锁吗 <p>Using doc.LockDocument()</p>
<p> </p>
<p> </p>
<p>End Using</p>
vb.net 外部参照 unload 导致cad崩溃
<p>谢谢 飞狐版主 可以做出来 哈哈</p>vb.net 外部参照 unload 导致cad崩溃
完整的代码
页:
[1]
2