明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1479|回复: 5

新手求一个简单画图程序,请高手不吝赐教。

[复制链接]
发表于 2012-5-17 08:39:52 | 显示全部楼层 |阅读模式
先根据已知的两个点测出马路的宽度,然后利用马路一条边上的测量点,pline成线,然后根据马路的宽度平移这条线,就能生成马路的图形。请问这个程序该怎么写?谢谢!
发表于 2012-5-17 09:17:01 | 显示全部楼层
  1. ;;;  plst-马路一条边上的测量点,pt-马路另一边上的任一点
  2. (defun drawRoad        (plst pt / oldos oldoffset)
  3.   (setq        oldos          (getvar "OSMODE")
  4.         oldoffset (getvar "OFFSETDIST")
  5.   )
  6.   (setvar "OSMODE" 0)
  7.   (setvar "OFFSETDIST" -1.0)
  8.   (command "_.pline")
  9.   (mapcar 'command plst)
  10.   (command "")
  11.   (command "_.OFFSET" "" (entlast) pt "")
  12.   (setvar "OSMODE" oldos)
  13.   (setvar "OFFSETDIST" oldoffset)
  14. )

  15. ;;;测试程序
  16. (defun c:tt1 (/ tmp rel pt)
  17.   (setvar "CMDECHO" 0)
  18.   (while (setq tmp (if tmp
  19.                      (getpoint tmp "\n请输入路边的控制点:")
  20.                      (getpoint "\n请输入路边的控制点:")
  21.                    )
  22.          )
  23.     (setq rel (cons tmp rel))
  24.     (if        (> (length rel) 1)
  25.       (grdraw (car rel) (cadr rel) 1 1)
  26.     )
  27.   )
  28.   (if (and (> (length rel) 1)
  29.            (setq pt (getpoint "\n请输入偏移点:"))
  30.       )
  31.     (drawRoad rel pt)
  32.   )
  33.   (redraw)
  34.   (princ)
  35. )
 楼主| 发表于 2012-5-17 11:42:46 | 显示全部楼层
hb198075 发表于 2012-5-17 09:17

我这个先要利用已知的txt数据文件生成一条边,txt格式就是:点号,X坐标,Y坐标,高程忽略。数据开始是两个控制点。后面的就是一条边上的点,这个怎么和这个程序联系起来?
发表于 2012-5-17 17:28:05 | 显示全部楼层
后面的就是一条边上的点,这个怎么和这个程序联系起来?
发表于 2012-5-17 22:47:57 | 显示全部楼层
这个主要是读取文本
READ-LINE 函数看一下
发表于 2012-5-18 09:33:15 | 显示全部楼层
你没提供文本格式,不好写清楚。
我这个是按如下文本格式写的,每行表示一个点,第一个点和第2个点表示计算宽度的两点,从第三点开始才是道路边线,点采用加逗号的形式表示。
还有,建议采用中线坐标点来制作会更简单些,采用边线制作的话还需要指定道路偏移方向的。
  1. (defun drawRoad        (plst / oldos oldoffset width lst pt)
  2.   (if (> (length plst) 3)
  3.     (progn
  4.       (setq oldos     (getvar "OSMODE")
  5.             oldoffset (getvar "OFFSETDIST")
  6.       )
  7.       (setq width (DISTANCE (car plst) (cadr plst))
  8.             lst          (cddr plst)
  9.       )
  10.       (setvar "OSMODE" 0)
  11.       (command "_.pline")
  12.       (mapcar 'command lst)
  13.       (command "")
  14.       (redraw (entlast) 4)
  15.       (if (setq pt (getpoint "\n请给出道路偏移方向:"))
  16.         (command "_.OFFSET" width (entlast) pt "")
  17.       )
  18.       (redraw)
  19.       (setvar "OSMODE" oldos)
  20.       (setvar "OFFSETDIST" oldoffset)
  21.     )
  22.   )
  23. )

  24. ;;;测试程序
  25. (defun c:tt2 (/ fpath f pttmp ptlst oldos)
  26.   (setvar "OSMODE" 0)
  27.   (defun stringToPoint (str / n ix iy rel)
  28.     (if        (setq n (VL-STRING-SEARCH "," str))
  29.       (setq ix        (substr str 1 n)
  30.             iy        (substr str (+ n 2) (- (strlen str) n 1))
  31.             rel        (list (atof ix) (atof iy))
  32.       )
  33.     )
  34.   )
  35.   (setvar "CMDECHO" 0)
  36.   (and (setq fpath (getfiled "请选择道路坐标点文件:" "" "txt" 4))
  37.        (setq f (open fpath "r"))
  38.        (progn
  39.          (while        (setq pttmp (read-line f))
  40.            (if (setq pt (stringToPoint pttmp))
  41.              (setq ptlst (cons pt ptlst))
  42.            )
  43.          )
  44.          (close f)
  45.        )
  46.   )
  47.   (drawroad (REVERSE ptlst))
  48.   (princ)
  49. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-23 08:59 , Processed in 0.193113 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表