明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4118|回复: 12

[求助]急求高手帮忙!!!

  [复制链接]
发表于 2006-11-22 08:08:00 | 显示全部楼层 |阅读模式

下面是我根据数据库图元信息在cad里绘制图形时根据表里字段添加扩展数据的vba代码.发现一个很奇怪的问题:如果我按f8一步一步的执行的话就能达到我的要求,如果我按f5执行的话扩展数据就好象没写进去,请大家帮我看看问题出在哪!
Private Sub tjkzsj(cadid, dwname, tc) '将新增的图元添加上扩展数据
wj = "d:\a.txt"
Open wj For Append As #1
Dim ty As AcadEntity
Dim layer As AcadLayer
Set layer = ThisDrawing.Layers.Add(tc)

Dim ssget As AcadSelectionSet

'If Not IsNull(ThisDrawing.SelectionSets.Item("xzj")) Then
 'Set ssget = ThisDrawing.SelectionSets.Item("xzj")
 'ssget.Delete
上面这段总是提示找不到主键!!!!
'End If
Set ssget = ThisDrawing.SelectionSets.Add("xzj")
ssget.Select acSelectionSetLast
For Each ty In ssget
ty.layer = tc
ty.Update
Dim datatype(0 To 7) As Integer
Dim data(0 To 7) As Variant
datatype(0) = 1001: data(0) = "xdata"
datatype(1) = 1000: data(1) = dwname
datatype(2) = 1003: data(2) = "0"
datatype(3) = 1040: data(3) = 1.232
datatype(4) = 1041: data(4) = cadid
datatype(5) = 1070: data(5) = 5656
datatype(6) = 1071: data(6) = 32332
datatype(7) = 1042: data(7) = 10
ty.SetXData datatype, data
Dim xtype As Variant
Dim xdata As Variant
ty.GetXData "", xtpye, xdata
Write #1, tc, xdata(4);从这里生成的数据不对.
Next ty
'Write #1, tc, xdata(4)
Close #1
'kckzsj ty
ssget.Delete
End Sub

发表于 2006-11-22 08:52:00 | 显示全部楼层

1,找不到主键!!!!-----前加 on error resume next

2,ty.SetXData datatype, data后加语句:ThisDrawing.Application.Update

 楼主| 发表于 2006-11-22 11:07:00 | 显示全部楼层

请问楼上的朋友:ssget怎么总是空的.?我已经在cad里画好图形了呀!怎么选择不上呢?

发表于 2006-11-23 08:29:00 | 显示全部楼层
ssget.Select acSelectionSetLast
说明该语句没有起作用,换成窗选ssget.SelectOnScreen
发表于 2006-11-23 10:11:00 | 显示全部楼层

若我,可能会改为把最近加入图形空间的对象存入一个集合变量,然后用ADDITEM方法把其加入选择集.

用acSelectionSetLast是要相信CAD的选择不会出错,我的原择,求人不如求己.

个人想法.

另外,你说F8结果正确,F5就出错,可能是哪步利用CAD内部功能执行时是产生了一个CAD的内部线程,当其返回值时,你的代码已进行到下一步,可在适当位置写入一个延时函数看看.

 楼主| 发表于 2006-11-23 12:02:00 | 显示全部楼层

谢谢朋友们!我回去试试

 楼主| 发表于 2006-11-24 11:08:00 | 显示全部楼层

iq0050朋友:还是读取不了图元

发表于 2006-11-24 14:49:00 | 显示全部楼层

看了你另一篇帖子,只从代码上看,确实看不出什么问题.想调你的代码,但要建立的东西实在太多.读了那篇,感觉主要问题是出在MODELSPACE的COUNT属性上,若COUNT值大于0,你的acSelecttionSetLast就能够取到值了.

若我进行调试,要确定一下,在从数据库中读取数据后,加入图元时,MODELSPACE的COUNT的属性是如何变化的.若这时就为空,用一下UPDATE看看有没有变化.

感觉上,一定是加入图元后MODEL的COUNT就一直为空.要在这上想办法.和你的选择集的语句该没关.

没法进行调试,只能凭猜测.如果调试成功了,告诉一下问题出在哪了,大家共享一下.

 楼主| 发表于 2006-11-24 17:15:00 | 显示全部楼层
我从库里调出一个数据,然后在cad里生成图形,再将库里主键的值加到扩展数据里.我明明是生成图形了的,怎么值还是0呢?是不是cad里生成图形要一段时间才分配数据给图元?
发表于 2006-11-24 19:18:00 | 显示全部楼层

我用VBA试了一下,直接发出SENDCOMMOND命令画线,MODELSPACE的COUNT的值会马上得到更新.只能是你的两个函数所指向的THISDRAWING不是同一图形了.你在两个函数都设置一下断点,看看两个函数的THISDRAWING的所有属性是否相同(同一对象).如果是,可能是你两函数中间执行了其它一些函数更改了THISDRAWING的一些值.在每一个执行的函数中设置断点,看THISDRAWING的变化有可能找到错误点.

 

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

本版积分规则

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

GMT+8, 2024-11-25 15:27 , Processed in 0.195362 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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