enocheasty 发表于 2010-9-5 00:49:00

[求助]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

雪山飞狐_lzh 发表于 2010-9-5 10:09:00

<p>Using curDoc.LockDocument</p>
<p>放在第一句试试</p>

enocheasty 发表于 2010-9-5 10:24:00

<p>我把Start函数下面,除了Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument</p>
<p>这句外的代码全放到Using curDoc.LockDocument ... End Using 之间了,还是不行</p>
<p>&nbsp;</p>
<p>效果一样,而且挺奇怪的。只要不添加图元就没事。一添加图元就挂掉,整个CAD停止响应,退出。</p>

enocheasty 发表于 2010-9-5 10:34:00

又做了个简单的试验。
我把关于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

雪山飞狐_lzh 发表于 2010-9-5 10:36:00

<p>逐步调试一下吧</p>
<p>应该是有哪里出现了空值的调用</p>

enocheasty 发表于 2010-9-5 11:58:00

<p>谢谢,问题找到了!</p>
<p>是事件函数搞的鬼!在程序添加图元的时候激发了事件函数,搞得transaction到处都是。。</p>

single-yu 发表于 2010-9-12 22:47:00

楼主是怎么解决的呢?
页: [1]
查看完整版本: [求助]Jig中又出问题,不能创建图元