tanhaotian 发表于 2004-7-31 14:08:00

求助斑竹:清华天河中修改明细表块参照属性一问

我用GetAttributes获得函数后,将其中的块参照的TextString属性修改了,可在图中看到改变后的结果,但是当我把明细表刷新或重新生成明细表后,TextString属性又改回去了

雪山飞狐_lzh 发表于 2004-7-31 22:34:00

看看你的代码?


重新生成明细表当然不会修改了,TextString是针对不同的块参照有不同的值


另外,你定义的属性是固定属性?

tanhaotian 发表于 2004-8-2 14:41:00

代码如下:


Sub rename()<BR>'定义变量<BR>Dim elem As Object '定义一个对象<BR>Dim varAttributes As Variant '定义一个属性变量<BR>Dim OldName As String<BR>Dim NewName As String<BR>Dim CgName As String<BR>Dim L As Integer<BR>Dim LL As Integer<BR>Dim LLL As Integer<BR>Dim number As Integer<BR>Dim I As Integer<BR>Dim found As Boolean<BR>Static sset As AcadSelectionSet<BR>Dim sss1 As AcadSelectionSet<BR>Dim ObjSelectionSet As AcadSelectionSet<BR>found = False<BR>I = 0<BR>'获取当前文件名<BR>NewName = ThisDrawing.Name<BR>L = Len(NewName)<BR>NewName = Left(NewName, L - 4)<BR>'获取当前文档标题栏中的图号<BR>On Error Resume Next<BR>Dim fft(1) As Integer, ffd(1)<BR>ThisDrawing.SelectionSets("ss").Delete<BR>Set sset = ThisDrawing.SelectionSets.Add("ss")<BR>fft(0) = 0: ffd(0) = "Insert"<BR>fft(1) = 2: ffd(1) = "PC_TITLE_BLOCK"<BR>sset.Select acSelectionSetAll, , , fft, ffd<BR>varAttributes = sset.Item(0).GetAttributes<BR>OldName = varAttributes(4).TextString<BR>'选择明细表<BR>On Error Resume Next<BR>Dim ss1 As AcadSelectionSet<BR>Dim ft(1) As Integer, fd(1)<BR>ThisDrawing.SelectionSets("*TlsTest*").Delete<BR>Set ss1 = ThisDrawing.SelectionSets.Add("*TlsTest*")<BR>ft(0) = 0: fd(0) = "Insert"<BR>ft(1) = 2: fd(1) = "PC_MXB_BLOCK"<BR>ss1.Select acSelectionSetAll, , , ft, fd<BR>'修改明细表和标题<BR>For Each elem In ss1<BR>               varAttributes = elem.GetAttributes<BR>               <BR>               CgName = varAttributes(1).TextString<BR>               L = Len(NewName)<BR>               LL = Len(OldName)<BR>               LLL = Len(CgName)<BR>               If OldName = Left(CgName, LL) Then<BR>                       CgName = Right(CgName, LLL - LL)<BR>                       CgName = NewName &amp; CgName<BR>                       varAttributes(1).TextString = CgName<BR>                       elem.Update<BR>               End If<BR>Next<BR>For Each elem In sset<BR>                               varAttributes = elem.GetAttributes<BR>                               varAttributes(4).TextString = NewName<BR>Next<BR>'删除标题栏和明细表选择集<BR>ThisDrawing.SelectionSets("*TlsTest*").Delete<BR>ThisDrawing.SelectionSets("ss").Delete<BR>End Sub


<BR>举例说明一下该代码主要目的:


有一dwg文件,文件保存为ZJ40DBST,则文件的图样代号也为ZJ40DBST,明细表中代号也以ZJ40DBST开头来排序,但当我想把ZJ40DBST改为ZJ70LDB时,只需改一下保存的文件名,然后打开ZJ70LDB文件,运行上面的代码即可,但修改是针对天河PCCAD2002所写代码,故需在PCCAD2002下才能发现该情况,谢谢!

雪山飞狐_lzh 发表于 2004-8-2 14:56:00

是天河PCCAD2002自动把属性又改回去了?


如果是的话就不好办了

tanhaotian 发表于 2004-8-3 12:04:00

你说的对,我用上面的代码虽然能改明细表,也能看到修改的结果,但用天河的明细表刷新,数据就又改回去了,我不知道天河把数据存在什么地方(但绝对在图中,不会另外存一处,我做过实验)

tanhaotian 发表于 2004-8-4 11:38:00

怎么解决,请斑竹帮忙想想办法呀!

phgcad 发表于 2004-8-25 17:40:00

天河将标题栏和明细表的数据存放在数据库中,所以当你用天河的工具打开时,它会自动恢复到原来的样子.这样你只更改属性块中的属性是不行的.

tanhaotian 发表于 2004-8-30 18:17:00

那又怎么解决数据库的问题,请提示,谢谢

phgcad 发表于 2004-8-31 11:56:00

这个最好是向天河公司咨询了.


我改INTECAD就是这样,更麻烦.国产的开发商故意把那些属性搞得很罗嗦,让别人无法集成.真是悲哀呀.以后市场只有越来越小.

tanhaotian 发表于 2004-9-1 16:07:00

谢谢你,不过我用的是D版,不好去咨询,如果你有了解决办法。麻烦告诉我一声。
页: [1] 2
查看完整版本: 求助斑竹:清华天河中修改明细表块参照属性一问