tmelancon 发表于 2022-7-5 16:14:48

简单绘图计数/总Rou

我从头开始写了一个小程序,效果非常好。我只是想和大家分享一下,看看是否有人会用不同的方式或更有效的方式写它,以及如何写?我完全自学成才,每天都在不断学习(我还有很多路要走)。我从论坛上获得了很多好的建议,但实际上从未正式学习过,所以如果你愿意的话,你可以解释一下自己吗。我总是愿意学习新东西。
 
基本上,我们每天都会画一页又一页的管道和容器。完成后,我们必须创建页面标签(即图1/5、图2/5等)有时我们有25页以上的页面,所以你可以看到复制、粘贴、编辑和修改是多么单调。
 
我知道Lee Macs-NumInc实用程序。我们之所以不使用它,是因为我们将其预设为某个前缀和后缀,因为我们总是对数据点重新编号。我想我可以复制一个副本,然后创建一个单独的命令。然而,我写了一个小的基本例程,我的团队喜欢它。这是直截了当的,切中要害。
 
(DEFUN C:DWG()
(SETQ COUNT (GETSTRING "\nHow many drawings do you have? "))
(SETQ COUNTUP 1)
(setq oldlayr (getvar "clayer"))
(setq t_size 0.08)
(REPEAT (ATOI COUNT)
(SETQ DWGOF (STRCAT "DWG " (TRIM (ITOA COUNTUP)) " OF " (TRIM COUNT)))
(setq point (getpoint "\nPick Text Placement: "))
(command "layer" "s" "text" "")
(command "._text" "L" point t_size "0" DWGOF)
(COMMAND "MOVE" "L" "" "0,0" "0,.05")
(SETQ COUNTUP (1+ COUNTUP))
)
(SETVAR "CLAYER" OLDLAYR)
(PRINC))

Grrr 发表于 2022-7-5 16:22:42

 
这可能值得研究(快速修正):
 

(defun C:DWG ( / count countup oldlayr t_size dwgof point ) ; <<- ALWAYS LOCALISE YOUR VARIABLES UNLESS YOU KNOW WHAT YOU'RE DOING!
(and
   (progn (initget (+ 2 4)) (setq count (getint "\nHow many drawings do you have? <exit> ")) )
   (if (not trim) (prompt "The \"trim\" subfunction is not defined.") T)
   (setq countup 1)
   (setq oldlayr (getvar "clayer"))
   (setq t_size 0.08)
   (progn
   (repeat count
       (setq dwgof (strcat "DWG " (trim (itoa countup)) " OF " (trim (itoa count))))
       (cond
         ( (setq point (getpoint "\nPick Text Placement <next>: "))
         (command "._-layer" "s" "text" "")
         (command "._-text" "L" point t_size "0" DWGOF)
         (command "._-MOVE" "L" "" "0,0" "0,.05")
         (setq countup (1+ countup))
         )
       ); cond
   )
   (setvar "clayer" oldlayr)
   ); progn
); and
(princ)
)

tmelancon 发表于 2022-7-5 16:24:28

李,我将尝试稍微修改一下你的代码(同时保留你所有的原始作者注释和版权),这样它会提示用户实际放置文本,而不是选择。大多数情况下,我们都是从头开始绘制,必须手动输入这些“DWG 1/10”。这就是为什么我设计了我的代码,以它的工作方式;允许用户指定他们想要放置“DWG 1/10”的位置,然后继续处理代码以输入它。如果你赢了我,我很乐意试一试!谢谢你所做的一切!上帝保佑每一个人!继续努力!

BIGAL 发表于 2022-7-5 16:28:52

 
如果你把我的代码输入到一个点以上,它会一次完成你所有的标签

ronjonp 发表于 2022-7-5 16:34:16

罗恩很可爱的代码,但我的基本代码做我需要的。然而,您的代码可以消除用户甚至需要输入“张数”的情况。但是看看我的代码,它和你的有点不同。您可以在每个布局中将字符串设置为0,0。我的代码总是在模型空间中,提示用户指定图纸数量,然后提示用户放置文本(这不是自动的,因为有时我们的标题栏在左侧,有时在右侧)。
 
(defun c:foo (/ _maketext r o n s ll)
;; Creates text "SHEET X OF X" on each paper space tab at 0,0,0
;; RJP - 06.28.2017
(defun _maketext (space point string height width rotation layer)
   (if        point
   (entmakex        (list '(0 . "TEXT")
              '(100 . "AcDbEntity")
              (cons 8 layer)
              (cons 410 space)
              '(100 . "AcDbText")
              (cons 10 (trans point 1 0))
              (cons 40 height)
              (cons 1 string)
              (cons 50 rotation)
              (cons 41 width)
              '(72 . 1)
              (cons 11 (trans point 1 0))
              '(73 . 2)
        )
   )
   )
)
(and (setq r (cdr (assoc -1 (dictsearch (namedobjdict) "acad_layout"))))
      (setq o (itoa (length (setq ll (layoutlist)))))
      (foreach        l ll
(setq n (itoa (cdr (assoc 71 (dictsearch r l)))))
(if (setq s (ssget "x" (list '(0 . "text") '(8 . "Sheet_Numbers") (cons 410 l))))
   (entmod (subst (cons 1 (strcat "SHEET " n " OF " o))
                  (assoc 1 (entget (ssname s 0)))
                  (entget (ssname s 0))
           )
   )
   (_maketext l '(0 0 0) (strcat "SHEET " n " OF " o) 0.125 1 0.0 "Sheet_Numbers")
)
      )
)
(princ)
)

Lee Mac 发表于 2022-7-5 16:38:39

ronjonp 发表于 2022-7-5 16:45:36

 
The whole enchilada

tmelancon 发表于 2022-7-5 16:51:05

Yes. Wow. Of course. I'm full now. Thanks for dinner Lee.

Lee Mac 发表于 2022-7-5 16:52:38

No worries!

tmelancon 发表于 2022-7-5 17:00:40

BIGALL, sorry I am just responding. I type up a response earlier but apparently it didn't submit. We are using layouts (Drawing1, Drawing2, etc..). The "DWG 1 OF ?" is plain text in model space right above our titleblocks. Thanks to everyone for the input! Forever grateful!
页: [1] 2
查看完整版本: 简单绘图计数/总Rou