帮助:增加属性数
您好,我正在使用此lisp代码来增加沿多段线的属性块数。我需要做两个改变1) 可以选择给出起始编号。我不知道;t需要每次从1、2、3等开始重新编号
2) 如果有两个具有公共边的多边形,则可以选择公共块,以防对其重新编号。
谢谢
(defun c:pblinclw ( / ListClockwise-p osm ss lw vl pt n pr k v bl att )
(defun ListClockwise-p ( lst / z vlst )
(vl-catch-all-apply 'minusp
(list
(if
(not
(equal 0.0
(setq z
(apply '+
(mapcar
(function
(lambda (u v)
(- (* (caru) (cadrv)) (* (carv) (cadru)))
)
)
(setq vlst
(mapcar
(function
(lambda (a b) (mapcar '- b a))
)
(mapcar (function (lambda (x) (car lst))) lst)
(cdr (reverse (cons (car lst) (reverse lst))))
)
)
(cdr (reverse (cons (car vlst) (reverse vlst))))
)
)
) 1e-6
)
)
z
(progn
(prompt "\n\nChecked vectors are colinear - unable to determine clockwise-p of list")
nil
)
)
)
)
)
(setq osm (getvar 'osmode))
(setvar 'osmode
(prompt "\nPick 2D LWPOLYLINE that has blocks with attributes to increment at its vertices...")
(setq ss (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))
(setq lw (ssname ss 0))
(setq vl (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget lw))))
(if (not (ListClockwise-p vl)) (setq vl (reverse vl)))
(setq pt (getpoint "\nPick starting point : "))
(setq n (length vl))
(setq pr (getstring "\nSpecify prefix : "))
(setq vl (vl-member-if '(lambda (x) (equal (list (car pt) (cadr pt)) x 1e-6)) (reverse (cdr (vl-member-if '(lambda (x) (equal (list (car pt) (cadr pt)) x 1e-6)) (reverse (append vl vl)))))))
(setq k 0)
(repeat n
(setq k (1+ k))
(setq v (car vl))
(setq bl
(ssname
(ssget
"_X"
(list
'(0 . "INSERT")
'(66 . 1)
'(-4 . "<,<,*")
(list 10 (+ (car v) 1e-6) (+ (cadr v) 1e-6) 0.0)
'(-4 . ">,>,*")
(list 10 (- (car v) 1e-6) (- (cadr v) 1e-6) 0.0)
)
)
0
)
)
(setq att (entnext bl))
(entmod (subst (cons 1 (strcat pr (itoa k))) (assoc 1 (entget att)) (entget att)))
(entupd att)
(setq vl (cdr vl))
)
(setvar 'osmode osm)
(princ)
)
页:
[1]