Tharwat 发表于 2022-7-6 10:43:23

画箭

你好
我制作了这个小Lisp来绘制一个小箭头,但它不适用于垂直或角度方向。那么,有什么想法可以迫使这个Lisp在各个方向都正常工作吗?。
(defun c:arrow (/ p1 Len Alen p2 p3)
(setq p1 (getpoint        "\nSpecify Start point of Arrow:")
   p2 (getpoint p1         "\nSpecify End point of Arrow:")
   dist (distance p1 p2)
   vrt (/ dist 3)
   p3 (list (car p2)(- (cadr p2) vrt))
   p4 (list (car p3) (+ (cadr p3)(* vrt 2))) )
(setq old (getvar 'osmode) new (setvar 'osmode 0))
(vl-cmdf "_.pline" p1 "_w" 0 0 p3 p4 "_c" )
(vl-cmdf "_.-hatch" "_s" (entlast) "" "_p" "_solid" "" "")
(setvar 'osmode old)
(princ))
 
塔瓦特

fixo 发表于 2022-7-6 10:49:25

看看正交模式系统变量
 
~'J'~

Tharwat 发表于 2022-7-6 10:52:44

实际上,由于(cadr值),正交模式不能影响Lisp,或者我可以
将其称为预先设计或预制Lisp。
 
塔瓦特

jammie 发表于 2022-7-6 10:54:58

您可能需要引入一些额外的计算来让它工作。极轴和角度函数应该有用
 
只是一个s示例,使用您的代码
 


   (setqdist (distance p1 p2)
   vrt (/ dist 3))
   (setqpickAngle (angle p1 p2))

   (setq p3 (polar p2 (+ pickAngle (/ pi 2)) vrt))
   (setq p4 (polar p2 (- pickAngle (/ pi 2)) vrt))

      ))
 
可能还有其他考虑,ANGDIR setvar

Michaels 发表于 2022-7-6 10:56:11

谢谢你,杰米,这真的很有帮助。

Tharwat 发表于 2022-7-6 11:02:06

 
谢谢jammie,非常好。
 
我的问候
 
塔瓦特

alanjt 发表于 2022-7-6 11:02:36

为什么不只是绘制一条具有宽度的LW多段线,而不是一条具有图案填充的闭合多段线?
 
快速而愚蠢的示例。。。
 
(defun c:TEst (/ p1 p2)
(if (and (setq p1 (getpoint "\nSpecify first point: "))
          (setq p2 (getpoint p1 "\nSpecify next point: "))
   )
   (progn
   (command "_.pline" "_non" p1 "_w" 0. (/ (distance p1 p2) 3.) "_non" p2 "")
   (setvar 'plinewid 0.)
   )
)
(princ)
)

Tharwat 发表于 2022-7-6 11:07:12

 
我以前曾想过一次,但我想一声大喊就把两只鸟打飞眨眼:
 
首先,了解在我未来的例程中遵循GETPOINT方向的原则。
其次,我的图形具有不同的比例,因此LWPolyline需要手动指定其第二宽度。
 
塔瓦特

alanjt 发表于 2022-7-6 11:10:24

好啊我只是遵循了与你上述惯例类似的原则。

Tharwat 发表于 2022-7-6 11:13:05

哈哈
我相信你的代码不是第一次发布的。当我写最后一封回信时。
 
正当
页: [1] 2
查看完整版本: 画箭