您好,我正在使用此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)
- (- (* (car u) (cadr v)) (* (car v) (cadr u)))
- )
- )
- (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)
- )
|