MichaelAllfire 发表于 2022-7-5 17:44:35

更接近了!唯一需要更改的是“指定连接线实体数…”的默认提示值需要除以4200得到一个较小的数字。例如,默认提示16800将变为4。
 
我已经在几个不同的长度上做了测试,这应该可以。我只是不知道如何实施它。

marko_ribar 发表于 2022-7-5 17:47:50

也许是这样:
(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)
)

MichaelAllfire 发表于 2022-7-5 17:52:15

提示返回了正确的值,但当用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)
)

marko_ribar 发表于 2022-7-5 17:53:52

我知道你现在想要什么了。。。很高兴它终于对你起作用了。。。
 
您好,M.R。

MichaelAllfire 发表于 2022-7-5 17:57:51

非常感谢马尔科的帮助!真希望我能给你买杯啤酒什么的!

MichaelAllfire 发表于 2022-7-5 18:00:41

你好,马尔科,
 
我试图扩展我从您的代码中学到的内容,并尝试开发一个额外的命令/功能。基本上,我希望在绘制xline后再次运行该命令,但方向不同。
 
此外,我需要使用从第一次运行命令开始的xline之间的距离,而不是使用4200作为所需的距离。
 
如果我理解正确,我相信您使用x表示xline之间的值。我想添加一个单独的(defun…)但不确定如何从现有代码中提取x值(xline之间的距离)来替换4200值。
 
否则,我想再次提示“选择或指定第一个点…”在第一条连接线出现后立即显示,然后再次运行整个过程,除了使用连接线之间的距离而不是4200。我解释清楚了吗?这可能有点令人困惑。

Aftertouch 发表于 2022-7-5 18:04:43

我也一直在遵循这个线程,因为我也可以使用这个LISP。
我只是想知道。。。是否可以获得一个额外的选项,使您选择现有直线/线段,而不是拾取两个点?
与输入命令时一样,默认情况下,我可以选择一条直线,但当我输入“P”时,我可以选择两个点,当我再次输入O时,我可以选择一个对象(直线/多线段)。

marko_ribar 发表于 2022-7-5 18:09:01

对于MichaelAllfire(如果我理解正确):
 
对于后触摸:
尊敬的M.R。

MichaelAllfire 发表于 2022-7-5 18:11:23

你好,马尔科!
 
这也是我想要做的。首先,第二个方向的提示是否可能是“指定第一个点”?对于我来说,选择一个新的起点更合适,而不是从第一个方向的第二个点继续。
 
我之前解释的时候错过了一些东西,哎呀!
 
在确定第二个方向的连接线数量时,需要执行以下操作(我仅使用字母变量进行解释)。。。
 
VarA是第一个方向上现有交联线之间的距离。
VarB将为12000/VarA
VarC将为VarB x 1000
 
该VarC值将代替第二个方向的4200。它将遵循与第一次运行相同的过程,并且在划分为第二个方向的距离后,需要向上舍入到最近的整数。这个整数将为我们提供第二个方向所需的xline数。
 
我希望这有意义。到目前为止,你帮了我很大的忙!
页: 1 [2]
查看完整版本: 划分区域/测量i