输入平面尺寸(MM)
在完成绘制/转换管道草图后,我们运行c:dtext并沿管道输入圆角尺寸(即,如果其为13’-6“我们输入14”),以便让我们的技术人员在执行检查之前了解特定管道的跨度。在处理imperial时,这很容易,没有问题。然而,有时在CAD中,我们使用的是以毫米为单位的施工图,我们必须将这些尺寸转换为英尺。我只是创建了一个可打印的图表,允许我们的用户快速浏览和查看毫米范围,以便他们可以以英尺为单位输入尺寸(即1219-1523mm,我们将为该运行键入4’)。这是可行的,但我想我可以更进一步,帮助我的员工通过编程方式进入这些维度。
我已经写了一些东西,我必须感谢塔瓦的代码,他让我写下了至少需要开始的东西。非常感谢!!
我现在所做的工作完美无瑕,唯一的问题是我希望我可以修改代码,使其四舍五入,而不是增加英寸。我只想把整数四舍五入到英尺(即13’-6”到14’,18’-2”到18”)。以下是我一直在研究的代码:
(defun c:mm2in (/ in ss)
;; ================================================== ;;
;; Author : Tharwat Al Shoufi .Date: 22.Nov.2014 ;;
;; Converts Text Strings from Millimeter to Inch ;;
;; ================================================== ;;
(if (setq in (/ 1. 25.4)
ss (ssget "_:L"
'((0 . "TEXT,MTEXT")
(1 . "1*,2*,3*,4*,5*,6*,7*,8*,9*,x*,X*")
)
)
)
((lambda (x / sn e s a)
(while (setq sn (ssname ss (setq x (1+ x))))
(entmod
(subst
(cons
1
(if (wcmatch
(setq
a (strcase
(substr
(setq
s (cdr (assoc 1 (setq e (entget sn))))
)
1
1
)
)
)
"X*"
)
(if (/= (atof (substr s 2)) 0.)
(strcat a (rtos (* (atof (substr s 2)) in) 4 0))
s
)
(rtos (* (atof s) in) 4 0)
)
)
(assoc 1 e)
e
)
)
)
)
-1
)
)
(princ)
)
;; ================================================== ;;
;; Author : T.Melancon Date: 27Jun2017 ;;
;; Allows user to enter MM in plain text then converts to FT ;;
;; Loops so user can enter multiple dimensions ;;
;; ================================================== ;;
(defun c:dimm()
(setq oldlayr (getvar "clayer"))
(setq t_size 0.08)
(COMMAND "LAYER" "S" "DIM" "")
(WHILE
(SETQ POINT (GETPOINT "\nSpecify Point For Text Insertion..."))
(SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
(command "._text" "L" POINT t_size "0" DIMS)
(sssetfirst nil (ssget "L"))
(C:MM2IN)
)
(SETVAR "CLAYER" OLDLAYR)
(PRINC)) 如果你取mm除以304.8,得到的是小数点后的英尺,所以将答案4419=14.5英尺四舍五入,得到15'
只需在这里搜索“round”,这里有一些示例。 比格尔,谢谢你的回复。我一直在努力搜索“round”代码和示例。我不会停止,直到我得到什么。我希望我能更好地理解不同的评价和表达。我将能够更快地解释更多高级代码。我会到达那里。现在我发现了这一点,我认为这是我正在寻找的,我只是努力知道从哪里开始进行调整,并将其放入我现有的代码中。如果你想帮点忙,我会把这件事留给你。我不想来到这里向任何人索要任何东西。我愿意投入这项工作。我会继续努力,看看结果如何。与此同时,看看我在下面找到了什么。。
我得到了它。我回到了基础,从头开始执行,并尽可能地保持基础。如果你们有什么意见,那就太好了。
此外,如果有人想在我弄明白之前插话,我注意到任何304mm及以下的结果都显示为0。我想做任何小于304mm的东西来显示为
以下是适合我的:
(defun c:dimm (/ oldlayr t_size point dims DFT DIMSFT)
(setq oldlayr (getvar "clayer"))
(setq t_size 0.08)
(COMMAND "LAYER" "S" "DIM" "")
(WHILE
(SETQ POINT (GETPOINT "\nSpecify Point For Dimension Insertion..."))
(SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
(SETQ DFT (ATOF DIMS))
(SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
(command "._text" "MC" POINT t_size "0" DIMSFT)
)
(SETVAR "CLAYER" OLDLAYR)
(PRINC)
) 我能找到答案。我只是想和你们分享一下。任何关于改进的建议都将被采纳。总是考虑不同的方法。感谢BIGAL的支持!
(defun c:dimm (/ *ERROR* oldlayr t_size point dims DFT DIMSFT)
(setvar "cmdecho" 0)
(defun *error* (msg)
(if oldlayr
(setvar "clayer" oldlayr)
)
)
(setq oldlayr (getvar "clayer"))
(setq t_size 0.08)
(COMMAND "LAYER" "S" "DIM" "")
(WHILE
(SETQ POINT (GETPOINT "\nSpecify Point For Dimension Insertion..."))
(SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
(SETQ DFT (ATOF DIMS))
(COND ((< DFT 303)
(SETQ DIMSFT "<1'")
(command "._text" "MC" POINT t_size "0" DIMSFT)
)
((> DFT 303)
(SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
(command "._text" "MC" POINT t_size "0" DIMSFT)
)
)
)
(SETVAR "CLAYER" OLDLAYR)
(PRINC)
) 很好,罗恩·琼普,我对它的编码感到非常兴奋,我忘记了假设场景。无论如何,我还添加了-设置颜色为蓝色,以暗淡层,如果它不存在。这就完成了层的创建。干杯
(command "LAYER"
(if (tblobjname "layer" "DIM")
"S"
"M"
)
"DIM"
""
) 一直在论坛上阅读不同的东西,更新了一些代码。如果有人有什么需要改进的地方,我洗耳恭听:
(command "LAYER"
(if (tblobjname "layer" "DIM")
"S"
"M"
)
"DIM"
"C"
"5"
"DIM"
""
)
例子:
(defun c:dimm (/ *ERROR* oldlayr dims DFT DIMSFT ent)
(setvar "cmdecho" 0)
(defun *error* (msg)
(if oldlayr
(setvar "clayer" oldlayr)
)
)
(setq oldlayr (getvar "clayer"))
(command "LAYER"
(if (tblobjname "layer" "DIM")
"S"
"M"
)
"DIM"
"C"
"5"
"DIM"
""
)
(WHILE
(SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
(SETQ DFT (ATOF DIMS))
(COND ((< DFT 303)
(SETQ DIMSFT "<1'")
(setq ent (entmakex
(list '(0 . "TEXT")
(cons 10 '(0 0 0))
(cons 40 0.08)
(cons 7 (getvar "TEXTSTYLE"))
(cons 1 DIMSFT))))
(command "_cutclip" ent "" "_pasteclip" pause)
)
((> DFT 303)
(SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
(setq ent (entmakex
(list '(0 . "TEXT")
(cons 10 '(0 0 0))
(cons 40 0.08)
(cons 7 (getvar "TEXTSTYLE"))
(cons 1 DIMSFT))))
(command "_cutclip" ent "" "_pasteclip" pause)
)
)
)
(SETVAR "CLAYER" OLDLAYR)
(PRINC)
) 准确地添加线型。当你为一家公司编写代码时,它使标准化层名称等变得更加容易。 好的,我对代码进行了更多的改进,我认为它工作得很好。我的朋友们都很喜欢它,对于那些在论坛上使用它并且喜欢它的人,我希望它能很好地满足你的需要。我现在在文本插入中使用GRREAD。
我只是不知道如何以及在哪里编辑代码,这样当用户确实输入MM,但希望退出命令而不是放置FT时,它会删除输入。此时,它只是将条目放在CAD中光标所在的任何位置。看一看,如果你能增值,请插话。谢谢,上帝保佑。
(defun laychk (lname col)
(if (not col)
(setq col "5"))
(if (not (tblsearch "layer" lname))
(command "layer" "n" lname "c" col lname ""))
(princ)) Grrrrrrr。。好的,在刚刚使用它之后,我注意到一个问题,显然我写错了这个方法,因为如果用户进入例程,输入值,放置值,然后选择esc退出例程,它总是删除先前添加的实体。当我今天有时间的时候,我会一直努力想办法。
我希望例行程序:
1、提示取值
2、允许用户放置值
3.如果用户想要输入更多,则循环
4.esc干净退出,保留以前输入的值或
5.如果用户意外输入另一个值,但不再需要该值
6.点击esc退出例程,然后删除当前在光标(grread)上等待放置的值-保留用户刚刚放置的现有值。
页:
[1]
2