j_spawn_h 发表于 2022-7-6 08:38:16

从点划分绘制一条线

我想选两点(距离),
把他们的分数除以我选择的数字,
然后从这些分割点画一条线,
垂直于我选择的第三个点。
我认为这很容易,但似乎不是我所想的。我从这个开始。
 
(defun C:st (/ pd1 pd2 d2d sp m pd)
(setq pd1 (getpoint "\nSelect first btend: "))
(setq pd2 (getpoint "\nSelect second btend: "))
(setq d2d (distance (cdr (reverse pd1)) (cdr (reverse pd2))))
(setq sp(getreal "\nNumber of spaces between stends? "))
(setq m (/ (cvunit d2d "INCHES" "FEET") (cvunit sp "INCHES" "FEET")))
(setq pd (getpoint "\nSelect line to extend to:"))
(command "_.layer" "s" "s-frm-stend" "" "")
(command "line" m pd ""))

pBe 发表于 2022-7-6 08:52:57

不知道你的意思。发布快照

BlackBox 发表于 2022-7-6 08:59:23

对于前两点,OP似乎希望自动将DIVIDE命令应用于由两点规范和输入偶数创建的(entlast)行,得到类似的结果。第三点我输了。
 
需要更多信息。

GP_ 发表于 2022-7-6 09:06:46

如果我理解正确。。。尝试
 

(defun C:st (/ pd1 pd2 d2d sp step pd)
   (vl-load-com)
   (setq pd1 (trans (getpoint "\nSelect first btend: ") 1 0))
   (setq pd2 (trans (getpoint "\nSelect second btend: ") 1 0))
   (setq d2d (distance pd1 pd2))
   (setq sp (getint "\nNumber of spaces between stends? "))
   (setq pd (vlax-ename->vla-object (car (entsel "\nSelect line to extend to:"))))
   (setq step (/ (distance pd1 pd2) sp))
   (repeat (1- sp)
       (setq pd1 (polar pd1 (angle pd1 pd2) step))
       (entmake (list
                  (cons 0 "LINE")   
                  (cons 8 "s-frm-stend")
                  (cons 10 pd1)
                  (cons 11 (vlax-curve-getClosestPointTo pd pd1 T))
       )      )
   )
)

Tharwat 发表于 2022-7-6 09:09:49

@总成
 
您可以使用以vlax curve-****开头的所有函数,而无需将实体转换为vla对象。

GP_ 发表于 2022-7-6 09:21:27

谢谢你,塔瓦:哎呀:
 
 
我经常忘记把它放在更复杂的lisp中,然后立即插入。。。

j_spawn_h 发表于 2022-7-6 09:23:46

这就是我需要的。我知道我需要某种重复或循环,但不知道如何写作。你们都很棒。我试图自己学习这个程序,但我被难住了。我只是想让你们至少有四分之一的水平。谢谢大家的帮助。我希望将来我能帮助一些人来回报你们所有的帮助。

GP_ 发表于 2022-7-6 09:32:44

 
不客气。
好吧,一个蛋糕或冰淇淋。。。现在
 
 
 
代码清除了不必要的东西。

(defun C:st (/ pd1 pd2 sp step pd)
   (setq pd1 (trans (getpoint "\nSelect first btend: ") 1 0))
   (setq pd2 (trans (getpoint "\nSelect second btend: ") 1 0))
   (setq sp (getint "\nNumber of spaces between stends? "))
   (setq pd (car (entsel "\nSelect line to extend to:")))
   (setq step (/ (distance pd1 pd2) sp))
   (repeat (1- sp)
       (setq pd1 (polar pd1 (angle pd1 pd2) step))
       (entmake (list
                  (cons 0 "LINE")   
                  (cons 8 "s-frm-stend")
                  (cons 10 pd1)
                  (cons 11 (vlax-curve-getClosestPointTo pd pd1 T))
       )      )
   )
)

BlackBox 发表于 2022-7-6 09:42:16

一定要注意以下事项:
 
(distance nil nil)
 
... 使用IF语句可能有助于减少潜在错误:眨眼:
页: [1]
查看完整版本: 从点划分绘制一条线