cadfan 发表于 2022-7-5 19:49:48

更改说明符的值

大家好!请帮忙。
 
 
1、选取尺寸(或手工输入):
2、选取尺寸(或手工输入):
3、选择尺寸(或手动输入)或完成:
4、选择属性块:(块名=统计)
 
 
然后,将TAG=“Dimensions”的“value”更改为value2*value2或Value1*value2*Value3
 
eg1:
1、拾取尺寸(或手动输入):45
2、拾取尺寸(或手动输入):30
3、拾取尺寸(或手动输入)或光洁度:15
4、选择属性块:(块名=统计)
5.TAG=“Dimensions”的“value”更改为45*30*15
 
eg2:
1、拾取尺寸(或手工输入):Φ20
2、拾取尺寸(或手工输入):100
3.选择尺寸(或手动输入)或完成:(完成)
4、选择属性块:(块名=统计)
5.TAG=“Dimensions”的“value”变为Φ20*100

wkplan 发表于 2022-7-5 19:54:00

对于属性修改:
http://www.lee-mac.com/attributefunctions.html
读取尺寸值:
http://www.theswamp.org/index.php?topic=32263.0
 
HTH公司
沃尔夫冈

cadfan 发表于 2022-7-5 19:57:21

谢谢你的计划
 
 
OP无需计算。。。
 
 
 
这很有用。但我不会编码。刚刚开始学习lisp。

BIGAL 发表于 2022-7-5 19:59:56

试试这个,你输入3个值,它会要求你的属性的位置,比如说你有10个,如果你输入5,它会以这种方式更改第5个属性值,这是一个全局编辑器,而不是用属性标记硬编码
 
; Change attribute value by created position
(vl-load-com)
(setq ans1 (getstring "\nEntervalue1" ))
(setq ans2 (getstring "\nEntervalue2"))
(setq ans3 (getstring "\nEntervalue3" ))
(setq y 1)
(setq ss1 (car (entsel)))
(setq bname (vla-get-name(vlax-ename->vla-object SS1)))

(setq x (getint "\nEnter attribute position order as a Number "))
(SETQ newstrblank (strcat ans1 "*" ans2 "*" ans3)) ;
(foreach att (vlax-invoke (vlax-ename->vla-object SS1) 'getattributes)
   (if (= y x)
   (progn
   (setq newstr (vla-get-textstring att ))
   (vla-put-textstring att newstrblank)
   )
   )
   (setq y (+ Y 1))
)
(princ)

cadfan 发表于 2022-7-5 20:05:54

谢谢BIGAL
无法选择维度,“输入要选择的行”是什么意思?

BIGAL 发表于 2022-7-5 20:09:26

我刚才用手动方式做了一个例子,拾取一个dim或输入一个值是两件不同的事情,如果你看任何有几个属性的块,双击它,编辑拨号将始终按属性创建的顺序出现,唯一的区别是它将转到你拾取的属性。行号请求我将更改上面代码中的文字。
 
试一下,只需输入一个比您可以使用不同数字在同一块上运行它的属性总数少的数字。
 
重新拾取dim或输入值不确定可能需要拾取,如果其为零,即未拾取任何内容,则输入值,有人不确定您是否可以在一个请求下同时执行这两个操作?
 
;this is not finished but rather a method need a bit of time to put it all together.
(defun pullapart ()
(setq val (vla-get-Measurement (vlax-ename->vla-object(car obj))))
)

(defun pickobj ()
(setq obj (entsel "\nPick a object"))
(if (= obj nil)
(setq Val (getstring "Enter Value"))
(pullapart) ; a defun that checks for a "DIM" and returns val=measurement
)
)
;see code above goes here

Tharwat 发表于 2022-7-5 20:11:07

像这样的?
 

(defun c:Test (/ s lst b l st)
;;;        Tharwat 30.042015        ;;;
(princ "\nPick on Dimension :")
(while (setq s (ssget "_+.:S:E" '((0 . "*DIMENSION"))))
   (setq lst (cons (ssname s 0) lst))
)
(if
   (and (>= (length lst) 2)
      (princ
          "\nNow select attributed Blocks that titled < statistics >"
      )
      (setq
          b (ssget "_:L" '((0 . "INSERT") (2 . "statistics") (66 . 1)))
      )
   )
    (progn
      (mapcar '(lambda (e)
               (if (/= (setq v (cdr (assoc 1 (entget e)))) "")
                   (setq l (cons v l))
                   (setq l (cons (rtos (cdr (assoc 42 (entget e))) 2) l))
               )
               )
            lst
      )
      (setq
      st (vl-string-right-trim
             "*"
             (apply 'strcat (mapcar '(lambda (o) (strcat o "*")) l))
         )
      )
      ((lambda (x / sn)
         (while (setq sn (ssname b (setq x (1+ x))))
         (mapcar
             '(lambda (a)
                (if (eq (strcase (vla-get-tagstring a)) "DIMENSION")
                  (vla-put-textstring a st)
                )
            )
             (vlax-invoke (vlax-ename->vla-object sn) 'getattributes)
         )
         )
       )
      -1
      )
    )
)
(princ)
)(vl-load-com)

cadfan 发表于 2022-7-5 20:14:10

嗨,比格尔,谢谢,我是一个Lisp程序的新手,我想我需要一些时间来理解。

cadfan 发表于 2022-7-5 20:17:04

 
非常感谢Tharwat。这很好。但是,有点缺陷。
 
1.如果我选择直径,最终结果是没有“Φ,Ø”
2、无法输入值。
3.选择尺寸时,不提示。

Tharwat 发表于 2022-7-5 20:22:26

试试这个:
 

(defun c:Test (/ s lst b l st)
;;;    Tharwat 30.042015    ;;;
(princ "\nSelect Dimensions :")
(if
   (and (setq s (ssget "_:L" '((0 . "*DIMENSION"))))
      (setq st (getstring "\n Specify a value :"))
      (princ
          "\nNow select attributed Blocks that titled < statistics >"
      )
      (setq
          b (ssget "_:L" '((0 . "INSERT") (2 . "statistics") (66 . 1)))
      )
   )
    (progn
      (if (and st (/= st ""))
      (setq l (cons st l))
      )
      ((lambda (i / sn e v)
         (while (setq e (ssname s (setq i (1+ i))))
         (if (/= (setq v (cdr (assoc 1 (entget e)))) "")
             (setq l (cons v l))
             (setq l (cons (rtos (cdr (assoc 42 (entget e))) 2) l))
         )
         )
         lst
       )
      -1
      )
      (setq
      st (vl-string-right-trim
             "*"
             (apply 'strcat (mapcar '(lambda (o) (strcat o "*")) l))
         )
      )
      ((lambda (x / sn)
         (while (setq sn (ssname b (setq x (1+ x))))
         (mapcar
             '(lambda (a)
                (if (eq (strcase (vla-get-tagstring a)) "DIMENSION")
                  (vla-put-textstring a st)
                )
            )
             (vlax-invoke (vlax-ename->vla-object sn) 'getattributes)
         )
         )
       )
      -1
      )
    )
)
(princ)
)(vl-load-com)
页: [1] 2
查看完整版本: 更改说明符的值