Lisp绘制现有标高Li
你好我是lisp循环的新手。我想在地形测量平面图的高程上绘制现有地形线。附着在标高顶部的测量图,获取x坐标以单击测量平面中的点,并输入z坐标。平面上的这些(x,z)将在立面上绘制多段线为(x,y)。图纸单位为毫米,平面图上显示的数据为米。
我试着写lisp如下。我真的不知道如何使用“while”列表。
(defun c:Elevel (/ x1 l1 y1 pt1 x2 l2 y2 pt2)
(setq x1 (rtos (car (getpoint "\nPick Point1: ")) 2 2))
(setq l1 (getreal "\nEnter Level1: "))
(setq y1 (rtos (* l1 1000) 2 2))
(setq pt1 (strcat x1 "," y1))
(while (/= nil
(setq x2 (rtos (car (getpoint "\nPick Point2: ")) 2 2))
(setq l2 (getreal "\nEnter Level2: "))
(setq y2 (rtos (* l2 1000) 2 2))
(setq pt2 (strcat x2 "," y2))
)
(command "_pline" pt1 pt2 "")
(setq pt1 pt2)
)
(princ)
)
提前感谢,
杰克 多段线不连续。和退出错误。谁能帮我修Lisp程序吗? 请帮帮我。。。 像这样的?
(defun c:Elevel (/ l1 p1 l2 p2)
(if (and (setq p1 (getpoint "\nPick Point 1: "))
(setq l1 (getreal "\nEnter Level 1: "))
)
(progn
(setq p1 (strcat (rtos (car p1) 2 2) "," (rtos (* l1 1000.) 2 2)))
(while (and (setq p2 (getpoint "\nPick Point2: "))
(setq l2 (getreal "\nEnter Level2: "))
)
(command "_pline"
"_non"
p1
"_none"
(setq p2
(strcat (rtos (car p2) 2 2) "," (rtos (* l2 1000.) 2 2))
)
""
)
(setq p1 p2)
)
)
)
(princ)
)
是的,差不多吧。
谢谢塔瓦。循环现在可以了。但普林仍不连续。 你只需要选择文字或十字架,如果它有一个Z来获得高程值,这是一个额外的步骤,不需要,如果文字插入在交叉点,那么你可以使用它来计算X,Y。缺少的位是计算点之间的真实距离,我在你的代码中看不到,它可能更容易制作一个点列表,然后一次绘制pline。你是否从一个X,Y,Z的CSV文件中创建了点,那么只使用它,而不拾取任何点会更容易。 你好
此外,您必须深入研究AutoLISP以生成连续多段线。
(setq file (open name "r")) ; Open file for second read
(entmake '((0 . "polyline")
(66 . 1)
(62 . 5)))
(entmake '((0 . "vertex")(10 0 0 0))) ; Set init polyline point
(setq info (read-line file)) ; Read data line
(while (/= info nil)
(setq data (read (strcat "(" info ")")) ; Convert to list
x1 (nth 2 data) ; Point Resist
y1 (car data) ; Y coord (depth)
y2 (* y1 -10) ; Plot Y's downward
x2 (* (* x1 0.2) 10)
) ; end setq
(entmake(list '(0 . "vertex") (list 10 x2 y2 0)))
(setq info (read-line file))
) ; end while
(entmake '((0 . "seqend"))) ; Close polyline 另一个pline例程
(command "_pline")
(while (= (getvar "cmdactive") 1 ) (command pause)
)
试试这个程序,当你完成拣选点时,只需点击回车而不是退出按钮。
(defun c:Test(/ l i l1 p1 l2 p2)
;;; Tharwat 15.03.2015 ;;;
(if (and (setq p1 (getpoint "\nPick Point 1: "))
(setq l1 (getreal "\nEnter Level 1: "))
)
(progn
(setq p1 (list (car p1) (* l1 1000.))
l(cons p1 l)
)
(while (and (setq p2 (getpoint "\nPick Point2: "))
(setq l2 (getreal "\nEnter Level2: "))
)
(setq l (cons (setq p2
(list (car p2) (* l2 1000.))
)
l)
i 0
)
(repeat (1- (length l))
(grdraw (nth i l) (nth (setq i (1+ i)) l) 2 1)
)
)
(entmakex
(append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length l))
'(70 . 0))
(mapcar (function (lambda (p) (cons 10 p))) l)))
)
)
(redraw)
(princ)
)
谢谢塔瓦。lisp可以生成连续多段线,并从世界UCS绘制。但对于高程,我更改了UCS原点并围绕平面绘制高程。这些地形标高是从用户ucs绘制的。但它与用户ucs无关。它离用户ucs很远。我附上了样品图纸。请帮我查一下。谢谢
对于Lisp。图纸
页:
[1]