距离在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值。
非常感谢你。
尼古拉斯。 你好
你可以试试我为你做的这个。
(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)
)
当做
塔瓦特 非常感谢你。该程序确实将该行除以我输入的数字。然而,这个计划有点不同。
我想得到距离(绝对值),然后除以350。数字应该四舍五入(即,如果答案是2,则可以,但如果是2.1,则应四舍五入到3或2.5到3或2.6到3等)。
有了这个数字,我可以将原始线除以它,然后放置一条300mm的水平线。沿点(pdmode 66)
希望收到您的来信,
尼古拉斯。 汇总
(if (not
(zerop (rem dist 1.0)))
(setq dist (1+ (fix dist))))
你好
有些修改,但您的选择必须从左到右开始。
(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)
)
当做
塔瓦特
(fix (+ 0.5 x))
要解释消极因素:
(fix (+ x (/ (abs x) x 2.)))
(float (fix (+ 0.5 x))) 我认为OP需要将任何大于0的小数四舍五入为整数。Abs不是必需的,因为变量是从距离函数中获得的。
没错,TWA只是为了完整性 在这里,它再次出现,但在另一种技术和绝对值。。。。
(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