乐筑天下

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

[编程交流] 输入平面尺寸(MM)

[复制链接]

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:10:16 | 显示全部楼层 |阅读模式
在完成绘制/转换管道草图后,我们运行c:dtext并沿管道输入圆角尺寸(即,如果其为13’-6“我们输入14”),以便让我们的技术人员在执行检查之前了解特定管道的跨度。在处理imperial时,这很容易,没有问题。
 
然而,有时在CAD中,我们使用的是以毫米为单位的施工图,我们必须将这些尺寸转换为英尺。我只是创建了一个可打印的图表,允许我们的用户快速浏览和查看毫米范围,以便他们可以以英尺为单位输入尺寸(即1219-1523mm,我们将为该运行键入4’)。这是可行的,但我想我可以更进一步,帮助我的员工通过编程方式进入这些维度。
 
我已经写了一些东西,我必须感谢塔瓦的代码,他让我写下了至少需要开始的东西。非常感谢!!
 
我现在所做的工作完美无瑕,唯一的问题是我希望我可以修改代码,使其四舍五入,而不是增加英寸。我只想把整数四舍五入到英尺(即13’-6”到14’,18’-2”到18”)。以下是我一直在研究的代码:
 
  1. (defun c:mm2in (/ in ss)
  2. ;; ==================================================    ;;
  3. ;;    Author : Tharwat Al Shoufi .Date: 22.Nov.2014    ;;
  4. ;;    Converts Text Strings from Millimeter to Inch    ;;
  5. ;; ==================================================    ;;
  6. (if (setq in (/ 1. 25.4)
  7.            ss (ssget "_:L"
  8.                      '((0 . "TEXT,MTEXT")
  9.                        (1 . "1*,2*,3*,4*,5*,6*,7*,8*,9*,x*,X*")
  10.                       )
  11.               )
  12.      )
  13.    ((lambda (x / sn e s a)
  14.       (while (setq sn (ssname ss (setq x (1+ x))))
  15.         (entmod
  16.           (subst
  17.             (cons
  18.               1
  19.               (if (wcmatch
  20.                     (setq
  21.                       a (strcase
  22.                           (substr
  23.                             (setq
  24.                               s (cdr (assoc 1 (setq e (entget sn))))
  25.                             )
  26.                             1
  27.                             1
  28.                           )
  29.                         )
  30.                     )
  31.                     "X*"
  32.                   )
  33.                 (if (/= (atof (substr s 2)) 0.)
  34.                   (strcat a (rtos (* (atof (substr s 2)) in) 4 0))
  35.                   s
  36.                 )
  37.                 (rtos (* (atof s) in) 4 0)
  38.               )
  39.             )
  40.             (assoc 1 e)
  41.             e
  42.           )
  43.         )
  44.       )
  45.     )
  46.      -1
  47.    )
  48. )
  49. (princ)
  50. )
  51. ;; ==================================================    ;;
  52. ;;    Author : T.Melancon Date: 27Jun2017    ;;
  53. ;;    Allows user to enter MM in plain text then converts to FT               ;;
  54. ;;    Loops so user can enter multiple dimensions                                  ;;
  55. ;; ==================================================    ;;
  56. (defun c:dimm()
  57. (setq oldlayr (getvar "clayer"))
  58. (setq t_size 0.08)
  59. (COMMAND "LAYER" "S" "DIM" "")
  60. (WHILE
  61. (SETQ POINT (GETPOINT "\nSpecify Point For Text Insertion..."))
  62. (SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
  63. (command "._text" "L" POINT t_size "0" DIMS)
  64. (sssetfirst nil (ssget "L"))
  65. (C:MM2IN)
  66. )
  67. (SETVAR "CLAYER" OLDLAYR)
  68. (PRINC))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:15:39 | 显示全部楼层
如果你取mm除以304.8,得到的是小数点后的英尺,所以将答案4419=14.5英尺四舍五入,得到15'
 
只需在这里搜索“round”,这里有一些示例。
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:20:24 | 显示全部楼层
比格尔,谢谢你的回复。我一直在努力搜索“round”代码和示例。我不会停止,直到我得到什么。我希望我能更好地理解不同的评价和表达。我将能够更快地解释更多高级代码。我会到达那里。现在我发现了这一点,我认为这是我正在寻找的,我只是努力知道从哪里开始进行调整,并将其放入我现有的代码中。如果你想帮点忙,我会把这件事留给你。我不想来到这里向任何人索要任何东西。我愿意投入这项工作。我会继续努力,看看结果如何。与此同时,看看我在下面找到了什么。。
 
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:23:40 | 显示全部楼层
我得到了它。我回到了基础,从头开始执行,并尽可能地保持基础。如果你们有什么意见,那就太好了。
 
此外,如果有人想在我弄明白之前插话,我注意到任何304mm及以下的结果都显示为0。我想做任何小于304mm的东西来显示为
 
以下是适合我的:
 
  1. (defun c:dimm (/ oldlayr t_size point dims DFT DIMSFT)
  2. (setq oldlayr (getvar "clayer"))
  3. (setq t_size 0.08)
  4. (COMMAND "LAYER" "S" "DIM" "")
  5. (WHILE
  6.    (SETQ POINT (GETPOINT "\nSpecify Point For Dimension Insertion..."))
  7.     (SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
  8.     (SETQ DFT (ATOF DIMS))
  9.     (SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
  10.     (command "._text" "MC" POINT t_size "0" DIMSFT)
  11. )
  12. (SETVAR "CLAYER" OLDLAYR)
  13. (PRINC)
  14. )
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:26:13 | 显示全部楼层
我能找到答案。我只是想和你们分享一下。任何关于改进的建议都将被采纳。总是考虑不同的方法。感谢BIGAL的支持!
 
  1. (defun c:dimm (/ *ERROR* oldlayr t_size point dims DFT DIMSFT)
  2. (setvar "cmdecho" 0)
  3. (defun *error* (msg)
  4.    (if    oldlayr
  5.      (setvar "clayer" oldlayr)
  6.    )
  7. )
  8. (setq oldlayr (getvar "clayer"))
  9. (setq t_size 0.08)
  10. (COMMAND "LAYER" "S" "DIM" "")
  11. (WHILE
  12.    (SETQ POINT (GETPOINT "\nSpecify Point For Dimension Insertion..."))
  13.     (SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
  14.     (SETQ DFT (ATOF DIMS))
  15.     (COND ((< DFT 303)
  16.        (SETQ DIMSFT "<1'")
  17.        (command "._text" "MC" POINT t_size "0" DIMSFT)
  18.       )
  19.       ((> DFT 303)
  20.        (SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
  21.        (command "._text" "MC" POINT t_size "0" DIMSFT)
  22.       )
  23.     )
  24. )
  25. (SETVAR "CLAYER" OLDLAYR)
  26. (PRINC)
  27. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:32:06 | 显示全部楼层
很好,罗恩·琼普,我对它的编码感到非常兴奋,我忘记了假设场景。无论如何,我还添加了-设置颜色为蓝色,以暗淡层,如果它不存在。这就完成了层的创建。干杯
 
  1. (command "LAYER"
  2.    (if (tblobjname "layer" "DIM")
  3.      "S"
  4.      "M"
  5.    )
  6.    "DIM"
  7.    ""
  8. )
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:32:54 | 显示全部楼层
一直在论坛上阅读不同的东西,更新了一些代码。如果有人有什么需要改进的地方,我洗耳恭听:
 
  1. (command "LAYER"
  2.       (if (tblobjname "layer" "DIM")
  3.         "S"
  4.         "M"
  5.       )
  6.       "DIM"
  7.       [color=red]"C"
  8.       "5"
  9.       "DIM"[/color]
  10.       ""
  11. )

 
 
例子:
  1. (defun c:dimm (/ *ERROR* oldlayr dims DFT DIMSFT ent)
  2. (setvar "cmdecho" 0)
  3. (defun *error* (msg)
  4.    (if    oldlayr
  5.      (setvar "clayer" oldlayr)
  6.    )
  7. )
  8. (setq oldlayr (getvar "clayer"))
  9. (command "LAYER"
  10.       (if (tblobjname "layer" "DIM")
  11.         "S"
  12.         "M"
  13.       )
  14.       "DIM"
  15.           "C"
  16.           "5"
  17.           "DIM"
  18.           ""
  19. )
  20. (WHILE
  21.     (SETQ DIMS (GETSTRING "\nEnter Dimensions In MM: "))
  22.     (SETQ DFT (ATOF DIMS))
  23.     (COND ((< DFT 303)
  24.        (SETQ DIMSFT "<1'")
  25.               (setq ent (entmakex
  26.               (list '(0 . "TEXT")
  27.                 (cons 10 '(0 0 0))
  28.                             (cons 40 0.08)
  29.                             (cons 7 (getvar "TEXTSTYLE"))
  30.                             (cons 1 DIMSFT))))
  31.             (command "_cutclip" ent "" "_pasteclip" pause)
  32.       )
  33.       ((> DFT 303)
  34.        (SETQ DIMSFT (STRCAT (RTOS (FIX (/ DFT 304.) 2 0) "'"))
  35.               (setq ent (entmakex
  36.               (list '(0 . "TEXT")
  37.                 (cons 10 '(0 0 0))
  38.                             (cons 40 0.08)
  39.                             (cons 7 (getvar "TEXTSTYLE"))
  40.                             (cons 1 DIMSFT))))
  41.             (command "_cutclip" ent "" "_pasteclip" pause)
  42.       )
  43.     )
  44. )
  45. (SETVAR "CLAYER" OLDLAYR)
  46. (PRINC)
  47. )
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:39:42 | 显示全部楼层
准确地添加线型。当你为一家公司编写代码时,它使标准化层名称等变得更加容易。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:42:46 | 显示全部楼层
好的,我对代码进行了更多的改进,我认为它工作得很好。我的朋友们都很喜欢它,对于那些在论坛上使用它并且喜欢它的人,我希望它能很好地满足你的需要。我现在在文本插入中使用GRREAD。
 
我只是不知道如何以及在哪里编辑代码,这样当用户确实输入MM,但希望退出命令而不是放置FT时,它会删除输入。此时,它只是将条目放在CAD中光标所在的任何位置。看一看,如果你能增值,请插话。谢谢,上帝保佑。
 
  1. (defun laychk (lname col)
  2. (if (not col)
  3.     (setq col "5"))
  4. (if (not (tblsearch "layer" lname))
  5.     (command "layer" "n" lname "c" col lname ""))
  6. (princ))
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

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

铜币
229
发表于 2022-7-5 16:45:34 | 显示全部楼层
Grrrrrrr。。好的,在刚刚使用它之后,我注意到一个问题,显然我写错了这个方法,因为如果用户进入例程,输入值,放置值,然后选择esc退出例程,它总是删除先前添加的实体。当我今天有时间的时候,我会一直努力想办法。
 
我希望例行程序:
1、提示取值
2、允许用户放置值
3.如果用户想要输入更多,则循环
4.esc干净退出,保留以前输入的值或
5.如果用户意外输入另一个值,但不再需要该值
6.点击esc退出例程,然后删除当前在光标(grread)上等待放置的值-保留用户刚刚放置的现有值。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:29 , Processed in 2.416588 second(s), 72 queries .

© 2020-2025 乐筑天下

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