乐筑天下

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

[编程交流] Lisp以同步属性

[复制链接]

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 22:50:25 | 显示全部楼层 |阅读模式
先生们,
我正在寻找一个lisp来同步属性。例如,块Alpha有一个名为“LOCID”的属性,其周围有块Beta、Charlie和Delta。所有四个块都有不同的名称、属性和参数,但它们都有共同的“LOCID”。Alpha已经有“LOCID”的值,但其他值没有。我希望lisp通过选择所有四个块,将所有四个块的“LOCID”同步到Alpha的值。此外,这四个可能并不总是同时存在,但Alpha总是存在。有多组Alpha&friends。
 
有人有Lisp程序可以做到这一点吗?这远远超过我的经验水平。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:04:03 | 显示全部楼层
你好
 
像这样的?(刚刚拼凑起来):
 
  1. (defun c:SyncAtt ( / *error* _StartUndo _EndUndo doc source tag val ss )
  2. (vl-load-com)
  3. ;; © Lee Mac 2010
  4. (defun *error* ( msg )
  5.    (if doc (_EndUndo doc))
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ)
  9. )
  10. (defun _StartUndo ( doc ) (_EndUndo doc)
  11.    (vla-StartUndoMark doc)
  12. )
  13. (defun _EndUndo ( doc )
  14.    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  15.      (vla-EndUndoMark doc)
  16.    )
  17. )
  18. (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  19. (if
  20.    (and
  21.      (setq source
  22.        (LM:Selectif
  23.          (lambda ( x )
  24.            (eq "ATTRIB" (cdr (assoc 0 (entget x))))
  25.          )
  26.          nentsel "\nSelect Source Attribute: "
  27.        )
  28.      )
  29.      (ssget '((0 . "INSERT") (66 . 1)))
  30.    )
  31.    (progn
  32.      (setq tag (cdr (assoc 2 (entget source)))
  33.            val (cdr (assoc 1 (entget source)))
  34.      )
  35.      (_StartUndo doc)
  36.      (vlax-for obj (setq ss (vla-get-ActiveSelectionSet doc))
  37.        (mapcar
  38.          (function
  39.            (lambda ( attrib )
  40.              (if (eq tag (vla-get-TagString attrib))
  41.                (vla-put-TextString attrib val)
  42.              )
  43.            )
  44.          )
  45.          (vlax-invoke obj 'GetAttributes)
  46.        )
  47.      )
  48.      (vla-delete ss)
  49.      (_EndUndo doc)
  50.    )
  51. )
  52. (princ)
  53. )
  54. ;;---------------------=={ Select if }==----------------------;;
  55. ;;                                                            ;;
  56. ;;  Continuous selection prompts until the predicate function ;;
  57. ;;  foo is validated                                          ;;
  58. ;;------------------------------------------------------------;;
  59. ;;  Author: Lee McDonnell, 2010 - www.lee-mac.com             ;;
  60. ;;                                                            ;;
  61. ;;  Copyright © 2010 by Lee McDonnell, All Rights Reserved.   ;;
  62. ;;  Contact: Lee @ lee-mac.com                                ;;
  63. ;;  Forums: Lee Mac @ TheSwamp.org, CADTutor.net, AUGI.com    ;;
  64. ;;------------------------------------------------------------;;
  65. ;;  Arguments:                                                ;;
  66. ;;  foo - optional predicate function taking ename argument   ;;
  67. ;;  fun - selection function to invoke                        ;;
  68. ;;  str - prompt string                                       ;;
  69. ;;------------------------------------------------------------;;
  70. ;;  Returns:  selected entity ename if successful, else nil   ;;
  71. ;;------------------------------------------------------------;;
  72. (defun LM:Selectif ( foo fun str / e )
  73. ;; © Lee Mac 2010
  74. (while
  75.    (progn (setq e (car (fun str)))      
  76.      (cond
  77.        ( (eq 'ENAME (type e))
  78.          (if (and foo (not (foo e)))
  79.            (princ "\n** Invalid Object Selected **")
  80.          )
  81.        )
  82.      )
  83.    )
  84. )
  85. e
  86. )

 
您可能也对此感兴趣-如果您将其与“TextString”属性一起使用,它也可以执行您的任务。
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:15:12 | 显示全部楼层
你=太棒了。非常感谢。你刚刚帮我省了几个小时的工作。如果你在SoCal,我欠你一两品脱。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:24:29 | 显示全部楼层
 
谢谢,伙计,很高兴我能帮上忙
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:37:51 | 显示全部楼层
李·麦克,
如果我想暂时将块的颜色从“Bylayer”更改为另一种颜色(如黄色),我需要添加什么。这样我就知道哪些对象已经完成,哪些还没有完成?
 
我试着利用afralisp的这个功能,但由于我认为它不可用,所以无法使其工作。
 
  1.          (setq check (vlax-property-available-p ss "Color" T))
  2. (if check
  3.         (vlax-put-property ss 'Color 4)
  4.   );

 
我在过去使用过类似的东西,但我还没有弄清楚如何将ActiveSelection转换为一组珐琅或单个VLA对象
 
  1. (setq RX (vlax-vla-object->ename oBkRef))
  2. (command "chprop" RX "" "color" "2" "")
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:41:11 | 显示全部楼层
您好,约翰,我将使用(重画珐琅3)高亮显示实体,然后命令regen恢复正常
回复

使用道具 举报

16

主题

50

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 23:51:38 | 显示全部楼层
今天早上有点轻,这是我想到的。。。
 
(命令“chprop”p“”color“3”)
 
我更改了这部分。。。
  1.               (if (eq tag (vla-get-TagString attrib))
  2.                (progn
  3.                 (vla-put-TextString attrib val)
  4.                 (command "chprop" "p" "" "color" "3" "")
  5.         )
  6.              )

 
到这一部分。。。
  1.               (if (eq tag (vla-get-TagString attrib))
  2.                (vla-put-TextString attrib val)
  3.              )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:22 , Processed in 0.434014 second(s), 66 queries .

© 2020-2025 乐筑天下

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