明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1834|回复: 6

[求助]Jig中又出问题,不能创建图元

[复制链接]
发表于 2010-9-5 00:49:00 | 显示全部楼层 |阅读模式
之前碰到了一堆问题。不过都慢慢解决了!这次又碰到了一个问题。
大概的意思如下代码,问题请见代码中的注释,麻烦各位帮忙看看!!先谢过
  1.         Private Sub Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2.             Dim Ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  3.             Dim Complete As Boolean = False
  4.             Dim Ent As Entity
  5.                 Dim InputData As PromptPointResult = Ed.GetPoint()
  6.                 If InputData.Status = PromptStatus.OK Then
  7.                     Dim jig As New JIGClass
  8.                     Dim Res As PromptResult = Ed.Drag(jig) '开始拖放,这个类拖放显示的效果没有问题
  9.                     If Res.Status = PromptStatus.OK Then
  10.                         Ent = jig.getEntity '这个是Jig类中我写的一个获取实体的方法,如果拖放结束,这个实体应该是最后一次修改过的
  11.                         Complete = True
  12.                     End If
  13.                 End If
  14.                 If Complete Then
  15.                     Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument
  16.                     Using curDoc.LockDocument
  17.                         '问题:从这个地方往下的代码便不能执行,CAD提示,未将对象的引用设置到对象的实例
  18.                         '我开始以为是JIG类中传回图元对象存在问题,于是我将添加Ent的这几行完全不要,换成了一个跟JIG类完全无关的图元
  19.                         '但是添加的时候,仍然显示未将对象的引用设置到对象的实例,我想应该能排除是JIG的问题了,那么可能Dbase的定义
  20.                         '开始就不能实例化了,但是看代码,我的确看不出来哪里未实例化。另外我尝试不用Using curDoc.LockDocument结构
  21.                         'CAD提示,LockViolation,那就看来还是要用LockDocument,但是就没法成功添加图元,这是怎么回事??
  22.                         Dim Dbase As Database = curDoc.Database
  23.                         Dim Trans As Transaction = Dbase.TransactionManager.StartTransaction
  24.                         Dim BlkTable As BlockTable = Trans.GetObject(Dbase.BlockTableId, OpenMode.ForRead, False)
  25.                         Dim Mspace As BlockTableRecord = Trans.GetObject(BlkTable.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
  26.                         Mspace.AppendEntity(Ent)
  27.                         Trans.AddNewlyCreatedDBObject(Ent, True)
  28.                         Trans.Commit()
  29.                         Trans.Dispose()
  30.                     End Using
  31.                 End If
  32.         End Sub
发表于 2010-9-5 10:09:00 | 显示全部楼层

Using curDoc.LockDocument

放在第一句试试

 楼主| 发表于 2010-9-5 10:24:00 | 显示全部楼层

我把Start函数下面,除了Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument

这句外的代码全放到Using curDoc.LockDocument ... End Using 之间了,还是不行

 

效果一样,而且挺奇怪的。只要不添加图元就没事。一添加图元就挂掉,整个CAD停止响应,退出。

 楼主| 发表于 2010-9-5 10:34:00 | 显示全部楼层
又做了个简单的试验。
我把关于JIG的那段抛弃了,就留了个最简单的。就如下面这样的,同样报错,并退出CAD
  1. Private Sub Start(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2.      Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument
  3.          Using curDoc.LockDocument
  4.             Dim Dbase As Database = curDoc.Database
  5.             Dim Trans As Transaction = Dbase.TransactionManager.StartTransaction
  6.             Dim BlkTable As BlockTable = Trans.GetObject(Dbase.BlockTableId, OpenMode.ForRead, False)
  7.             Dim Mspace As BlockTableRecord = Trans.GetObject(BlkTable.Item(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
  8.             Dim Ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
  9.             Dim Complete As Boolean = False
  10.             Dim Ent As Entity
  11.                 Dim InputData As PromptPointResult = Ed.GetPoint()
  12.                 If InputData.Status = PromptStatus.OK Then
  13.                        Complete = True
  14.                 End If
  15.                 If Complete Then
  16.                         Dim Cr as new Circle(inputdata.value, new vector3d(0,0,1),10)
  17.                         Mspace.AppendEntity(Cr)
  18.                         Trans.AddNewlyCreatedDBObject(Cr, True)
  19.                         Trans.Commit()
  20.                         Trans.Dispose()
  21.                 End If
  22.        End Using
  23. End Sub
发表于 2010-9-5 10:36:00 | 显示全部楼层

逐步调试一下吧

应该是有哪里出现了空值的调用

 楼主| 发表于 2010-9-5 11:58:00 | 显示全部楼层

谢谢,问题找到了!

是事件函数搞的鬼!在程序添加图元的时候激发了事件函数,搞得transaction到处都是。。

发表于 2010-9-12 22:47:00 | 显示全部楼层
楼主是怎么解决的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 02:02 , Processed in 0.152769 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表