新手求一个简单画图程序,请高手不吝赐教。
先根据已知的两个点测出马路的宽度,然后利用马路一条边上的测量点,pline成线,然后根据马路的宽度平移这条线,就能生成马路的图形。请问这个程序该怎么写?谢谢!;;;plst-马路一条边上的测量点,pt-马路另一边上的任一点
(defun drawRoad (plst pt / oldos oldoffset)
(setq oldos (getvar "OSMODE")
oldoffset (getvar "OFFSETDIST")
)
(setvar "OSMODE" 0)
(setvar "OFFSETDIST" -1.0)
(command "_.pline")
(mapcar 'command plst)
(command "")
(command "_.OFFSET" "" (entlast) pt "")
(setvar "OSMODE" oldos)
(setvar "OFFSETDIST" oldoffset)
)
;;;测试程序
(defun c:tt1 (/ tmp rel pt)
(setvar "CMDECHO" 0)
(while (setq tmp (if tmp
(getpoint tmp "\n请输入路边的控制点:")
(getpoint "\n请输入路边的控制点:")
)
)
(setq rel (cons tmp rel))
(if (> (length rel) 1)
(grdraw (car rel) (cadr rel) 1 1)
)
)
(if (and (> (length rel) 1)
(setq pt (getpoint "\n请输入偏移点:"))
)
(drawRoad rel pt)
)
(redraw)
(princ)
)
hb198075 发表于 2012-5-17 09:17 static/image/common/back.gif
我这个先要利用已知的txt数据文件生成一条边,txt格式就是:点号,X坐标,Y坐标,高程忽略。数据开始是两个控制点。后面的就是一条边上的点,这个怎么和这个程序联系起来? 后面的就是一条边上的点,这个怎么和这个程序联系起来? 这个主要是读取文本
READ-LINE 函数看一下 你没提供文本格式,不好写清楚。
我这个是按如下文本格式写的,每行表示一个点,第一个点和第2个点表示计算宽度的两点,从第三点开始才是道路边线,点采用加逗号的形式表示。
还有,建议采用中线坐标点来制作会更简单些,采用边线制作的话还需要指定道路偏移方向的。
(defun drawRoad (plst / oldos oldoffset width lst pt)
(if (> (length plst) 3)
(progn
(setq oldos (getvar "OSMODE")
oldoffset (getvar "OFFSETDIST")
)
(setq width (DISTANCE (car plst) (cadr plst))
lst (cddr plst)
)
(setvar "OSMODE" 0)
(command "_.pline")
(mapcar 'command lst)
(command "")
(redraw (entlast) 4)
(if (setq pt (getpoint "\n请给出道路偏移方向:"))
(command "_.OFFSET" width (entlast) pt "")
)
(redraw)
(setvar "OSMODE" oldos)
(setvar "OFFSETDIST" oldoffset)
)
)
)
;;;测试程序
(defun c:tt2 (/ fpath f pttmp ptlst oldos)
(setvar "OSMODE" 0)
(defun stringToPoint (str / n ix iy rel)
(if (setq n (VL-STRING-SEARCH "," str))
(setq ix (substr str 1 n)
iy (substr str (+ n 2) (- (strlen str) n 1))
rel (list (atof ix) (atof iy))
)
)
)
(setvar "CMDECHO" 0)
(and (setq fpath (getfiled "请选择道路坐标点文件:" "" "txt" 4))
(setq f (open fpath "r"))
(progn
(while (setq pttmp (read-line f))
(if (setq pt (stringToPoint pttmp))
(setq ptlst (cons pt ptlst))
)
)
(close f)
)
)
(drawroad (REVERSE ptlst))
(princ)
)
页:
[1]