JJtre 发表于 2022-7-5 19:40:03

如何获取属性信息

我一直在开发一个lisp程序,该程序将更改一个或多个块上的一个或多个属性。但是,我希望能够将当前属性值添加到。然而,我无法一次获得多个块的属性值。例如,如果您有两个具有两个单独属性值(值而不是标记)的相同块,并且您同时拾取这两个值,则当您打开“属性”窗口时,它将列出相同的值(如果有),并将不同的值列为“varies”。有什么方法可以在autolisp中得到这个精确的东西吗?我使用的是香草Lisp程序不是视觉,任何帮助将不胜感激。

BIGAL 发表于 2022-7-5 19:47:07

从这里开始http://www.cadtutor.net/forum/showthread.php?37127-全局属性编辑器amp提取器和高亮显示=块+编辑

Lee Mac 发表于 2022-7-5 19:49:25

谢谢你的插拔
 
这些也可能有助于:
 
http://lee-mac.com/attributefunctions.html

JJtre 发表于 2022-7-5 19:55:47

感谢您的回复,但这些链接一次只能工作一个块(或者它们是visual lisp)。我有点希望能同时获得几个相同块的属性值。这将允许我告诉用户是否已经存在值,以及同一属性是否存在不同的值。然而,我可以让它工作,但它最终是大约100行文字。无论如何谢谢你

Michaels 发表于 2022-7-5 19:58:37

你试过“阿托”命令吗?
 
这真的很有帮助。
 
谢谢

JJtre 发表于 2022-7-5 20:03:57

我从来都不知道这个命令,很酷,但我认为我无法将其应用到我的程序中。我有点希望它在内部运行,并使用DCL编码显示它。当选择块时,ACAD已经在属性窗口的属性下显示了我想要的信息,我只需要一些方法来提取这些信息。有没有办法让lisp将选定对象的所有属性放入一个列表或字符串中,与ACAD显示的内容完全相同?

eyde 发表于 2022-7-5 20:04:07

你试过数据提取吗?它会把它放在一个表中。

Michaels 发表于 2022-7-5 20:09:09

我正在使用塔瓦特先生制定的以下程序。
 

;;; This program is working almost as well as the Autocad command attout
;;; so I did this program to help people who do not have the Express tools
;;; to use my Autolisp Program instead.
;;; Hope this would help people as much as it is possible.
;;; Author *** THARWAT AL SHOUFI ***
;;; Date of creating the program November 17th. 2010
;;; Tested with Autocad 2010
(defun c:THattout (/ Att fNme ents e)
; THARWAT Nov. 17.2010
(prompt "\n Select Attributed Block: ")
(if
    (setq Att (ssget "_+.:S:L" '((0 . "INSERT")(66 . 1))))
   (progn
   (setq fNme
      (open "D://attributes.txt" "w"))
      (setq ents (ssname Att 0))
       (write-line
      (strcat "HANDLE" "\t" "BLOCKNAME" "\t" "\n"
       (strcat "'" (cdr (assoc 5 (entget ents))))
            "\t"
            (cdr (assoc 2 (entget ents)))
                "\t")
      fNme
      )
   (write-line
      (strcat "\n" "TAG" "\t" "VALUE")
      fNme
      )
   (while
   (not
   (eq
       "SEQEND"
         (cdr (assoc 0
               (setq e (entget (setq ents (entnext ents)))))
            )
       )
   )
            (write-line
             (strcat (cdr (assoc 2 e))
               "\t"
                  (cdr (assoc 1 e)))
         fNme
         )
   )
   (close fNme)
   )
(princ "\n No Attributed Block Selected")
   )
(princ "\nWritten by Tharwat Al Shoufi")
(princ)
)

 
祝你好运
 
迈克尔

JJtre 发表于 2022-7-5 20:13:54

感谢您的帮助,最后一个很接近,但我开始假设我最初的假设是正确的,vanilla lisp无法显示和比较多个块的属性值。谢谢你的帮助,如果我发现了什么,我会毫不犹豫地把它发回这里。

Lee Mac 发表于 2022-7-5 20:16:36

 
当然有——你只需要多想想。我发布的链接为单个块提供了属性子功能,但所使用的方法适用于任何数量的块,您只需以不同的方式构造代码。
页: [1] 2
查看完整版本: 如何获取属性信息