乐筑天下

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

[编程交流] 生成对象的选择集

[复制链接]

8

主题

22

帖子

14

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 06:44:18 | 显示全部楼层 |阅读模式
大家好,
我花了整个周末的时间在Afralisp、谷歌和其他各种资源上,我是一个Lisp程序的新手,这将是我的第一个中级(我敢说)例程,不过应该感谢那些已经为我的各种参考资源做出贡献的人!
 
常规:
复制多重引线>分解副本>删除引线组件>将文本放置在基于原始层但带有后缀的唯一层上。
 
我正在努力解决的是,多行文字没有继承原始多重引线的注释性比例(只有当前比例),我不知道如何制作所述比例的选择集,以便我可以将它们添加回复制的多行文字。
 
到目前为止,代码要温和:
 
  1. ;============================================================
  2. ;MLeader Halo____G Beaumont 01/04/13
  3. ;============================================================
  4. (defun c:ML2HALO ( / msel1 sfx msel2 oldlayer ent entdata lay1 lay_name)
  5. (Princ "\nSelect Mleader or Dimension to HALO (CAN NOT be a true type font)...")
  6. (setq msel1 (ssget))
  7.   (setq sfx "_HALO")
  8. (command "copy" msel1 "" "0,0" "0,0")
  9.   (setq msel2 (ssget "p"))
  10.   (setvar "qaflags" 1)
  11.    (command "_.explode" msel2 "")
  12.     (setvar "qaflags" 0)
  13.   (setq msel2 (ssget "p"))
  14. (ssget "p" '((-4 . "<not") (0 . "Mtext") (-4 . "not>")))
  15.   (command "erase" "p" "")
  16. ;============================================================
  17. ;Layer control
  18. ;============================================================
  19. (setq oldlayer (getvar "CLAYER"))
  20. (entlast)
  21.   (setq ent (entlast))
  22.    (setq entdata (entget ent))
  23.     (assoc 8 entdata)
  24.      (cdr (assoc 8 entdata))   
  25.       (setq lay1 (cdr (assoc 8 entdata)))
  26.        (setq lay_name (strcat lay1 sfx))
  27. (command "-LAYER" "M" lay_name "LW" "2" "" "C" "255" "" "")
  28. (command "_chprop" msel2 "" "LA" lay_name "C" "bylayer" "Annotative" "yes" "")
  29.   (setvar "CLAYER" oldlayer)
  30. (princ)
  31. )
  32. ;============================================================
  33. ;End
  34. ;============================================================
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 06:58:00 | 显示全部楼层
您需要做的是“抓取”mleader对象的当前Annoscale并将其应用于ent。但这将假设所有选定的多重引线具有相同的annoscale。[简单部分]
 
  1. (Defun GetAnnoscale (ed / scLst)
  2. ;;;          Irné         ;;;
  3. (if (and
  4.              ;; Get the XDictionary attached to the object
  5.              (setq xn (vl-position '(102 . "{ACAD_XDICTIONARY") ed))
  6.              (setq xn (cdr (nth (1+ xn) ed)))
  7.              (setq xd (entget xn))
  8.              ;; Get the Context Data Management dictionary attached to the XDictionary
  9.              (setq cdn (vl-position '(3 . "AcDbContextDataManager") xd))
  10.              (setq cdn (cdr (nth (1+ cdn) xd)))
  11.              (setq cdd (entget cdn))
  12.              ;; Get the Annotation Scales dictionary attached to the CD
  13.              (setq asn (vl-position '(3 . "ACDB_ANNOTATIONSCALES") cdd))
  14.              (setq asn (cdr (nth (1+ asn) cdd)))
  15.              (setq asd (entget asn))
  16.              ;; Get the 1st scale attached
  17.              (setq cn (assoc 3 asd))
  18.              (setq cn (member cn asd))
  19.            )
  20.          ;; Step through all scales attached
  21.          (while cn
  22.            (if (and (= (caar cn) 350) ;It it's pointing to a scale record
  23.                     ;; Get the record's data
  24.                     (setq cd (entget (cdar cn)))
  25.                     ;; Get the Context data class
  26.                     (setq sn (assoc 340 cd))
  27.                     (setq sd (entget (cdr sn)))
  28.                     (setq sn (assoc 300 sd))
  29.                     ;; Check if the scale is already in the list
  30.                     (not (vl-position (cdr sn) scLst))
  31.                )
  32.              (setq scLst (cons (cdr sn) scLst))
  33.            )
  34.            (setq cn (cdr cn))
  35.          )
  36.        ) scLst
  37. )

 
否则,您需要遍历选定的多重引线实体,并逐个分解项目。
 
如果你需要帮助,就喊一声
回复

使用道具 举报

8

主题

22

帖子

14

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:18:45 | 显示全部楼层
非常感谢pBe,
我会找一个安静的角落,交叉双腿,慢慢地摇晃,试着消化我不懂的20个左右的新命令,包括我还没有开始学习的VL东西
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 07:25:51 | 显示全部楼层
:lol:pBe代码中唯一的VL是VL位置。这是一个相当简单的方法,它是第n个函数的逆。假设您有一个整数列表,并希望找到特定整数在该列表中的位置:
  1. (setq sampleList '(6 2 4 5 1 )
  2. (vl-position 4  sampleList) ;Returns 2 as the 0-based index position
  3. (nth 2 sampleList) ;Returns 4 as the item at position 2

 
至于那段代码,我有点为我在里面做的那些多余的东西感到羞愧,这些东西都是不必要的。还有其他一些方法可以解决同样的问题。最值得注意的是dict*函数,这是使用词典的“官方”方式。有关my functions的一些更新版本,请查看以下lisp:http://sourceforge.net/p/caddons/code/67/tree/General/Scales.LSP
 
基本上,anno比例作为类似XRecord的实体列在图形附带的字典中(即,附加到namedobjdict实体附带的“ACAD\u SCALELIST”字典)。然后,每个应用了刻度的实体都会在其XDictionary上附加一个字典,这取决于它可能是“ACDB_ANNOTATIONSCALES”或“ASDK_XREC_ANNOTATION_SCALE_INFO”的实体类型。然后,它包含一个或多个到ACAD_比例列表中主比例的链接。这听起来有点复杂,但这在使用字典时是“常见的”。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 07:34:08 | 显示全部楼层
 
我糟糕的Irné,我刚刚粘贴了我看到的第一个处理Annocscales的例程。这几天我在写代码方面有点懒惰。
 
干杯
 
我稍后会看看你的新版本。
回复

使用道具 举报

8

主题

22

帖子

14

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:49:41 | 显示全部楼层
谢谢irneb,我会消化的!!
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:14 , Processed in 1.082998 second(s), 64 queries .

© 2020-2025 乐筑天下

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