明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2264|回复: 8

[求助]请教版主:VBA删除实体XDATA属性值

[复制链接]
发表于 2009-10-30 14:37:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-11-5 14:53:42 编辑

请教高手:VBA删除实体XDATA属性值问题,下面是在明经网站搜到的,怎末删除不了南方CASS实体的属性值呢?有没有比下面的还好用的函数呢,谢谢!!!!!

'参数:
'Obj: 一个AcadObject?
'RegApp: 已经注册的应用名 (可选)'
'注意:
'1如果未指定应用名,则删除所有的扩展数据。
'2.该函数将不能删除AutoCAD本身的扩展数据
'示例:
'Call ClearXData(myAcadObject, "MCCAD")
'http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=298

 ublic Sub WJSZClearXdata(Obj As AcadObject, Optional RegApp As String = "")
    Const regAppKey As Integer = 1001
    Const acadApp As String = "ACAD"
   
    Dim XDType As Variant
    Dim XDData As Variant
    Dim NewType(0) As Integer
    Dim NewData(0) As Variant
    Dim i As Integer
   
    Obj.GetXData appName:=RegApp, xdatatype:=XDType, XDataValue:=XDData
   
    If Not IsEmpty(XDType) Then
        For i = LBound(XDType) To UBound(XDType)
            If XDType(i) = regAppKey Then
                If Not XDData(i) Like acadApp Then
                    NewType(0) = regAppKey
                    NewData(0) = XDData(i)
                    Obj.SetXData xdatatype:=NewType, XDataValue:=NewData
                End If
            End If
        Next i
    End If
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2009-11-2 06:57:00 | 显示全部楼层
没有人知道吗?
 楼主| 发表于 2009-11-2 16:59:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-3 7:13:20 编辑

这么多网友看了,没人回复吗,只能麻烦版主了,先谢谢了!!1
发表于 2009-11-3 11:20:00 | 显示全部楼层
关键在Call ClearXData(myAcadObject, "MCCAD")中的"MCCAD",也就是要改成南方CASS定义的程序名。
发表于 2009-11-3 20:15:00 | 显示全部楼层

原打算在绘图时添加些内容,但不知为何一直出错,正好借mycad兄的帖子,一事不烦2主了!

setname 的问题 是:提供的输入无效。请重新检查输入并重试。

我试过2个变量如dt(0 to 1)...,就通过了!

Sub SetName()
Dim Ent As AcadEntity, pt, dt(0 To 2) As Integer, Str(0 To 2)
dt(0) = 1001: dt(1) = 1002: dt(2) = 1003
With ThisDrawing.Utility
.GetEntity Ent, pt, "赋名对象:》"
Str(0) = "水线": Str(1) = "200sx": Str(2) = "30mm"
'Str(1) = .GetString(False, "对象名称:》")
'Str(2) = .GetString(False, "对象厚度:》")
End With
 
Ent.SetXData dt, Str
End Sub

getname 问题:直接报错及退出cad

Sub GetName()
Dim Ent As AcadEntity, pt, dt, Str, tep, Mystr$
ThisDrawing.Utility.GetEntity Ent, pt, "取值对象:》"
Ent.GetXData "", dt, Str
If VarType(Str) <> vbEmpty Then
For Each tep In Str
Mystr = Mystr & vbCrLf & tep
               
            Next
        End If
ThisDrawing.Utility.Prompt Mystr
End Sub

 楼主| 发表于 2009-11-4 16:35:00 | 显示全部楼层

dt(1) = 1002: dt(2) = 1003可能出问题了,应该为dt(1) = 1000: dt(2) = 1000;改后再试试看。


发表于 2009-11-5 09:42:00 | 显示全部楼层

谢谢,好像可以了

 楼主| 发表于 2009-11-5 14:55:00 | 显示全部楼层

上次上传数据没有成功,不好意思,现在有了

 楼主| 发表于 2009-11-6 07:49:00 | 显示全部楼层
解决了,找出成图软件的注册名,再删除xdata属性值就可以了,要注意成图软件的注册名可能有好几个的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 00:50 , Processed in 0.204293 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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