viviancarvalho 发表于 2022-7-6 11:56:59

需要小俯卧撑

大家好
我想创建一个lisp例程,它将要求用户选择一条线,然后在同一条线上绘制一个对象(在所选线的相同角度上)。假设对象是一个矩形。虽然物体实际上不仅仅是一个矩形。剩下的我能搞定。我只是不知道如何获得拾取的线的角度和绘制。
我只需要启动这个程序。对于这里的许多Lisp程序冠军来说,这可能是一项非常小的工作。等待一些好的灵魂来解决我的这个问题。
 
提前谢谢你。
维维安

Lee Mac 发表于 2022-7-6 12:01:33

两种方式:
 

(defun c:test1 (/ ent elst)

(if (setq ent (car (entsel "\nSelect Line: ")))
   (progn
   (setq elst (entget ent))
   
   (print (angle (cdr (assoc 10 elst))
                   (cdr (assoc 11 elst))))))
(princ))



(defun c:test2 (/ ent pt)

(if (setq ent (entsel "\nSelect Line: "))
   (progn
   (setq pt (cadr ent) ent (car ent))

   (print (angle '(0 0 0)
            (vlax-curve-getFirstDeriv ent
                (vlax-curve-getParamatPoint ent
                  (vlax-curve-getClosestPointto ent pt)))))))
(princ))

 
第一种仅适用于直线,并使用起点和终点之间的角度。
 
第二种方法适用于所有曲线对象(直线、样条曲线、圆弧、椭圆等),并在选定点处使用一阶导数。
 
希望这有帮助,
 

David Bethel 发表于 2022-7-6 12:04:52

另一种方法:
(defun c:ldef (/ ss en ed p10 p11 lan)

(while (or (not ss)
            (> (sslength ss) 1))
      (princ "\nSelect 1 Line To Work With:   ")
      (setq ss (ssget (list (cons 0 "LINE")))))

(setq en (ssname ss 0)         ; Entity Name
       ed (entget en)         ; Entity Definition
      p10 (cdr (assoc 10 ed))   ; 1st End Point
      p11 (cdr (assoc 11 ed))   ; 2nd End Point
      lan (angle p10 p11))      ; Angle In Radians

lan)
 
 
我喜欢使用(ssget),因为它允许最后/上一个/交叉和选择过滤等输入。
 
-大卫

viviancarvalho 发表于 2022-7-6 12:07:09

谢谢李和大卫
 
祝你圣诞快乐,新年快乐。

Lee Mac 发表于 2022-7-6 12:10:03

 
不客气,也祝你圣诞快乐

viviancarvalho 发表于 2022-7-6 12:15:53

嘿,伙计们,我又卡住了
我还想得到这条线的长度,这样我就可以提前使用它。
你能帮帮我吗
 
(默认c:as(/ss en ed p10 p11 lan)
(setq osm(getvar“osmode”))
(setvar“osmode”0)
(while(或(非ss))
(>(sslength ss)1)
(princ“\n选择要使用的1行:”)
(setq ss(ssget(list(cons 0“LINE”)))))
(setq en(ssname ss 0);实体名称
ed(entget en);实体定义
p10(cdr(助理10教育));第1个终点
p11(cdr(assoc 11 ed));第二终点
lan(角度p10 p11);角度(弧度)
lth(汽车(距离p10 p11)))
(警报(strcat(rtos lth)“是此行的长度”)
(setvar“osmode”osm)

fixo 发表于 2022-7-6 12:17:26

 
只需更改此行:
lth(car (distance p10 p11)))
在…上
lth (distance p10 p11))
 
~'J'~

Lee Mac 发表于 2022-7-6 12:20:03

维维安,
 
如果您还没有,请确保查看Visual LISP帮助文件-它们将为您提供所需的大多数LISP函数的正确语法和格式。
 
我建议您使用Visual LISP编辑器或Notepad++/Vim等创建代码。。
 

David Bethel 发表于 2022-7-6 12:25:00

另一个问题是(距离)返回3D中的真实距离。
 
(角度)是2D值,可以提取每个平面角度:
 

(setq p10 '(1 4 2)
      p11 '(3 7 5))

(setq
      XY (angle (list (nth 0 p10) (nth 1 p10))
                  (list (nth 0 p11) (nth 1 p11)))

      XZ (angle (list (nth 0 p10) (nth 2 p10))
                  (list (nth 0 p11) (nth 2 p11)))

      YZ (angle (list (nth 1 p10) (nth 2 p10))
                  (list (nth 1 p11) (nth 2 p11)))
    )

-大卫

viviancarvalho 发表于 2022-7-6 12:27:57

谢谢大家
页: [1] 2
查看完整版本: 需要小俯卧撑