satishrajdev 发表于 2022-7-6 07:07:36

插入属性时出现问题

大家好,
 
我有一个lisp帮助我给出矩形的尺寸,如下所示:-
(defun _vertices ( l )
(if (eq "LWPOLYLINE" (cdr (assoc 0 l)))
   (_vertices1 l)
   (_vertices2 (entnext (cdr (assoc -1 l))))
)
)

(defun _vertices1 ( l / p )
(if (setq p (assoc 10 l))
   (cons (cdr p) (_vertices1 (cdr (member p l))))
)
)

(defun _vertices2 ( e )
(if (eq "VERTEX" (cdr (assoc 0 (entget e))))
   (cons (cdr (assoc 10 (entget e))) (_vertices2 (entnext e)))
)
)

(defun _uniquefuzz ( l f )
(if l
   (cons (car l)
   (_uniquefuzz
       (vl-remove-if '(lambda ( x ) (equal x (car l) f)) (cdr l))
       f
   )
   )
)
)

(defun c:SNC ( / ss pl ptlst l-r-ptlst d-u-ptlst midl midr midd midu len bre sonar )
(setq scbk (getfiled "Select Sonar Contact Block" "*.*" "dwg" 4))
       (progn
             (setq Bs (Getreal "\nScale factor for Sonar Contact Block <1>:"))
      (if (= Bs Nil) (setq Bsc 1) (setq Bsc Bs)))
(while (not ss)
   (prompt "\nSelect polyline")
   (setq ss (ssget "_+.:E:S:L" '((0 . "*POLYLINE"))))
)
(setq pl (ssname ss 0))
(setq ptlst (_uniquefuzz (_vertices (entget pl)) 1e-)
(setq l-r-ptlst (vl-sort ptlst '(lambda (a b) (< (car a) (car b)))))
(setq d-u-ptlst (vl-sort ptlst '(lambda (a b) (< (cadr a) (cadr b)))))
(setq midl (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (car l-r-ptlst) (cadr l-r-ptlst)))
(setq midr (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (caddr l-r-ptlst) (cadddr l-r-ptlst)))
(setq midd (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (car d-u-ptlst) (cadr d-u-ptlst)))
(setq midu (mapcar '(lambda (a b) (/ (+ a b) 2.0)) (caddr d-u-ptlst) (cadddr d-u-ptlst)))
(setq len (distance midl midr))
(setq bre (distance midd midu))
(setq sonardimension (strcat (rtos len 2 1)
       "m X "
       (rtos bre 2 1)
       "m X nmh"
)
)
(setq Pnt (Getpoint "\n Specify Point:"))
(command "insert" scbk pnt 1 1 0 sonardimension)
(princ)
)

 
我已将属性块作为附件附加
我希望突出显示的代码作为属性插入到lisp中
但命令即将结束。示例如下
Command: snc
Scale factor for Sonar Contact Block <1>:
Select polyline
Select objects:
Specify Point:Unknown command "18.1M X 23.4M X NMH".Press F1 for help.
0
 
请帮帮我
声纳接触。图纸

pBe 发表于 2022-7-6 07:43:31

将ATTREQ设置为1
 
此外,确保具有属性的块,在这种情况下,“sonar”没有嵌套
 
块示例:
声纳合同
------->声纳
 
如果你不明白我说的嵌套是什么意思,就喊一声
 

(defun c:SNC ( / ss pl ptlst l-r-ptlst d-u-ptlst midl midr midd midu len bre sonar )
(if (not (tblsearch "BLOCK" "sonar"))
                   (setq scbk (getfiled "Select Sonar Contact Block" "*.*" "dwg" 4)))
.......
(command "insert" "sonar" pnt 1 1 0 sonardimension)
....

satishrajdev 发表于 2022-7-6 07:48:54

非常感谢pBe。。。。。。。。。。效果很好,你们真是天才

pBe 发表于 2022-7-6 08:26:26

 
对你来说很好,只要确保通过GetField选择的文件确实包含属性,即使块的名称不是“sonar”,那么你可以使用
(command scbkpnt 1 1 0 sonardimension)
 
但是,现在设置代码的方式是,当所选文件与命令行上设置的条件不匹配时,它会给出一个错误,例如1属性/非非非非强制缩放块和Attreq设置为1,当您看到它时就会知道
 
干杯
页: [1]
查看完整版本: 插入属性时出现问题