QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
8天前
查看: 6345|回复: 7
收起左侧

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

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

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

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

x
怎样修改属性块中的属性???% p' j2 m1 `1 A! _, L
因工作需要, 我想在程序中修改属性块的属性,新建、删除属性,修改属性的性质为“不可见”、“预设”等,如何实现???
发表于 2008-7-7 11:14:58 | 显示全部楼层 来自: 中国浙江金华
可以选择编辑块,然后进行修改,添加,或删除
发表于 2008-7-7 15:33:19 | 显示全部楼层 来自: 中国浙江宁波
那要看你用VBA或者是lisp编程工具了,工具不同方法也不相同;
 楼主| 发表于 2008-7-7 16:13:29 | 显示全部楼层 来自: 中国辽宁鞍山
我现在想采用LISP编程, 怎样解决?4 D) D# N7 a- q8 F# J
VBA在面向对象方便比LSP处理的好, 如果sealive_leafage 对此也了解,请一并告诉解决方法,谢谢
发表于 2008-7-7 22:04:08 | 显示全部楼层 来自: 中国浙江宁波
lisp可以尝试调用acad命令:-attedit来编辑属性;& ]1 B' w* a% U: F# W
可以试试下面的代码:7 b$ ^: Z( q4 K. h
(defun c:test ()
" \; d5 J- ^3 }( X, x(vl-load-com)0 J" U& h5 x. j
(setq att (getstring "\nChange attribute [Angle/Color/Height/Layer/Position/Style/Value/Tagstring]: "))- E) w0 \; Z8 y1 T& T, K
(setq obj (car (nentsel "\nSelect an Attribute: ")))& V0 c$ P$ ?* p- m& k, v: Q1 ]# v! [4 z
(setq obj (vlax-ename->vla-object obj))# p2 }  [  `( f% I+ z
(cond
2 K) d: [% T- U3 V# g2 }/ }0 T" q((= (strcase att) "A")5 k& J7 m* |& V: R- c+ }
(setq ang (getstring t "\nNew Angle: "))
. w! p5 F, q# m4 i5 I4 G4 A(vlax-put-property obj 'rotation ang))
$ w- E2 Q! a2 C) ]((= (strcase att) "C")" o6 I* c3 f/ F2 w% u4 ^
(setq col (getstring "\nNew Color Number: "))
" S! u% S$ T( I  l9 C% A(vlax-put-property obj 'color col))7 \  m% v' ?7 R9 B2 V
((= (strcase att) "H")
6 I+ s/ u" u) K8 o(setq ohei (vlax-get-property obj 'height))
+ q+ j0 m+ j8 ?. s+ k5 K8 z(setq hei (getdist (strcat "\nNew Height <" (rtos oh 2 2) ">:")))- \) S. `. T$ S  x( `" r
(if (= hei "")(setq hei ohei))( r! ^- C6 q" e# p2 a( D, T' Q
(vlax-put-property obj 'height hei)): F! g4 S9 Q7 M3 Q
((= (strcase att) "L")
& ^' D& J9 a) e# v  i(setq lay (getstring "\nNew Layer:"))
* M5 |$ Y: A8 q# i# ](if (not (tblsearch "LAYER" lay))' L3 [/ R/ i0 w8 W; W
(alert (strcat "\nLayer " (strcase lay) " doesn't exist!"))  d/ e3 {' |+ q2 i5 y* w
(vlax-put-property obj 'layer lay)
+ ]! X+ }$ V1 V  {0 N))/ J/ R' N1 m# U( S
((= (strcase att) "P")2 t) k  c4 j' l% w
(setq pos (getpoint "\nNew Position:"))
4 m  s. @5 m- V- o7 K(vlax-put-property obj 'textalignmentpoint (vlax-3d-point pos)))7 }* A7 N+ [5 w% E) I8 v
((= (strcase att) "S")
$ e4 g, \! M; S8 u(setq sty (getstring "\nNew Style: "))
( q# D( M* u$ o(if (not (tblsearch "STYLE" sty))
' j7 |3 v4 g+ P# {+ z(alert (strcat "\nThe style " (strcase sty) " doesn't exist!"))
% `4 S0 e# N6 A( b(vlax-put-property obj 'stylename sty)( p! a0 l' C0 h# |  a
))
, P4 v  U% T) n((= (strcase att) "V")$ e" H( T- P; }$ [$ m, c; H1 y
(setq val (getstring t "\nNew value: "))6 x* V% f% x6 g4 t1 w' c
(vlax-put-property obj 'textstring val))8 l) a" r6 v0 i
);c# p& i7 ?0 l3 u% b  D
(princ) ; e) z# [6 X1 l) I& z3 n% ~& [
);defun

. L* ^+ C) n" {$ D) y1 |& u8 RVBA完成属性编辑相对来说操作更方便,VBA可以按下面的代码获得和编辑属性$ l( v( M( I  |1 }( I
' Get the attributes for the block reference  [$ R4 ?! @2 Y$ K+ Y
    Dim varAttributes As Variant
+ k7 ]) Y( K: t* _    varAttributes = blockRefObj.GetAttributes
# o- ?! o+ M/ r    9 M/ H$ M( x' X0 M  Z7 t3 F# I* U  S
    ' Move the attribute tags and values into a string to be displayed in a Msgbox
* H$ N, b  I$ `, N; t/ }/ ?  t    Dim strAttributes As String7 T! a% A5 J4 W9 r* l1 E
    Dim I As Integer
$ s/ _! |. f, x( \8 O2 o) {) G    For I = LBound(varAttributes) To UBound(varAttributes)
" _- v9 O" W4 A' M3 b3 q        strAttributes = strAttributes & "  Tag: " & varAttributes(I).TagString & _
8 l3 C: p( {, I                        "   Value: " & varAttributes(I).textString & "    "
3 P, K1 Z0 z# T- c* I    Next9 [  U( o, ?$ @, j7 i& `% w1 P" Y
    MsgBox "The attributes for blockReference " & blockRefObj.name & " are: " & strAttributes, , "GetAttributes Example"
( A4 v" }! ?  R2 L( a3 R% n, z/ N   
" m2 `  p' ~: X) `! q: l- Y    ' Change the value of the attribute
  W# i' |' k) c: N% P    ' Note: There is no SetAttributes. Once you have the variant array, you have the objects.
. w- I7 b4 I0 p1 N/ N    ' Changing them changes the objects in the drawing." c7 t. n8 b+ Z1 B& x
    varAttributes(0).textString = "NEW VALUE!"

评分

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

查看全部评分

 楼主| 发表于 2008-7-8 10:35:22 | 显示全部楼层 来自: 中国辽宁鞍山
如果用VBA来实现的话, 该怎样做???VBA与LISP相比,在处理这类问题上哪个更容易实现??再次感谢楼上的0 \/ P# n8 b( J2 N  ?

, h: @* e- m8 T3 L$ K[ 本帖最后由 maoyangmy 于 2008-7-8 10:37 编辑 ]
 楼主| 发表于 2008-7-8 11:20:45 | 显示全部楼层 来自: 中国辽宁鞍山
5楼的能不能把VBA的解决方案也分享一下, 非常感谢
发表于 2008-7-14 22:24:59 | 显示全部楼层 来自: 中国天津
建议用VB弄,可以选择的项目比较多,控制性更好些。3 z9 W* R4 v1 U1 d
在CAD的帮助文件里有例子,可以参考,我当初就是利用那个例子实现的自动编号。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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