[求助]Jig中又出问题,不能创建图元
之前碰到了一堆问题。不过都慢慢解决了!这次又碰到了一个问题。大概的意思如下代码,问题请见代码中的注释,麻烦各位帮忙看看!!先谢过
Private Sub Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim Complete As Boolean = False
Dim Ent As Entity
Dim InputData As PromptPointResult = Ed.GetPoint()
If InputData.Status = PromptStatus.OK Then
Dim jig As New JIGClass
Dim Res As PromptResult = Ed.Drag(jig) '开始拖放,这个类拖放显示的效果没有问题
If Res.Status = PromptStatus.OK Then
Ent = jig.getEntity '这个是Jig类中我写的一个获取实体的方法,如果拖放结束,这个实体应该是最后一次修改过的
Complete = True
End If
End If
If Complete Then
Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument
Using curDoc.LockDocument
'问题:从这个地方往下的代码便不能执行,CAD提示,未将对象的引用设置到对象的实例
'我开始以为是JIG类中传回图元对象存在问题,于是我将添加Ent的这几行完全不要,换成了一个跟JIG类完全无关的图元
'但是添加的时候,仍然显示未将对象的引用设置到对象的实例,我想应该能排除是JIG的问题了,那么可能Dbase的定义
'开始就不能实例化了,但是看代码,我的确看不出来哪里未实例化。另外我尝试不用Using curDoc.LockDocument结构
'CAD提示,LockViolation,那就看来还是要用LockDocument,但是就没法成功添加图元,这是怎么回事??
Dim Dbase As Database = curDoc.Database
Dim Trans As Transaction = Dbase.TransactionManager.StartTransaction
Dim BlkTable As BlockTable = Trans.GetObject(Dbase.BlockTableId, OpenMode.ForRead, False)
Dim Mspace As BlockTableRecord = Trans.GetObject(BlkTable.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
Mspace.AppendEntity(Ent)
Trans.AddNewlyCreatedDBObject(Ent, True)
Trans.Commit()
Trans.Dispose()
End Using
End If
End Sub
<p>Using curDoc.LockDocument</p>
<p>放在第一句试试</p> <p>我把Start函数下面,除了Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument</p>
<p>这句外的代码全放到Using curDoc.LockDocument ... End Using 之间了,还是不行</p>
<p> </p>
<p>效果一样,而且挺奇怪的。只要不添加图元就没事。一添加图元就挂掉,整个CAD停止响应,退出。</p> 又做了个简单的试验。
我把关于JIG的那段抛弃了,就留了个最简单的。就如下面这样的,同样报错,并退出CAD
Private Sub Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument
Using curDoc.LockDocument
Dim Dbase As Database = curDoc.Database
Dim Trans As Transaction = Dbase.TransactionManager.StartTransaction
Dim BlkTable As BlockTable = Trans.GetObject(Dbase.BlockTableId, OpenMode.ForRead, False)
Dim Mspace As BlockTableRecord = Trans.GetObject(BlkTable.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
Dim Ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
Dim Complete As Boolean = False
Dim Ent As Entity
Dim InputData As PromptPointResult = Ed.GetPoint()
If InputData.Status = PromptStatus.OK Then
Complete = True
End If
If Complete Then
Dim Cr as new Circle(inputdata.value, new vector3d(0,0,1),10)
Mspace.AppendEntity(Cr)
Trans.AddNewlyCreatedDBObject(Cr, True)
Trans.Commit()
Trans.Dispose()
End If
End Using
End Sub
<p>逐步调试一下吧</p>
<p>应该是有哪里出现了空值的调用</p> <p>谢谢,问题找到了!</p>
<p>是事件函数搞的鬼!在程序添加图元的时候激发了事件函数,搞得transaction到处都是。。</p> 楼主是怎么解决的呢?
页:
[1]