QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
11天前
查看: 6308|回复: 7
收起左侧

[已解决] 怎样修改属性块中的属性???

 关闭 [复制链接]
发表于 2008-7-7 09:10:22 | 显示全部楼层 |阅读模式 来自: 中国辽宁鞍山

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
怎样修改属性块中的属性???
9 ~1 l- b: v( N) x! V8 M1 l5 }因工作需要, 我想在程序中修改属性块的属性,新建、删除属性,修改属性的性质为“不可见”、“预设”等,如何实现???
发表于 2008-7-7 11:14:58 | 显示全部楼层 来自: 中国浙江金华
可以选择编辑块,然后进行修改,添加,或删除
发表于 2008-7-7 15:33:19 | 显示全部楼层 来自: 中国浙江宁波
那要看你用VBA或者是lisp编程工具了,工具不同方法也不相同;
 楼主| 发表于 2008-7-7 16:13:29 | 显示全部楼层 来自: 中国辽宁鞍山
我现在想采用LISP编程, 怎样解决?
! `* g1 I+ ~! V- }! E* Z2 v' CVBA在面向对象方便比LSP处理的好, 如果sealive_leafage 对此也了解,请一并告诉解决方法,谢谢
发表于 2008-7-7 22:04:08 | 显示全部楼层 来自: 中国浙江宁波
lisp可以尝试调用acad命令:-attedit来编辑属性;
% V# {& {; B$ a. C$ z可以试试下面的代码:
# K  q  O  B+ A; w5 T(defun c:test ()5 z- B7 b5 ]) ?# `  X) W+ h2 ]# t% |  ]
(vl-load-com)
( @! _0 t' E* g' w2 O' p- f" u(setq att (getstring "\nChange attribute [Angle/Color/Height/Layer/Position/Style/Value/Tagstring]: "))' f% Z8 G) `, W/ p0 ?
(setq obj (car (nentsel "\nSelect an Attribute: ")))+ m9 s$ K7 b/ u  Q) `& Y: j7 ?" Q% |
(setq obj (vlax-ename->vla-object obj))4 X1 i/ S; f/ Q9 k
(cond
# f+ c1 g$ W  {1 }3 d((= (strcase att) "A")+ {/ q1 g- V2 h' l/ C) X
(setq ang (getstring t "\nNew Angle: "))% w. |" w% B# k) S
(vlax-put-property obj 'rotation ang))
) f% d. l, Q  A/ r1 e: {0 q, O4 x((= (strcase att) "C")4 w  r1 C& z: I# ~  H
(setq col (getstring "\nNew Color Number: ")): ~' e: T- K( B( I. B" v- u
(vlax-put-property obj 'color col))+ b/ I9 P1 ^9 h! g
((= (strcase att) "H")
/ }7 z& l3 }! ]6 e(setq ohei (vlax-get-property obj 'height))
) `, z% O, p4 [- |: u3 m2 t(setq hei (getdist (strcat "\nNew Height <" (rtos oh 2 2) ">:")))
& N9 r; |# j; n" `1 H* V(if (= hei "")(setq hei ohei))
" K9 M0 p+ u* a8 z' i5 b9 G) @(vlax-put-property obj 'height hei))! I; ~3 r5 f  v2 w0 o4 V1 B
((= (strcase att) "L")) K" E. t' j9 \( J$ S5 `$ i- L
(setq lay (getstring "\nNew Layer:")): v, a3 m/ P- |4 i' b% T
(if (not (tblsearch "LAYER" lay))
% s0 t+ K. r& U, n(alert (strcat "\nLayer " (strcase lay) " doesn't exist!"))' Z/ `. Q& s( _. U" {8 o* ]
(vlax-put-property obj 'layer lay): a* d( E! U7 h
))2 m. q# }+ v4 g
((= (strcase att) "P")
# G, T/ V- I: c# C( T( T(setq pos (getpoint "\nNew Position:"))
$ F; k, ]4 M3 x! l/ C7 K2 E(vlax-put-property obj 'textalignmentpoint (vlax-3d-point pos)))' v7 g9 w1 X+ e1 v5 E6 T
((= (strcase att) "S"): L7 T  C# J5 k& ~, x
(setq sty (getstring "\nNew Style: "))/ Q: _1 ~6 O$ Z2 C6 j' f
(if (not (tblsearch "STYLE" sty))
( U5 e: B$ {/ M: M- E6 A8 \(alert (strcat "\nThe style " (strcase sty) " doesn't exist!"))
$ ^: t3 b; Q5 ?(vlax-put-property obj 'stylename sty)
/ E, P5 j  D( z5 N3 |))0 E" T; \& s3 Y: o0 F
((= (strcase att) "V")( |: A4 h( ~% Q; r5 h4 Z0 Q8 S5 {
(setq val (getstring t "\nNew value: "))
3 q& Q7 @+ E0 R9 i; @% H2 S(vlax-put-property obj 'textstring val))+ Q( J4 v! A. Z* {: ?2 m
);c% f) u% O- \. ~; k: p0 l$ I
(princ) 4 E0 \& |. J( }2 Q
);defun
1 g0 e- s/ h8 G" o, o4 j
VBA完成属性编辑相对来说操作更方便,VBA可以按下面的代码获得和编辑属性
3 c6 F1 H% J9 `. g' Get the attributes for the block reference6 {- H- F, O9 d2 b2 {/ R$ z+ D+ d
    Dim varAttributes As Variant  M4 D5 ]3 i, k. ?' Z. K8 l
    varAttributes = blockRefObj.GetAttributes
6 o2 _9 l. e8 C    # d8 F" e( h3 q) o) t- ]  y" r; J
    ' Move the attribute tags and values into a string to be displayed in a Msgbox: E# K- u5 i/ \4 E6 n6 i; B
    Dim strAttributes As String! g& H; L8 I' y
    Dim I As Integer
# Z$ L3 f7 Z# e8 h5 u$ L    For I = LBound(varAttributes) To UBound(varAttributes)
' C" t2 ?' o# D7 G& `        strAttributes = strAttributes & "  Tag: " & varAttributes(I).TagString & _0 I( _2 n; z, X9 c; y2 j) t
                        "   Value: " & varAttributes(I).textString & "    "
. f2 `& t3 V  n* ^1 @    Next! B- V$ M$ a% F8 z# {
    MsgBox "The attributes for blockReference " & blockRefObj.name & " are: " & strAttributes, , "GetAttributes Example"
( r  ?) I) U1 E9 B2 T4 F2 g+ j   
* K" Q8 [# C3 r* ?4 U    ' Change the value of the attribute
; R4 R* M  \: Y  W  _1 e1 f    ' Note: There is no SetAttributes. Once you have the variant array, you have the objects.
% I' E5 R7 g1 [" @0 \7 y2 @9 n    ' Changing them changes the objects in the drawing.
# J, s8 G3 K+ g6 j6 `" u7 Z4 F& S    varAttributes(0).textString = "NEW VALUE!"

评分

参与人数 1三维币 +10 收起 理由
wsj249201 + 10 技术讨论

查看全部评分

 楼主| 发表于 2008-7-8 10:35:22 | 显示全部楼层 来自: 中国辽宁鞍山
如果用VBA来实现的话, 该怎样做???VBA与LISP相比,在处理这类问题上哪个更容易实现??再次感谢楼上的2 {2 S* U) _, I2 G# G$ w* x+ C
2 x% R! q. X! a2 k5 n0 F
[ 本帖最后由 maoyangmy 于 2008-7-8 10:37 编辑 ]
 楼主| 发表于 2008-7-8 11:20:45 | 显示全部楼层 来自: 中国辽宁鞍山
5楼的能不能把VBA的解决方案也分享一下, 非常感谢
发表于 2008-7-14 22:24:59 | 显示全部楼层 来自: 中国天津
建议用VB弄,可以选择的项目比较多,控制性更好些。
# H' |! v. D( h  Q. s8 ~在CAD的帮助文件里有例子,可以参考,我当初就是利用那个例子实现的自动编号。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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