MiGo 发表于 2022-7-6 15:09:56

 
如果我在布局选项卡中工作,但通过mspace中的视口工作,这会起作用吗?

Lee Mac 发表于 2022-7-6 15:13:28

 
六羟甲基三聚氰胺六甲醚。。。不确定,试一试,让我们知道

StevJ 发表于 2022-7-6 15:16:20

这是及时的。我正在努力改进工作中的LISP程序,恐怕没有一个太成功。这是很久以前写的。我只需要做一个调整。
对于所有属性块的选择集,如何从该集中选择标记形状的值为R的所有块?
 
以下是我试图将其融入其中的常规。我试着评论这个程序来帮助我学习,但即使有参考资料和许多有用的autolisp网站,我也没有走多远,正如你所见。
 
 

(defun DXF (code elist)                              ;
(cdr (assoc code elist))                           ;
)                                                    ;
(defun C:BOXQA ( / frst tbdata elist edata llist)    ; Name the function and initialize variables
(setq data "")                                    ; Set data equal to "". Why? the variable isn't used anywhere that I can see.
(setq count 0)                                    ; Set Count = zero
(setq ss1 (ssget "X" '((0 . "INSERT")(66 . 1))))    ; Go Get every "INSERT" and put it in SS1
(if ss1                                             ; See if SS1 has anything in it
(progn                                             ; If SS1 is not empty, run the program, else exit
(setq emax (sslength ss1))                        ; Set EMAX equal to the number of INSERTS (?) in SS1

(while (< count emax)                           ; while Count is less than EMAX
   (setq en (ssname ss1 count))                     ; Set EN equal to the Entity Name of whatever is in SS1 for the current Count.
   (setq count (+ count 1))                         ; Increment the Count (Count = Count +1)
   (setq ed (entget en))                            ; Set ED equal to something.
                                                    ; From here down I cannot follow the program.
   (setq blknm (dxf 2 ed))                        ; unknown

   (while (/= "SEQEND" (dxf 0 ed))                  ; unknown
    (setq en (entnext en))                        ; unknown
    (setq ed (entget en))                           ; unknown
    (setq tag (dxf 2 ed))                           ; unknown
    (setq val (dxf 1 ed))                           ; unknown

    (if (/= "SEQEND" (dxf 0 ed))                  ; unknown
   (progn                                       ; unknown
(if (= "BOXSIZE" TAG)                      ; If BOXSIZE is a TAG(?)
                                                    ; If a TAG name BOXSIZE exists(?)
                                                    ; If BOXSIZE value is not empty(?)
;BOXSIZE is the TAG for a value that gives the upper left and lower right points.
    (progn                                       ; unknown
   (setq ttval (read val))                     ; unknown
   (setq ul (list (car ttval) (cadr ttval)))   ; unknown
   (setq lass (cdr ttval))                     ; unknown
   (setq lr (list (caddr ttval) (caddr lass))) ; unknown
   (setq p2 (list (car ul) (cadr lr) ))      ; unknown
   (setq p4 (list (car lr) (cadr ul) ))      ; unknown
   (grdraw ul p2 1 4)                        ; unknown
   (grdraw p2 lr 1 4)                        ; unknown
   (grdraw ul p4 1 4)                        ; unknown
   (grdraw p4 lr 1 4)                        ; unknown
    )                                          ; progn 3
      )                                             ; endif 3
   )                                              ; progn 2
    )                                             ; endif 2
   )                                                ; while 2
)                                                 ; while 1
)                                                ; progn 1
)                                                   ; endif 1
(prompt "\n Done")                                 ; Display "Done" in command line
(princ)
)                                                    ; end

Lee Mac 发表于 2022-7-6 15:18:39

你希望这个程序做什么?
 
目前,它似乎在寻找属性块,寻找名为“BOXSIZE”的标记,并使用grdraw函数使用“BOXSIZE”中的点在屏幕上绘制临时向量

CAB 发表于 2022-7-6 15:23:30

 
你需要放眼全局。
 
 
正如你所见,该语言确实与其他选项一起发挥作用。
如果这个角色是中国人,它会是什么样子。

StevJ 发表于 2022-7-6 15:27:22

这正是它所做的,李,但它为每个属性块绘制这些临时向量,而不仅仅是我需要的向量。
 
有没有办法只为形状为R的向量绘制这些向量。如果有助于说明的话,这里有一个属性列表。

Lee Mac 发表于 2022-7-6 15:29:42

试一试:(未经测试):
 

(defun c:boxqa (/ ss attLst Box ul lr)
(vl-load-com)
(if (setq ss (ssget "_X " '((0 . "INSERT") (66 . 1))))
   (progn
   (foreach Obj (mapcar 'vlax-ename->vla-object
                  (mapcar 'cadr (ssnamex ss)))
       (setq attLst nil)
       (foreach att (vlax-safearray->list
                      (vlax-variant-value
                        (vla-getAttributes Obj)))
         (setq attLst (cons (cons (vla-get-TagString att)
                                  (vla-get-TextString att) attLst))))
       (if (and (assoc "SHAPE" attLst)
                (eq "R" (cdr (assoc "SHAPE" attLst)))
                (setq Box (assoc "BOXSIZE" attLst)
                      Box (read (cdr Box))))
         (progn
         (setq ul (list (car Box) (cadr Box))
               lr (list (caddr Box) (cadddr Box)))
         (grvecs (list 1 lr (list (car lr) (cadr ul))
                         1 ul (list (car lr) (cadr ul))
                         1 lr (list (car ul) (cadr lr))
                         1 ul (list (car ul) (cadr lr))))))))
   (princ "\n<!> No Attributed Blocks Found <!>"))
(princ))

StevJ 发表于 2022-7-6 15:30:48

哇,李。这令人印象深刻。也要干净得多。
将LSP文件放到我当前的图形中进行测试。
 
加载很好,但当我运行它时,我得到了。。。
命令:_BOXQA;错误:错误的ssget模式字符串
 
在与原件进行比较后,删除了(ssget“_X”)中X之后的空格,很可能就是这样,但后来我得到了。。。
命令:_BOXQA;错误:参数太多
所以很明显我不知道我在做什么。
 
我把空间放回去,然后回到。。。
命令:_BOXQA;错误:错误的ssget模式字符串
 
史蒂夫

Lee Mac 发表于 2022-7-6 15:36:29

 
对不起,伙计,我只是打得很快,所以可能到处都是打字错误。。。我来看看

Lee Mac 发表于 2022-7-6 15:39:48

试一试:
 

(defun c:boxqa (/ ss attLst Box ul lr)
(vl-load-com)
(if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
   (progn
   (foreach Obj (mapcar 'vlax-ename->vla-object
                  (mapcar 'cadr (ssnamex ss)))
       (setq attLst nil)
       (foreach att (vlax-safearray->list
                      (vlax-variant-value
                        (vla-getAttributes Obj)))
         (setq attLst (cons (cons (vla-get-TagString att)
                                  (vla-get-TextString att)) attLst)))
       (if (and (assoc "SHAPE" attLst)
                (eq "R" (cdr (assoc "SHAPE" attLst)))
                (setq Box (assoc "BOXSIZE" attLst)
                      Box (read (cdr Box))))
         (progn
         (setq ul (list (car Box) (cadr Box))
               lr (list (caddr Box) (cadddr Box)))
         (grvecs (list 1 lr (list (car lr) (cadr ul))
                         1 ul (list (car lr) (cadr ul))
                         1 lr (list (car ul) (cadr lr))
                         1 ul (list (car ul) (cadr lr))))))))
   (princ "\n<!> No Attributed Blocks Found <!>"))
(princ))
页: 1 [2]
查看完整版本: 所有块的选择集w