乐筑天下

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

[编程交流] 获取dyn的可视状态

[复制链接]

18

主题

78

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 07:04:10 | 显示全部楼层 |阅读模式
我有一个lisp可以改变块的可视状态,但我需要一个lisp,它可以做一些类似于描述的事情:
 
如果
可视性状态=输入1
将可视性状态设置为INPUT2
 
  1. (defun c:set1 (/ ss ans i blk dp scale)
  2. (if (and (setq ss (ssget "_:L" '((0 . "INSERT"))))
  3.      (not (initget 1 "1:1 1:2 1:2.5 1:5 1:10 1:20 1:25 1:50 1:100 1:200 1:250 1:500 1:1000 1:2000 1:2500 1:5000 1:50000 "))
  4.   (setq ans (getkword "\nChoose Visibility [1:1/1:2/1:2.5/1:5/1:10/1:20/1:25/1:50/1:100/1:200/1:250/1:500/1:1000/1:2000/1:2500/1:5000/1:50000]: ")
  5.    ))
  6.   
  7. (repeat (setq i (sslength ss))  
  8.     (setq blk (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  9.     (cond (and
  10.       (eq (vla-get-IsDynamicBlock blk) :vlax-true)
  11.              (setq dp (car
  12.         (vl-remove-if-not
  13.           '(lambda (k)
  14.       (eq
  15.         (vla-get-PropertyName
  16.           k
  17.         )
  18.         "RMS_SCALE_VIS"
  19.       )
  20.            )
  21.           (vlax-invoke
  22.      blk
  23.      'GetDynamicBlockProperties
  24.           )
  25.         )
  26.       )
  27.       )
  28.          (if (eq ans "1:1") (setq scale "RTA_SCALE_1"))
  29.                 (if (eq ans "1:2") (setq scale "RTA_SCALE_2"))
  30.          (if (eq ans "1:2.5") (setq scale "RTA_SCALE_2.5"))
  31.          (if (eq ans "1:5") (setq scale "RTA_SCALE_5"))
  32.          (if (eq ans "1:10") (setq scale "RTA_SCALE_10"))
  33.          (if (eq ans "1:20") (setq scale "RTA_SCALE_20"))
  34.          (if (eq ans "1:25") (setq scale "RTA_SCALE_25"))
  35.          (if (eq ans "1:50") (setq scale "RTA_SCALE_50"))
  36.          (if (eq ans "1:100") (setq scale "RTA_SCALE_100"))
  37.          (if (eq ans "1:200") (setq scale "RTA_SCALE_200"))
  38.          (if (eq ans "1:500") (setq scale "RTA_SCALE_500"))
  39.          (if (eq ans "1:1000") (setq scale "RTA_SCALE_1000"))
  40.          (if (eq ans "1:2000") (setq scale "RTA_SCALE_2000"))
  41.          (if (eq ans "1:2500") (setq scale "RTA_SCALE_2500"))
  42.          (if (eq ans "1:5000") (setq scale "RTA_SCALE_5000"))
  43.          (if (eq ans "1:50000") (setq scale "RTA_SCALE_50000"))
  44.           (vlax-put dp 'Value scale)
  45.           )
  46.         )
  47.    )
  48. )
  49. )
  50. (princ)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:10:34 | 显示全部楼层
  1. (vlax-put dp 'Value (strcat "RTA_SCALE_" (substr ans 3)))

 
更好了
 
  1. (member (setq scale (strcat "RTA_SCALE_" (substr ans 3))) (vlax-get dp 'AllowedValues))
  2.         (vlax-put dp 'Value scale)
  3.          

 
HTH公司
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:15:17 | 显示全部楼层
 
你描述的内容很容易编码。最好在ssget过滤器上包含特定的动态块名。
所以我会这样玩:
 
选择块
检索动态特性
获取允许值的列表
选择“what is”
选择“what will”
更改可见性
 
编辑:像这样
 
  1. (defun c:repv (/ _dp ss allowed n el el2 vs vsn blk dp)
  2. ;;;                                pBe 08Jan2013                        ;;;
  3. (defun _dp (en  pn m / vis)
  4.                                 (setq vis (car  (vl-remove-if-not
  5.                                          '(lambda (k) (eq  (vla-get-PropertyName k
  6.                                                             )
  7.                                                       pn ))
  8.                                          (vlax-invoke en 'GetDynamicBlockProperties))))
  9.      (if (and vis m)   (vlax-get vis 'AllowedValues) vis))
  10. (Setq same (lambda (f b)
  11.                 (Eq (Strcase (vla-get-effectivename f))
  12.                      (strcase b))))
  13. (if (and (setq ss (ssget "_:L" '((0 . "INSERT")(2 . "[color="blue"][b]BLOCKNAME[/b][/color],`*U*"))))
  14.            (same  (vlax-ename->vla-object (ssname ss 0)) [b][color="blue"]"BLOCKNAME"[/color][/b])
  15.                   (setq allowed (_dp (vlax-ename->vla-object (ssname ss 0))  "RMS_SCALE_VIS" t))
  16.            (setq n -1)
  17.            (not (textscr))
  18.            (foreach itm allowed
  19.                  (print (list (setq n (1+ n)) itm)))
  20.            (not (initget 1))
  21.            (setq el (getint "\nChoose Visibility to find [index number]: "))
  22.            (setq vs (nth el allowed))
  23.            (setq el2 (getint (strcat "\nChoose Visibility for " vs " [index number]: ")))
  24.            (setq vsn (nth el2 allowed))
  25.           )
  26.                                 (repeat (setq i (sslength ss))  
  27.                                             (setq blk (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
  28.              (cond ((and
  29.                        (same  blk "BLOCKNAME")
  30.                                                      (setq dp  (_dp blk "RMS_SCALE_VIS" nil))
  31.                        (eq (vlax-get dp 'Value) vs)
  32.                        (vlax-put dp 'value vsn)
  33.                        )
  34.                     )
  35.                    )
  36.                  )
  37.      )(princ)
  38.      )

 
 
或者更简单的方法。
选择块
获取允许值的列表
选择要查找的Visibility属性
(sssetfirst nil sset)
然后使用属性更改可见性
 
除我们将使用(sssetfirst nil coll)外,几乎与上述相同
 
HTH公司
回复

使用道具 举报

18

主题

78

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 07:18:29 | 显示全部楼层
谢谢,我还得再看一下
但是这些描述非常有用。
 
谢谢你的帮助
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:26:32 | 显示全部楼层
 
很高兴为您服务,随时通知我们
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:27:54 | 显示全部楼层
FWIW-http://www.cadtutor.net/forum/showthread.php?61221-动态块计数&p=415884&viewfull=1#post415884
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:35:55 | 显示全部楼层
 
漂亮的林奇·伦德曼。我很久以前就放弃了寻找一种方法来捕捉“Visibility”paramater的名字,现在我已经看到了它是如何做到的。书签。。点击点击
 
谢谢你这么说
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:37:35 | 显示全部楼层
 
可见性参数不一定称为“可见性…”
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:42:54 | 显示全部楼层
 
这正是我的意思,这就是为什么我用双引号将单词visibility括起来,以提醒其他人它并不总是被命名为“visibility”,并阅读RM的linky。
 
抱歉给你带来困惑
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:49:47 | 显示全部楼层
 
哦,对了,很抱歉弄糊涂了,不管它值多少钱,这就是我用的。
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 09:46 , Processed in 0.450184 second(s), 72 queries .

© 2020-2025 乐筑天下

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