CAD_Noob 发表于 2022-10-18 14:25:07

层长修改

我需要帮助来修改这个 lisp。感谢作者,我的朋友刚刚把这个给了我。
它的作用是选择多条折线并创建一个包含所有选定折线的表格,显示其图层名称和总长度,
我的问题是我们的图纸以毫米为单位。有人可以帮我修改 lisp 并将表格中的总长度更改为米
如果我们可以在表格的另一列中添加具有图层颜色的折线,那将是一个很好的添加,但不是必需的。
这是程序:
(defun C:LAYLENGTH ( / *error* acdoc ss p i e a d l) (vl-load-com)
(setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark acdoc)

(defun *error* (msg)
    (and
      msg
      (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*,*EXIT*"))
      (princ (strcat "\nError: " msg))
    )
    (if
      (= 8 (logand (getvar 'undoctl) 8))
      (vla-endundomark acdoc)
    )
    (princ)
    )

(if
    (and
      (setq ss (ssget ":L" '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC,CIRCLE,ELLIPSE,SPLINE"))))
      (setq p (getpoint "\nTable scale depend on annotation scale.\nSpecify table insert point: "))
      )
    (progn
      (repeat
      (setq i (sslength ss))
      (setq e (ssname ss (setq i (1- i)))
            a (cdr (assoc 8 (entget e)))
            d (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
      )
      (if
          (setq o (assoc a l))
          (setq l (subst (list a (+ (cadr o) d)) o l))
          (setq l (cons (list a d) l))
      )
      )
      (setq l (vl-sort l '(lambda (a b) (< (car a) (car b)))))
      (insert_table l p)
      )
    )
(*error* nil)
(princ)
)

(defun insert_table (lst pct / tab row col ht i n space)
(setq space (vlax-get acDoc (if (= 1 (getvar 'cvport)) 'PaperSpace 'ModelSpace))
      ht(/ 2.5 (cond ((getvar 'cannoscalevalue)) (1.0)))
      pct (trans pct 1 0)
      n   (trans '(1 0 0) 1 0 T)
      tab (setq tab (vla-addtable space (vlax-3d-point pct) (+ 2 (length lst)) (length (car lst)) (* 2.5 ht) ht))
      )
(vlax-put tab 'direction n)

(mapcar
    (function
      (lambda (rowType)
      (vla-SetTextStyletab rowType (getvar 'textstyle))
      (vla-SetTextHeight tab rowType ht)
      )
    )
   '(2 4 1)
)

(vla-put-HorzCellMargin tab (* 0.14 ht))
(vla-put-VertCellMargin tab (* 0.14 ht))

(setq lst (cons (mapcar '(lambda (a) (strcat "Col" (itoa (1+ (vl-position a (car lst)))))) (car lst)) lst))

(setq i 0)
(foreach col (apply 'mapcar (cons 'list lst))
    (vla-SetColumnWidth tab i
      (apply
      'max
      (mapcar
          '(lambda (x)
             ((lambda (txb) (+ (abs (- (caadr txb) (caar txb))) (* 2.0 ht)))
            (textbox (list (cons 1 (vl-princ-to-string x)) (cons 7 (getvar 'textstyle)) (cons 40 ht)))
            )
             )
          col
          )
      )
      )
    (setq i (1+ i))
    )

(setq lst (cons '("TITLE") lst))

(setq row 0)
(foreach r lst
    (setq col 0)
    (vla-SetRowHeight tab row (* 1.5 ht))
    (foreach c r
      (vla-SetText tab row col (if (numberp c) (rtos c) (vl-princ-to-string c)))
      (setq col (1+ col))
      )
    (setq row (1+ row))
    )
)

xj6019 发表于 2022-10-18 16:35:24


(defun C:NM (/ *error* a acdoc d e i l o p ss) (vl-load-com)
(setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark acdoc)
       
(defun *error* (msg)
    (and
      msg
      (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*,*EXIT*"))
      (princ (strcat "\nError: " msg))
    )
    (if
      (= 8 (logand (getvar 'undoctl) 8))
      (vla-endundomark acdoc)
    )
    (princ)
        )

(if
    (and
      (setq ss (ssget ":L" '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC,CIRCLE,ELLIPSE,SPLINE"))))
      (setq p (getpoint "\n请指定表格放置点: "))
                )
    (progn
      (repeat
      (setq i (sslength ss))
      (setq e (ssname ss (setq i (1- i)))
                                        a (cdr (assoc 8 (entget e)))
                                        d (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
                                       
      )
      (if
          (setq o (assoc a l))
          (setq l (subst (list a (+ (cadr o) d)) o l))
          (setq l (cons (list a d ) l))
      )
      )
      (setq l (vl-sort l '(lambda (a b) (< (car a) (car b)))))
                        (setq l
                                (mapcar '(lambda(a)   
                                                                       (list (car a)(* 0.001(cadr a)))
                                                               )       
                                        l
                                )
                        )
      (insert_table l p)
                )
        )
(*error* nil)
(princ)
)

(defun insert_table (lst pct / tab row col ht i n space)
(setq space (vlax-get acDoc (if (= 1 (getvar 'cvport)) 'PaperSpace 'ModelSpace))
                ht(/ 2.5 (cond ((getvar 'cannoscalevalue)) (1.0)))
                pct (trans pct 1 0)
                n   (trans '(1 0 0) 1 0 T)
                tab (setq tab (vla-addtable space (vlax-3d-point pct) (+ 2 (length lst)) (length (car lst)) (* 2.5 ht) ht))
        )
(vlax-put tab 'direction n)

(mapcar
    (function
      (lambda (rowType)
      (vla-SetTextStyletab rowType (getvar 'textstyle))
      (vla-SetTextHeight tab rowType ht)
      )
    )
                '(2 4 1)
)

(vla-put-HorzCellMargin tab (* 0.14 ht))
(vla-put-VertCellMargin tab (* 0.14 ht))
       
(setq lst (cons (mapcar '(lambda (a) (strcat "项目" (itoa (1+ (vl-position a (car lst)))))) (car lst)) lst))
       
(setq i 0)
(foreach col (apply 'mapcar (cons 'list lst))
    (vla-SetColumnWidth tab i
      (apply
      'max
      (mapcar
          '(lambda (x)
             ((lambda (txb) (+ (abs (- (caadr txb) (caar txb))) (* 2.0 ht)))
                                                       (textbox (list (cons 1 (vl-princ-to-string x)) (cons 7 (getvar 'textstyle)) (cons 40 ht)))
                                               )
                                       )
          col
                                )
                        )
                )
    (setq i (1+ i))
        )

(setq lst (cons '("统计结果") lst))

(setq row 0)
(foreach r lst
    (setq col 0)
    (vla-SetRowHeight tab row (* 1.5 ht))
    (foreach c r
      (vla-SetText tab row col (if (numberp c) (rtos c) (vl-princ-to-string c)))
      (setq col (1+ col))
                )
    (setq row (1+ row))
        )
)
页: [1]
查看完整版本: 层长修改