简单绘图计数/总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))
这可能值得研究(快速修正):
(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)
) 李,我将尝试稍微修改一下你的代码(同时保留你所有的原始作者注释和版权),这样它会提示用户实际放置文本,而不是选择。大多数情况下,我们都是从头开始绘制,必须手动输入这些“DWG 1/10”。这就是为什么我设计了我的代码,以它的工作方式;允许用户指定他们想要放置“DWG 1/10”的位置,然后继续处理代码以输入它。如果你赢了我,我很乐意试一试!谢谢你所做的一切!上帝保佑每一个人!继续努力!
如果你把我的代码输入到一个点以上,它会一次完成你所有的标签 罗恩很可爱的代码,但我的基本代码做我需要的。然而,您的代码可以消除用户甚至需要输入“张数”的情况。但是看看我的代码,它和你的有点不同。您可以在每个布局中将字符串设置为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)
)
The whole enchilada Yes. Wow. Of course. I'm full now. Thanks for dinner Lee. No worries! 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