需要小俯卧撑
大家好我想创建一个lisp例程,它将要求用户选择一条线,然后在同一条线上绘制一个对象(在所选线的相同角度上)。假设对象是一个矩形。虽然物体实际上不仅仅是一个矩形。剩下的我能搞定。我只是不知道如何获得拾取的线的角度和绘制。
我只需要启动这个程序。对于这里的许多Lisp程序冠军来说,这可能是一项非常小的工作。等待一些好的灵魂来解决我的这个问题。
提前谢谢你。
维维安
两种方式:
(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))
第一种仅适用于直线,并使用起点和终点之间的角度。
第二种方法适用于所有曲线对象(直线、样条曲线、圆弧、椭圆等),并在选定点处使用一阶导数。
希望这有帮助,
李 另一种方法:
(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),因为它允许最后/上一个/交叉和选择过滤等输入。
-大卫 谢谢李和大卫
祝你圣诞快乐,新年快乐。
不客气,也祝你圣诞快乐 嘿,伙计们,我又卡住了
我还想得到这条线的长度,这样我就可以提前使用它。
你能帮帮我吗
(默认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)
只需更改此行:
lth(car (distance p10 p11)))
在…上
lth (distance p10 p11))
~'J'~ 维维安,
如果您还没有,请确保查看Visual LISP帮助文件-它们将为您提供所需的大多数LISP函数的正确语法和格式。
我建议您使用Visual LISP编辑器或Notepad++/Vim等创建代码。。
李 另一个问题是(距离)返回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)))
)
-大卫 谢谢大家
页:
[1]
2