乐筑天下

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

[编程交流] 单独绘制每个图层

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:14:31 | 显示全部楼层 |阅读模式
你好
我正在寻找一个lisp例程,它将在名为“Plan1”的布局中绘制每个层,
因此,对于布局中的N个可见层,将创建N个打印文件(每个打印文件仅包含一个单独的层)。
我的目标是稍后将其中一些合并并在photoshop中使用。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:21:33 | 显示全部楼层
你好
 
你能详细介绍一下你的计划目标吗?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:25:23 | 显示全部楼层
嗨,塔瓦,
目前,我正在使用这样的东西:
  1.    (setq curTAB (getvar CTAB)
  2.   (setvar CTAB "Plan1")
  3.   (command "-layer" "off" "*" "Y" "")
  4.   (command "-layer" "on" "LAYER1,LAYER2" "")        ;;;;PLOTS SPECIFIED LAYERS
  5.   (COMMAND  "-PLOT" "N" "" "" "" "" "N" "Y")
  6.   (command "-layer" "on" "*" "")
  7.   (setvar CTAB curTAB)

但我不知道如何对每个层重复这个过程(关闭所有层,在打开一个层的情况下执行打印,然后在layerstable中对下一个层执行此操作)。
 
也许最好先获取图层的打印状态(如果其“关闭”或“不可打印”)以跳过它,这样就可以避免使用备用(空)打印文件。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:28:18 | 显示全部楼层
这应该会给你一个推动
 
  1. (setq lay (getvar 'CTAB))
  2. (foreach layout (layoutlist)
  3. (setvar 'CTAB layout)
  4. (while (setq item (tblnext "LAYER" (null item)))
  5.    (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 item)))))
  6.    (cond ((minusp (cdr (assoc 62 eng)));; = off
  7.           ;; do something
  8.          )
  9.          ((eq 1 (cdr (assoc 290 eng))) ;; = Not to plot
  10.           ;; do something here
  11.          )
  12.    )
  13. )
  14. )
  15. (setvar 'CTAB lay)
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:32:10 | 显示全部楼层
谢谢你,塔瓦!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:34:53 | 显示全部楼层
 
祝你好运。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:39:06 | 显示全部楼层
好吧,我被这个困住了:
 
  1. (defun C:test (/ lay item eng fnm)
  2. (setq lay (getvar 'CTAB))
  3. (foreach layout (layoutlist)
  4. (setvar 'CTAB layout)
  5. (while (setq item (tblnext "LAYER" (null item)))
  6.    (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 item)))))
  7.    (cond ((minusp (cdr (assoc 62 eng)));; = off
  8.          (princ "\nThis layer is off") ;; do something
  9.          )
  10.          ((eq 1 (cdr (assoc 290 eng))) ;; = Not to plot
  11.          (princ "\nThis layer is not plottable") ;; do something here
  12.          )
  13.    )
  14.    (command "-layer" "off" "*" "Y" "")
  15.    (command "-layer" "on" eng "")        ;;;;PLOTS SPECIFIED LAYERS
  16.    (COMMAND  "_.PLOT" "_N" "" "" "" (if (= "" (setq fnm (getstring t "\nNAME OF THE FILE <ASD>:"))) "ASD" fnm) "_N" "_Y")
  17.    (command "-layer" "on" "*" "")
  18. )
  19. )
  20. (setvar 'CTAB lay)
  21. (princ)
  22. )
  23.            

 
我找不到合并这些行的方法:
  1.     (command "-layer" "off" "*" "Y" "")
  2.    (command "-layer" "on" eng "")        ;;;;PLOTS SPECIFIED LAYERS

因此,现在例程关闭所有层,并对每个层执行打印(不打开它)。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:41:00 | 显示全部楼层
你好
 
我真的没有测试的代码,由于命令阴谋,所以我希望它能满足您的需要
让我知道你的计划进展如何。
 
  1. (defun c:Test (/ *error* c l lst lay item eng fnm)
  2. ;; Tharwat 25.01.2016    ;;
  3. (defun *error* (msg)
  4.    (if lst
  5.      (foreach x lst
  6.        (entmod (append (entget (tblobjname "LAYER" (car x)))
  7.                        (list (cadr x) (caddr x))
  8.                )
  9.        )
  10.      )
  11.    )
  12.    (if lay
  13.      (setvar 'ctab lay)
  14.    )
  15.    (if (and msg (not (wcmatch msg "*CANCEL*,*EXIT*,*BREAK*")))
  16.      (princ (strcat "\n ** Error : " msg " **"))
  17.    )
  18.    (princ)
  19. )
  20. (while (setq item (tblnext "LAYER" (null item)))
  21.    (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 item))))
  22.          lst (cons
  23.                (list (cdr (assoc 2 item)) (assoc 62 item) (assoc 290 eng))
  24.                lst
  25.              )
  26.    )
  27.    (if (/= (cdr (assoc 2 l)) "DefPoints")
  28.      (entmod
  29.        (append eng
  30.                (list (cons 290 1)
  31.                      (cons 62
  32.                            (if (minusp (setq c (cdr (assoc 62 item))))
  33.                              (- c)
  34.                              c
  35.                            )
  36.                      )
  37.                )
  38.        )
  39.      )
  40.    )
  41. )
  42. (setq lay (getvar 'ctab))
  43. (foreach layout (layoutlist)
  44.    (setvar 'ctab layout)
  45.    (while (setq l (tblnext "LAYER" (null l)))
  46.      (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 l)))))
  47.      (if (/= (cdr (assoc 2 l)) "DefPoints")
  48.        (progn
  49.          (command "_.-layer" "off" "*" "Y" "")
  50.          (command
  51.            "_.PLOT"
  52.            "_N"
  53.            ""
  54.            ""
  55.            ""
  56.            (if (= ""
  57.                   (setq fnm (getstring t "\nNAME OF THE FILE <ASD>:"))
  58.                )
  59.              "ASD"
  60.              fnm
  61.            )
  62.            "_N"
  63.            "_Y"
  64.          )
  65.          (command "-layer" "on" "*" "")
  66.        )
  67.      )
  68.    )
  69. )
  70. (setvar 'ctab lay)
  71. (*error* nil)
  72. (princ)
  73. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:44:36 | 显示全部楼层
谢谢你的帮助Tharwat!
但我仍然遇到了这个问题:例程关闭所有层,并对每个层(不打开它)和每个布局执行打印。
 
如果这有助于简化代码:
我真的不需要它来为每个布局绘图(只指定一个就足够了)。
您可以包括图层表中的所有图层-之间的闭合回路可能存在问题
  1. (cond ((minusp (cdr (assoc 62 eng)));; = off

  1. (command "_.-layer" "off" "*" "Y" "")

主要目标是在不同的位置获得每一层上的线条。pdf文件。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:50:37 | 显示全部楼层
像这样的?
 
注意:根据需要更改程序中布局的名称。
 
  1. (defun c:test (/ *error* _layout c l lst lay item eng fnm vars)
  2. ;; Tharwat 25.01.2016    ;;
  3. (setq _layout [color=magenta]"Plan1"[/color])[color=red];; <- name of layout[/color]
  4. (defun *error* (msg)
  5.    (if lst
  6.      (foreach x lst
  7.        (entmod (append (entget (tblobjname "LAYER" (car x)))
  8.                        (list (cadr x) (caddr x))
  9.                )
  10.        )
  11.      )
  12.    )
  13.    (if vars
  14.      (mapcar 'setvar '(ctab cmdecho clayer) vars)
  15.    )
  16.    (if (and msg (not (wcmatch msg "*CANCEL*,*EXIT*,*BREAK*")))
  17.      (princ (strcat "\n ** Error : " msg " **"))
  18.    )
  19.    (princ)
  20. )
  21. (if (member _layout (layoutlist))
  22.    (progn
  23.      (while (setq item (tblnext "LAYER" (null item)))
  24.        (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 item))))
  25.              lst (cons
  26.                    (list (cdr (assoc 2 item))
  27.                          (assoc 62 item)
  28.                          (assoc 290 eng)
  29.                    )
  30.                    lst
  31.                  )
  32.        )
  33.        (if (/= (cdr (assoc 2 l)) "DefPoints")
  34.          (entmod
  35.            (append
  36.              eng
  37.              (list (cons 290 1)
  38.                    (cons 62
  39.                          (if (minusp (setq c (cdr (assoc 62 item))))
  40.                            (- c)
  41.                            c
  42.                          )
  43.                    )
  44.              )
  45.            )
  46.          )
  47.        )
  48.      )
  49.      (setq vars (mapcar 'getvar '(ctab cmdecho clayer)))
  50.      (mapcar 'setvar '(ctab cmdecho) (list _layout 0))
  51.      (setq l nil)
  52.      (while (setq l (tblnext "LAYER" (null l)))
  53.        (setq eng (entget (tblobjname "LAYER" (cdr (assoc 2 l)))))
  54.        (if (/= (cdr (assoc 2 l)) "DefPoints")
  55.          (progn
  56.            (command "_.-layer" "off" "*" "N" "")
  57.            (entmod
  58.              (append
  59.                eng
  60.                (list (cons 290 1)
  61.                      (cons 62
  62.                            (if (minusp (setq c (cdr (assoc 62 l))))
  63.                              (- c)
  64.                              c
  65.                            )
  66.                      )
  67.                )
  68.              )
  69.            )
  70.            (setvar 'clayer (cdr (assoc 2 l)))
  71.            (command
  72.              "_.PLOT"
  73.              "_N"
  74.              ""
  75.              ""
  76.              ""
  77.              (if
  78.                (= ""
  79.                   (setq fnm (getstring t "\nNAME OF THE FILE <ASD>:"))
  80.                )
  81.                 "ASD"
  82.                 fnm
  83.              )
  84.              "_N"
  85.              "_Y"
  86.            )
  87.            (command "_.-layer" "on" "*" "")
  88.          )
  89.        )
  90.      )
  91.    )
  92.    (princ (strcat "\nLayout < "
  93.                   _layout
  94.                   " > is not found in drawing !"
  95.           )
  96.    )
  97. )
  98. (*error* nil)
  99. (princ)
  100. )

可以从列表中关闭上一层吗?
因此,它将成为每个文件1层:
  1. File 1: Layer1
  2. File 1: Layer2, Layer3
  3. File 2: Layer3, Layer4
  4. File 3: Layer4, Layer5
  5. File 4: Layer5, Layer6
  6. .....
  7. File N: Layer(N-1), LayerN
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 16:39 , Processed in 0.692938 second(s), 83 queries .

© 2020-2025 乐筑天下

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