划分区域/测量i
大家好,我正在寻求帮助,以完成超出我技能水平的事情。为了便于理解,我附上了一张草图。我想做的是。。。
我试图测量两个点之间的距离,分别是P1和P2,并将该距离划分为等距区域,由xline分隔。但是,从第一条和最后一条连接线到点P1和P2的距离需要是每条连接线之间距离的一半。
要选择所需的空格和行数,我需要将P1、P2距离除以一个值(例如4200),然后将该值四舍五入到最接近的整数。该数字将是两点之间所需的连接线数量。
交联线需要垂直于测量的P1、P2距离的方向。
提前感谢!
难道你不需要在没有任何计算的情况下提供XLine的数量(例如4200)吗?然后可以从xline的数量计算出测量值X:X=p1p2/4200,然后从端点得到X/2。。。
你好,Marko,谢谢你的回复!抱歉,我想我用了一些删除和编辑的方式来破坏我的帖子,不习惯在论坛上发帖。
不幸的是,我不认为可以这样做。
4200值是两点之间允许的最大间距(由xline表示)。我将距离除以这个最大间距,这就给出了我将拥有的确切点数(例如,10000mm的距离除以4200得到2.38点)。然而,我不能得到一个点的一部分,所以我需要四舍五入到3。
为了正常计算间距,我将10000除以3,这是xline之间的间距,该值的一半位于点P1和P2的末端。命令的其余部分是在这些位置绘制连接线。
如果有一种方法可以作为命令的一部分进行第一次计算,那么这将大大加快处理速度。 现在我不明白。。。
测试这个快速制作的版本,如果是,请告诉我:
(defun c:xlindistdiv ( / p1 p2 v n num x k p pl )
(setq p1 (getpoint "\nPick or specify first point : "))
(setq p2 (getpoint p1 "\nPick or specify second point : "))
(setq v (mapcar '- p2 p1))
(setq n (polar '(0.0 0.0) (+ (angle '(0.0 0.0) v) (* 0.5 pi)) 1.0))
(initget 7)
(setq num (getint "\nSpecify number of XLINE entities for division of distance between two picked points : "))
(setq x (/ (distance p1 p2) num))
(setq k 0.5)
(repeat num
(setq p (polar p1 (angle p1 p2) (* k x)))
(setq k (1+ k))
(setq pl (cons p pl))
)
(setq pl (reverse pl))
(foreach p pl
(entmake
(list
'(0 . "XLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbXline")
(cons 10 p)
(cons 11 n)
)
)
)
(princ)
)
M、 R。 哇,太快了!
该命令工作良好,因为它正确地用x和半x间距分隔xline。然而,我想要绕过的命令部分是“指定xline实体的数量……”
我希望命令得到两点之间的距离,除以4200,四舍五入到最接近的整数,并将该整数用于“指定xline实体的名称”命令的一部分。这有意义吗?
命令的其余部分工作得很好,不过非常感谢您的宝贵时间! 也许我又错过了什么:
您想指定X距离,而不是指定X线的数量? 很抱歉让人困惑!试着想出一种不让人困惑的解释方法。
当它要求我选择两点时,我需要记住两点之间的距离,除以4200,然后四舍五入到最接近的整数。我需要记住这个号码,然后使用。
所以使用命令我会-
xlindistiv型;
单击指定点1
单击指定点2
该命令将取这两个点之间的距离,除以4200,向上取整,并记住取整后的数字。
然后,该命令将该值用于“指定连接线的数量”,并以与之前相同的方式绘制连接线。
我希望这有点道理。如果没有,请告诉我。再次感谢! 很抱歉让人困惑!试着想出一种不让人困惑的解释方法。
当它要求我选择两点时,我需要记住两点之间的距离,除以4200,然后四舍五入到最接近的整数。我需要记住这个号码,然后使用。
所以使用命令我会-
xlindistiv型;
单击指定点1
单击指定点2
该命令将取这两个点之间的距离,除以4200,向上取整,并记住取整后的数字。
然后,该命令将使用该值重新计算“指定连接线数量”,并将该数字提示为默认连接线数量,并以与之前相同的方式绘制连接线。
我希望这有点道理。如果没有,请告诉我。再次感谢! 对于重新计算部分正确。
这也适用于提示部分,尽管我不认为提示是必要的。然而,这两种方式都可以,所以都很好! 我可能又错了,但我是这样理解的:
(defun c:xlindistdiv ( / p1 p2 x dnum v n num k p pl )
(setq p1 (getpoint "\nPick or specify first point : "))
(setq p2 (getpoint p1 "\nPick or specify second point : "))
(setq x (/ (distance p1 p2) 4200))
(setq dnum (* (fix (1+ x)) 4200))
(setq v (mapcar '- p2 p1))
(setq n (polar '(0.0 0.0) (+ (angle '(0.0 0.0) v) (* 0.5 pi)) 1.0))
(initget 6)
(setq num (getint (strcat "\nSpecify number of XLINE entities for division of distance between two picked points <" (itoa dnum) "> : ")))
(if (null num)
(setq num dnum)
)
(setq x (/ (distance p1 p2) num))
(setq k 0.5)
(repeat num
(setq p (polar p1 (angle p1 p2) (* k x)))
(setq k (1+ k))
(setq pl (cons p pl))
)
(setq pl (reverse pl))
(foreach p pl
(entmake
(list
'(0 . "XLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbXline")
(cons 10 p)
(cons 11 n)
)
)
)
(princ)
)
HTH,M.R。
P、 请注意,默认数字将为4200、8400(2*4200)、12600(3*4200),当第一次除法是用数字4200时,取决于四舍五入的数字。。。
页:
[1]
2