乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 84|回复: 18

[编程交流] 更改说明符的值

[复制链接]

5

主题

31

帖子

26

银币

初来乍到

Rank: 1

铜币
26
发表于 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
回复

使用道具 举报

4

主题

68

帖子

69

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:54:00 | 显示全部楼层
对于属性修改:
http://www.lee-mac.com/attributefunctions.html
读取尺寸值:
http://www.theswamp.org/index.php?topic=32263.0
 
HTH公司
沃尔夫冈
回复

使用道具 举报

5

主题

31

帖子

26

银币

初来乍到

Rank: 1

铜币
26
发表于 2022-7-5 19:57:21 | 显示全部楼层
谢谢你的计划
 
 
OP无需计算。。。
 
 
 
这很有用。但我不会编码。刚刚开始学习lisp。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:59:56 | 显示全部楼层
试试这个,你输入3个值,它会要求你的属性的位置,比如说你有10个,如果你输入5,它会以这种方式更改第5个属性值,这是一个全局编辑器,而不是用属性标记硬编码
 
  1. ; Change attribute value by created position
  2. (vl-load-com)
  3. (setq ans1 (getstring "\nEntervalue1" ))
  4. (setq ans2 (getstring "\nEntervalue2"))
  5. (setq ans3 (getstring "\nEntervalue3" ))
  6. (setq y 1)
  7. (setq ss1 (car (entsel)))
  8. (setq bname (vla-get-name(vlax-ename->vla-object SS1)))
  9. (setq x (getint "\nEnter attribute position order as a Number "))
  10. (SETQ newstrblank (strcat ans1 "*" ans2 "*" ans3)) ;
  11. (foreach att (vlax-invoke (vlax-ename->vla-object SS1) 'getattributes)
  12.    (if (= y x)
  13.    (progn
  14.    (setq newstr (vla-get-textstring att ))
  15.    (vla-put-textstring att newstrblank)
  16.    )
  17.    )
  18.    (setq y (+ Y 1))
  19. )
  20. (princ)
回复

使用道具 举报

5

主题

31

帖子

26

银币

初来乍到

Rank: 1

铜币
26
发表于 2022-7-5 20:05:54 | 显示全部楼层
谢谢BIGAL
无法选择维度,“输入要选择的行”是什么意思?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:09:26 | 显示全部楼层
我刚才用手动方式做了一个例子,拾取一个dim或输入一个值是两件不同的事情,如果你看任何有几个属性的块,双击它,编辑拨号将始终按属性创建的顺序出现,唯一的区别是它将转到你拾取的属性。行号请求我将更改上面代码中的文字。
 
试一下,只需输入一个比您可以使用不同数字在同一块上运行它的属性总数少的数字。
 
重新拾取dim或输入值不确定可能需要拾取,如果其为零,即未拾取任何内容,则输入值,有人不确定您是否可以在一个请求下同时执行这两个操作?
 
  1. ;this is not finished but rather a method need a bit of time to put it all together.
  2. (defun pullapart ()
  3. (setq val (vla-get-Measurement (vlax-ename->vla-object(car obj))))
  4. )
  5. (defun pickobj ()
  6. (setq obj (entsel "\nPick a object"))
  7. (if (= obj nil)
  8. (setq Val (getstring "Enter Value"))
  9. (pullapart) ; a defun that checks for a "DIM" and returns val=measurement
  10. )
  11. )
  12. ;see code above goes here
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:11:07 | 显示全部楼层
像这样的?
 
  1. (defun c:Test (/ s lst b l st)
  2. ;;;        Tharwat 30.042015        ;;;
  3. (princ "\nPick on Dimension :")
  4. (while (setq s (ssget "_+.:S:E" '((0 . "*DIMENSION"))))
  5.    (setq lst (cons (ssname s 0) lst))
  6. )
  7. (if
  8.    (and (>= (length lst) 2)
  9.         (princ
  10.           "\nNow select attributed Blocks that titled < statistics >"
  11.         )
  12.         (setq
  13.           b (ssget "_:L" '((0 . "INSERT") (2 . "statistics") (66 . 1)))
  14.         )
  15.    )
  16.     (progn
  17.       (mapcar '(lambda (e)
  18.                  (if (/= (setq v (cdr (assoc 1 (entget e)))) "")
  19.                    (setq l (cons v l))
  20.                    (setq l (cons (rtos (cdr (assoc 42 (entget e))) 2) l))
  21.                  )
  22.                )
  23.               lst
  24.       )
  25.       (setq
  26.         st (vl-string-right-trim
  27.              "*"
  28.              (apply 'strcat (mapcar '(lambda (o) (strcat o "*")) l))
  29.            )
  30.       )
  31.       ((lambda (x / sn)
  32.          (while (setq sn (ssname b (setq x (1+ x))))
  33.            (mapcar
  34.              '(lambda (a)
  35.                 (if (eq (strcase (vla-get-tagstring a)) "DIMENSION")
  36.                   (vla-put-textstring a st)
  37.                 )
  38.               )
  39.              (vlax-invoke (vlax-ename->vla-object sn) 'getattributes)
  40.            )
  41.          )
  42.        )
  43.         -1
  44.       )
  45.     )
  46. )
  47. (princ)
  48. )(vl-load-com)
回复

使用道具 举报

5

主题

31

帖子

26

银币

初来乍到

Rank: 1

铜币
26
发表于 2022-7-5 20:14:10 | 显示全部楼层
嗨,比格尔,谢谢,我是一个Lisp程序的新手,我想我需要一些时间来理解。
回复

使用道具 举报

5

主题

31

帖子

26

银币

初来乍到

Rank: 1

铜币
26
发表于 2022-7-5 20:17:04 | 显示全部楼层
 
非常感谢Tharwat。这很好。但是,有点缺陷。
 
1.如果我选择直径,最终结果是没有“Φ,Ø”
2、无法输入值。
3.选择尺寸时,不提示。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:22:26 | 显示全部楼层
试试这个:
 
  1. (defun c:Test (/ s lst b l st)
  2. ;;;    Tharwat 30.042015    ;;;
  3. (princ "\nSelect Dimensions :")
  4. (if
  5.    (and (setq s (ssget "_:L" '((0 . "*DIMENSION"))))
  6.         (setq st (getstring "\n Specify a value [enter to Exit] :"))
  7.         (princ
  8.           "\nNow select attributed Blocks that titled < statistics >"
  9.         )
  10.         (setq
  11.           b (ssget "_:L" '((0 . "INSERT") (2 . "statistics") (66 . 1)))
  12.         )
  13.    )
  14.     (progn
  15.       (if (and st (/= st ""))
  16.         (setq l (cons st l))
  17.       )
  18.       ((lambda (i / sn e v)
  19.          (while (setq e (ssname s (setq i (1+ i))))
  20.            (if (/= (setq v (cdr (assoc 1 (entget e)))) "")
  21.              (setq l (cons v l))
  22.              (setq l (cons (rtos (cdr (assoc 42 (entget e))) 2) l))
  23.            )
  24.          )
  25.          lst
  26.        )
  27.         -1
  28.       )
  29.       (setq
  30.         st (vl-string-right-trim
  31.              "*"
  32.              (apply 'strcat (mapcar '(lambda (o) (strcat o "*")) l))
  33.            )
  34.       )
  35.       ((lambda (x / sn)
  36.          (while (setq sn (ssname b (setq x (1+ x))))
  37.            (mapcar
  38.              '(lambda (a)
  39.                 (if (eq (strcase (vla-get-tagstring a)) "DIMENSION")
  40.                   (vla-put-textstring a st)
  41.                 )
  42.               )
  43.              (vlax-invoke (vlax-ename->vla-object sn) 'getattributes)
  44.            )
  45.          )
  46.        )
  47.         -1
  48.       )
  49.     )
  50. )
  51. (princ)
  52. )(vl-load-com)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:43 , Processed in 0.871415 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表