prodromosm 发表于 2022-7-5 16:29:50

帮助:增加属性数

您好,我正在使用此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]
查看完整版本: 帮助:增加属性数