乐筑天下

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

[编程交流] 修订代码-尺寸e

[复制链接]

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:35:39 | 显示全部楼层 |阅读模式
我有以下代码:
 
  1. (defun c:chrdim ()
  2.   (setq dl (list '("H" "hor") '("V" "vert") '("A" "aligned")))
  3.   (initget "h H v V a A")
  4.   (setq mode (strcase (getkword "Enter H, V or A for horiz, vert or aligned dimensions: ")))
  5.   (setq mode (cadr (assoc mode dl)))
  6.   (setq p1 (getpoint "\nSelect first point: "))
  7.   (while (eval 'p1)
  8.     (setq p2 (getpoint "\nSelect second point: "))
  9.     (setq p3 (getpoint "\nSelect dimension line location: "))
  10.     (setq ns (getint "\nNumber of spaces?: "))
  11.     (cond ((= mode "hor")
  12.            (setq d (distance p1 (list (car p2) (cadr p1))))
  13.           )
  14.           ((= mode "vert")
  15.            (setq d (distance p1 (list (car p1) (cadr p2))))
  16.           )
  17.           (T
  18.            (setq d (distance p1 p2))
  19.           )
  20.     )
  21.     (setq s (rtos (/ d ns) 4 3))
  22.     (cond ((> (- d (* ns (distof s 4))) 0.1)
  23.               (setq off "%%p")
  24.            )
  25.            ((> (- (* ns (distof s)) d) 0.1)
  26.             (setq off "%%p")
  27.            )
  28.            (T (setq off ""))
  29.      )
  30.      (setq sdim (strcat (itoa ns) " EQ SP @ "
  31.                         s off)                              
  32.      )
  33.      (command "dim" mode p1 p2 p3 sdim "e")
  34.      (setq p1 (getpoint "\nSelect first point, return to exit: "))
  35.   )      
  36. )   
取两点,求差,除以提供的空间数,得出结果。例如,用户在屏幕上选择两个相距35’的点,它们指定10个相等的空间,结果尺寸放置在它们选择的点上,即“10 EQ SP@3'-6”+/-”。
 
它会提示输入所需的等间距,但如果它可以根据最大间距自动提供等间距,那就更好了。可以硬编码或提示最大值。通常最大值是42”。如果默认值为42”,并且能够在需要时更改它,那就太好了。相等空间的数量始终必须是偶数。我有点不知道从哪里开始。有人能给点指导吗?
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 01:14:56 | 显示全部楼层
嗯,花了一些时间在这上面,并找到了答案。有些地方可能很丑陋,但如果有人好奇的话:
 
  1. (defun c:cdim ()
  2.   (setq dl (list '("H" "hor") '("V" "vert") '("A" "aligned")))
  3.   (initget "h H v V a A")
  4.   (setq mode (strcase (getkword "Enter H, V or A for horiz, vert or aligned dimensions: ")))
  5.   (setq mode (cadr (assoc mode dl)))
  6. (setq spacing
  7. (cond
  8.    ((getint (strcat "\nEnter default spacing <" (itoa(setq spacing(cond ( spacing ) ( 42 ))))
  9.          ">: "))
  10.    )
  11.    ( spacing )
  12. )
  13. )
  14.   (setq p1 (getpoint "\nSelect first point: "))
  15.     (while (eval 'p1)
  16.     (setq p2 (getpoint "\nSelect second point: "))
  17.     (setq p3 (getpoint "\nSelect dimension line location: "))
  18.     (cond ((= mode "hor")
  19.            (setq d (distance p1 (list (car p2) (cadr p1))))
  20.           )
  21.           ((= mode "vert")
  22.            (setq d (distance p1 (list (car p1) (cadr p2))))
  23.           )
  24.           (T
  25.            (setq d (distance p1 p2))
  26.           )
  27.     )
  28.     (setq ns 2)
  29.    (while (>= (/ d ns) spacing)
  30.    (setq ns (1+ ns))
  31.    (setq ns (1+ ns))
  32.    )
  33.     (setq s (rtos (/ d ns) 4 3))
  34.     (cond ((> (- d (* ns (distof s 4))) 0.1)
  35.               (setq off "%%p")
  36.            )
  37.            ((> (- (* ns (distof s)) d) 0.1)
  38.             (setq off "%%p")
  39.            )
  40.            (T (setq off ""))
  41.      )
  42.      (setq sdim (strcat (itoa ns) " EQ SP @ "
  43.                         s off)                              
  44.      )
  45.      (command "dim" mode p1 p2 p3 sdim "e")
  46.      (setq p1 (getpoint "\nSelect first point, return to exit: "))
  47.   )      
  48. )   
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:34 , Processed in 0.350088 second(s), 56 queries .

© 2020-2025 乐筑天下

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