乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 154|回复: 1

[编程交流] 层长修改

[复制链接]

18

主题

98

帖子

115

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
79
发表于 2022-10-18 14:25:07 | 显示全部楼层 |阅读模式
我需要帮助来修改这个 lisp。感谢作者,我的朋友刚刚把这个给了我。
它的作用是选择多条折线并创建一个包含所有选定折线的表格,显示其图层名称和总长度,
我的问题是我们的图纸以毫米为单位。有人可以帮我修改 lisp 并将表格中的总长度更改为米
如果我们可以在表格的另一列中添加具有图层颜色的折线,那将是一个很好的添加,但不是必需的。
这是程序:
  1. (defun C:LAYLENGTH ( / *error* acdoc ss p i e a d l) (vl-load-com)
  2.   (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  3.   (vla-startundomark acdoc)
  4.   (defun *error* (msg)
  5.     (and
  6.       msg
  7.       (not (wcmatch (strcase msg) "*CANCEL*,*QUIT*,*BREAK*,*EXIT*"))
  8.       (princ (strcat "\nError: " msg))
  9.     )
  10.     (if
  11.       (= 8 (logand (getvar 'undoctl) 8))
  12.       (vla-endundomark acdoc)
  13.     )
  14.     (princ)
  15.     )
  16.   
  17.   (if
  18.     (and
  19.       (setq ss (ssget ":L" '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC,CIRCLE,ELLIPSE,SPLINE"))))
  20.       (setq p (getpoint "\nTable scale depend on annotation scale.\nSpecify table insert point: "))
  21.       )
  22.     (progn
  23.       (repeat
  24.         (setq i (sslength ss))
  25.         (setq e (ssname ss (setq i (1- i)))
  26.               a (cdr (assoc 8 (entget e)))
  27.               d (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  28.         )
  29.         (if
  30.           (setq o (assoc a l))
  31.           (setq l (subst (list a (+ (cadr o) d)) o l))
  32.           (setq l (cons (list a d) l))
  33.         )
  34.       )
  35.       (setq l (vl-sort l '(lambda (a b) (< (car a) (car b)))))
  36.       (insert_table l p)
  37.       )
  38.     )
  39.   (*error* nil)
  40.   (princ)
  41.   )
  42. (defun insert_table (lst pct / tab row col ht i n space)
  43.   (setq space (vlax-get acDoc (if (= 1 (getvar 'cvport)) 'PaperSpace 'ModelSpace))
  44.         ht  (/ 2.5 (cond ((getvar 'cannoscalevalue)) (1.0)))
  45.         pct (trans pct 1 0)
  46.         n   (trans '(1 0 0) 1 0 T)
  47.         tab (setq tab (vla-addtable space (vlax-3d-point pct) (+ 2 (length lst)) (length (car lst)) (* 2.5 ht) ht))
  48.         )
  49.   (vlax-put tab 'direction n)
  50.   
  51.   (mapcar
  52.     (function
  53.       (lambda (rowType)
  54.         (vla-SetTextStyle  tab rowType (getvar 'textstyle))
  55.         (vla-SetTextHeight tab rowType ht)
  56.       )
  57.     )
  58.    '(2 4 1)
  59.   )
  60.   
  61.   (vla-put-HorzCellMargin tab (* 0.14 ht))
  62.   (vla-put-VertCellMargin tab (* 0.14 ht))
  63.   (setq lst (cons (mapcar '(lambda (a) (strcat "Col" (itoa (1+ (vl-position a (car lst)))))) (car lst)) lst))
  64.   (setq i 0)
  65.   (foreach col (apply 'mapcar (cons 'list lst))
  66.     (vla-SetColumnWidth tab i
  67.       (apply
  68.         'max
  69.         (mapcar
  70.           '(lambda (x)
  71.              ((lambda (txb) (+ (abs (- (caadr txb) (caar txb))) (* 2.0 ht)))
  72.               (textbox (list (cons 1 (vl-princ-to-string x)) (cons 7 (getvar 'textstyle)) (cons 40 ht)))
  73.               )
  74.              )
  75.           col
  76.           )
  77.         )
  78.       )
  79.     (setq i (1+ i))
  80.     )
  81.   
  82.   (setq lst (cons '("TITLE") lst))
  83.   
  84.   (setq row 0)
  85.   (foreach r lst
  86.     (setq col 0)
  87.     (vla-SetRowHeight tab row (* 1.5 ht))
  88.     (foreach c r
  89.       (vla-SetText tab row col (if (numberp c) (rtos c) (vl-princ-to-string c)))
  90.       (setq col (1+ col))
  91.       )
  92.     (setq row (1+ row))
  93.     )
  94.   )


回复

使用道具 举报

67

主题

504

帖子

696

银币

中流砥柱

Rank: 25

铜币
757
QQ
发表于 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-SetTextStyle  tab 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))
        )
)
lisp初级交流群:701625004 欢迎加入,一起进步!!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:06 , Processed in 0.376247 second(s), 68 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表