乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 6

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

[复制链接]

14

主题

36

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 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
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-9-5 10:09:00 | 显示全部楼层
Using curDoc.LockDocument
放在第一句试试
回复

使用道具 举报

14

主题

36

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 2010-9-5 10:24:00 | 显示全部楼层
我把Start函数下面,除了Dim curDoc As Document = Application.DocumentManager.MdiActiveDocument
这句外的代码全放到Using curDoc.LockDocument ... End Using 之间了,还是不行

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

使用道具 举报

14

主题

36

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 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
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-9-5 10:36:00 | 显示全部楼层
逐步调试一下吧
应该是有哪里出现了空值的调用
回复

使用道具 举报

14

主题

36

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 2010-9-5 11:58:00 | 显示全部楼层
谢谢,问题找到了!
是事件函数搞的鬼!在程序添加图元的时候激发了事件函数,搞得transaction到处都是。。
回复

使用道具 举报

17

主题

69

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2010-9-12 22:47:00 | 显示全部楼层
楼主是怎么解决的呢?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 08:39 , Processed in 1.386462 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表