nicolas 发表于 2022-7-6 10:47:48

距离在LIS中的应用

你好
 
我有一个小项目,我想创建一个命令,自动确定之间的距离。在一条线上取两个点,然后将结果除以350。如果结果是4.3或4.5,我将其四舍五入到更高的数字,即5(2.3>>4,3.2>>4等),并用该圆形数字分割该线。最后,我必须放置水平线,例如300mm。沿着这些点的长中点。
 
关于距离,我从这个论坛上收集了以下信息:
 
(setq pt1(getpoint“\n点击第一个点”))
(setq pt2(getpoint“\n点击第二个点”))
(setq dist(距离pt1 pt2))
 
以上似乎是明显和正确的。然后如何使用和应用我从上面的程序中获得的dist值。
 
非常感谢你。
 
尼古拉斯。

Tharwat 发表于 2022-7-6 10:53:58

你好
 
你可以试试我为你做的这个。
(defun c:try (/ pt1 pt2 dist absLen Lens Line)
(setq pt1 (getpoint "\nPick First Point")
       pt2 (getpoint "\nPick Second Point")
       dist (distance pt1 pt2)
absLen (abs dist)
)
(setq Lens(getint "\nEnter Number to divide on :")
        )
(setvar 'pdmode 66)
(vl-cmdf "_.line" pt1 pt2 "")
(setq Line (entlast))
(vl-cmdf "_.divide" Line Lens
   "_.erase" Line "")
(princ)
)

 
当做
 
塔瓦特

nicolas 发表于 2022-7-6 10:58:11

非常感谢你。该程序确实将该行除以我输入的数字。然而,这个计划有点不同。
 
我想得到距离(绝对值),然后除以350。数字应该四舍五入(即,如果答案是2,则可以,但如果是2.1,则应四舍五入到3或2.5到3或2.6到3等)。
 
有了这个数字,我可以将原始线除以它,然后放置一条300mm的水平线。沿点(pdmode 66)
 
希望收到您的来信,
 
尼古拉斯。

lpseifert 发表于 2022-7-6 11:04:16

汇总

(if (not
(zerop (rem dist 1.0)))
(setq dist (1+ (fix dist))))

Tharwat 发表于 2022-7-6 11:06:45

你好
 
有些修改,但您的选择必须从左到右开始。
(defun c:try (/ pt1 pt2 dist absLen Lens Line)
(setq pt1 (getpoint "\nPick First Point")
       pt2 (getpoint "\nPick Second Point")
       dist (distance pt1 pt2)
fixDist (fix dist)
fixPT2 (list (+ (car pt1) fixDist)
             (cadr pt1))
)
(setq Lens(getint "\nEnter Number to divide on :")
        )
(setvar 'pdmode 66)
(vl-cmdf "_.line" pt1 fixPT2 "")
(setq Line (entlast))
(vl-cmdf "_.divide" Line Lens
   "_.erase" Line "")
(princ)
)
 
当做
 
塔瓦特

Lee Mac 发表于 2022-7-6 11:12:21

 
(fix (+ 0.5 x))
 
要解释消极因素:
 
(fix (+ x (/ (abs x) x 2.)))

alanjt 发表于 2022-7-6 11:13:51

 
(float (fix (+ 0.5 x)))

lpseifert 发表于 2022-7-6 11:20:16

我认为OP需要将任何大于0的小数四舍五入为整数。Abs不是必需的,因为变量是从距离函数中获得的。

Lee Mac 发表于 2022-7-6 11:25:48

 
没错,TWA只是为了完整性

Tharwat 发表于 2022-7-6 11:26:26

在这里,它再次出现,但在另一种技术和绝对值。。。。
(defun c:try (/ pt1 pt2 dist absLen Lens Line)
(setq pt1 (getpoint "\nPick First Point")
       pt2 (getpoint "\nPick Second Point")
       dist (distance pt1 pt2)
   fixDist (float (fix (+ 0.5 dist)))
   fixPT2 (list (+ (car pt1) fixDist)
            (cadr pt1))
   )
(setq Lens(getint "\nEnter Number to divide on :")
       )
(setvar 'pdmode 66)
(vl-cmdf "_.line" pt1 fixPT2 "")
(setq Line (entlast))
(vl-cmdf "_.divide" Line Lens
      "_.erase" Line "")
(princ)
)
我希望这符合你的需要。。。。。
 
当做
 
塔瓦特
页: [1] 2
查看完整版本: 距离在LIS中的应用