我已经在几个不同的长度上做了测试,这应该可以。我只是不知道如何实施它。 也许是这样:
(defun c:xlindistdiv ( / p1 p2 x dx v n num k p pl )
(setq p1 (getpoint "\nPick or specify first point : "))
(setq p2 (getpoint p1 "\nPick or specify second point : "))
(setq dx (fix (1+ (/ (distance p1 p2) 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 x (getint (strcat "\nSpecify number of XLINE factor for division of distance between two picked points < " (itoa dx) " > : ")))
(if (null x)
(setq num (* dx 4200))
(setq num (* x 4200))
)
(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)
)
)
)
(alert (strcat "Created : " (itoa (length pl)) " XLINE entities... (WHEN you press ENTER or clik on OK...)"))
(princ)
)
提示返回了正确的值,但当用enter确认时,由于某种原因,它绘制了太多的xline。当我自己进入同样的价值观时,工作得很好。
我很幸运地编辑了你之前发给我的一段代码!
(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))))
(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)
)
我知道你现在想要什么了。。。很高兴它终于对你起作用了。。。
您好,M.R。 非常感谢马尔科的帮助!真希望我能给你买杯啤酒什么的! 你好,马尔科,
我试图扩展我从您的代码中学到的内容,并尝试开发一个额外的命令/功能。基本上,我希望在绘制xline后再次运行该命令,但方向不同。
此外,我需要使用从第一次运行命令开始的xline之间的距离,而不是使用4200作为所需的距离。
如果我理解正确,我相信您使用x表示xline之间的值。我想添加一个单独的(defun…)但不确定如何从现有代码中提取x值(xline之间的距离)来替换4200值。
否则,我想再次提示“选择或指定第一个点…”在第一条连接线出现后立即显示,然后再次运行整个过程,除了使用连接线之间的距离而不是4200。我解释清楚了吗?这可能有点令人困惑。 我也一直在遵循这个线程,因为我也可以使用这个LISP。
我只是想知道。。。是否可以获得一个额外的选项,使您选择现有直线/线段,而不是拾取两个点?
与输入命令时一样,默认情况下,我可以选择一条直线,但当我输入“P”时,我可以选择两个点,当我再次输入O时,我可以选择一个对象(直线/多线段)。 对于MichaelAllfire(如果我理解正确):
对于后触摸:
尊敬的M.R。 你好,马尔科!
这也是我想要做的。首先,第二个方向的提示是否可能是“指定第一个点”?对于我来说,选择一个新的起点更合适,而不是从第一个方向的第二个点继续。
我之前解释的时候错过了一些东西,哎呀!
在确定第二个方向的连接线数量时,需要执行以下操作(我仅使用字母变量进行解释)。。。
VarA是第一个方向上现有交联线之间的距离。
VarB将为12000/VarA
VarC将为VarB x 1000
该VarC值将代替第二个方向的4200。它将遵循与第一次运行相同的过程,并且在划分为第二个方向的距离后,需要向上舍入到最近的整数。这个整数将为我们提供第二个方向所需的xline数。
我希望这有意义。到目前为止,你帮了我很大的忙!
页:
1
[2]