绘制垂直线
救命啊!我试图编写一个快速lisp例程,从用户选择的点绘制一条垂直线:(defun c:lz()
(setq pt1 (getpoint " Pick Point: "))
(setq x (rtos (car pt1)))
(setq y (rtos (cadr pt1)))
(setq pt2 (strcat x "," y ",100"))
(command "line" pt1 pt2 "")
)
e、 g.如果我点击点10,20,它将绘制一条从10,20,0到10,20100的线。
如何在不使用字符串的情况下将pt2变量放入line命令?
谢谢
抢劫 您可以使用(列表(car pt1)(cadr pt1)100)作为pt2 谢谢,7o7。
这是我努力实现的第1阶段,共2阶段:
我有两个视口,一个用于平面,一个用于立面。我使用上面的lz例程在平面图中绘制垂直线。然后切换到高程视口,我想将刚刚创建的直线的z值更改为0,相对于高程视口。
我该怎么做?
谢谢
抢劫
1、从平面垂直画线
2、我切换到前视图中的vport。
3、我想把直线的z值改为0
(defun c:lz()
(setq SnapVal (getvar "osmode"))
(setq pt1 (getpoint " Pick Point: "))
(command "osmode" "0")
(setq pt2 (list (car pt1) (cadr pt1) 100))
(command "line" pt1 pt2 "")
(command "osmode" SnapVal)
)
2需要改进:
1.如果我单击平面图中直线的端点,它会创建一条零长度直线?我在代码中添加了osmode 0,但它并没有解决这个问题。
2.由于舍入精度,直线不是真正垂直的-如果我想用@0,0100代替pt2,我该如何实现? 考虑一下这个mod。
(defun c:lz (/ p1 )
(while (setq p1 (getpoint "\n Pick Point: "))
(entmake (list '(0 . "LINE")(cons 10 p1) (cons 11 (polar p1 (/ pi 2.) 100.))))
)
(princ)
)
谢谢Tharwat,
我已经尝试过这种方法和一些变体,但仍然存在与上面相同的问题:
1?在选择拾取点后,我将osmode 0添加到代码中,但它并没有克服这一问题。
2
有人能帮我解释一下吗?我正在根据平面图绘制许多立面图,在平面图的每一条垂直线上键入@0,0100,这让我慢慢疯了!
抢劫 您应该用一个样例图形或一个快照来描述代码的目的。
你在WCS工作吗? 相对于UCS的垂直线:
(defun c:vl1 ( / p )
(if (setq p (getpoint "\nSpecify point for line: "))
(entmake
(list
'(0 . "LINE")
(cons 10 (trans p 1 0))
(cons 11 (trans (mapcar '+ p '(0 100 0)) 1 0))
)
)
)
(princ)
)
相对于WCS的垂直线:
(defun c:vl2 ( / p )
(if (setq p (getpoint "\nSpecify point for line: "))
(entmake
(list
'(0 . "LINE")
(cons 10 (trans p 1 0))
(cons 11 (mapcar '+ (trans p 1 0) '(0 100 0)))
)
)
)
(princ)
)
页:
[1]