自动绘制公路工程纵断面的AutoLisp程序

通过读取路面桩号的Excel表自动绘制纵剖面图程序(含相应AotuCad图及Excel数据)

这个程序是用于一个乡村道路绘制竣工图时使用的,主要作用是用来画该公路工程道路的纵剖面图。

由于道路剖面图在竣工图绘制中由于是绘制测绘值,数据量极大,公路工程纵剖面图节点非常多,如果照着数据一个一个手工输入绘制,速度慢而且极易出错,可能要用三天时间,如果遇到数据修改,工作量更大。现采用AutoLisp设计程序对原测绘数据形成的Excel表进行自动读取并根据要求绘制,这个程序并调试用了一天,完成后仅用了10分钟即完成图纸绘制。后来的数据调整也用的这个程序,方便快捷。

源程序:

 (defun C:fhgc ()(setq sheet (strcat "Sheet" (itoa (getint "请输入工作表编号:")))num-start (getint "请输入起始行:")num-end (getint "请输入结束行:")file-name "e:\\gc.xlsx"base-point-zh (getpoint "请输入桩号表基准点:")base-point-jggc (getpoint "请输入竣工高程表基准点:")base-point-zdm (getpoint "请输入纵断面图基准点:")base-zh (getreal "请输入基准桩号值:")base-gc (getreal "请输入基准高程值:"));取得数据列表:(setq zdm-list (get-zdm-list(get-gc-list file-name sheet num-start num-end)));画图:(draw-lczh zdm-list base-point-zh base-zh);画里程桩号(draw-jggc zdm-list base-point-jggc base-zh);画竣工高程(draw-zdm zdm-list base-point-zdm base-zh base-gc);画纵断面);取得桩号、高程列表:
(defun get-zdm-list (gc-list)(setq len (length gc-list)zdm-list nil)(setq i (1- len))(while (>= i 0)(setq lczh (atof (substr (vlax-variant-value (nth 0 (nth i gc-list))) 4))jggc (vlax-variant-value (nth 3 (nth i gc-list))))(setq i (1- i))(setq zdm-list (cons (cons lczh jggc) zdm-list))));;读取文件,获得桩号点和高程值(由exel文件提供)列表:
(defun get-gc-list (file-name sheet num-start num-end)(vl-load-com)(setq workbooks (get-workbooks (create-app)))(setq file-ob (open-file workbooks file-name))(setq values(get-values(create-range-ob(get-sheet (get-sheets file-ob) sheet)(get-range-str num-start num-end))));(vlax-invoke-method workbooks "Close");关闭工作薄。;(vlax-invoke-method file-ob "Quit");退出excel对象。;(vlax-release-object file-ob);释放excel对象。(values-to-list values));读取单元格的值:
(defun get-cell-value (app-ob cell)(setq range-str (vlax-get-property app-ob "range" cell))(vlax-variant-value (vlax-get-property range-str "Value")));转换为list:
(defun values-to-list (values)(vlax-safearray->list (vlax-variant-value values)));获取范围对象的值:
(defun get-values (range-ob)(vlax-get-property range-ob "Value"));用指定的字符串创建工作表范围对象:
(defun create-range-ob (sheet-ob range-str)(vlax-get-property sheet-ob "Range" range-str));获取指定的工作表:
(defun get-sheet (sheets sheet)(vlax-get-property sheets "Item" sheet));获取范围字串:(文件排列为:中桩、X、Y、H)
(defun get-range-str (num-start num-end)(strcat "A" (itoa num-start) ":D" (itoa num-end)));获取工作表集合:
(defun get-sheets (file)(vlax-get-property file "Sheets"));打开指定的excel文件:
(defun open-file (workbooks file-name)(vlax-invoke-method workbooks "open" file-name));获取工作薄集合对象:
(defun get-workbooks (app)(vlax-get-property app "workbooks"));创建程序对象:
(defun create-app ()(vlax-get-or-create-object "Excel.Application"));取得竣工高程值:
(defun get-jggc (zdm-list n)(cdr (nth n zdm-list)));取得桩号值:
(defun get-zh (zdm-list n)(car (nth n zdm-list)));取得桩号绘制点:(通用)
(defun get-zh-point (base-point base-zh zdm-list n offset-x offset-y)(cons(+ (car base-point)(- (get-zh zdm-list n) base-zh)offset-x)(cons(+ (car (cdr base-point))offset-y)(cdr (cdr base-point)))));取得里程桩号绘制点:
(defun get-lczh-point (base-point base-zh zdm-list n)(get-zh-point base-point base-zh zdm-list n 6 8));取得竣工高程绘制点:
(defun get-jggc-point (base-point base-zh zdm-list n)(get-zh-point base-point base-zh zdm-list n 6 2));取得纵断面绘制点:
(defun get-zdm-point (base-point base-zh base-gc zdm-list n)(get-zh-point base-point base-zh zdm-list n 0(* (- (get-jggc zdm-list n) base-gc) 5)));画里程桩号表:
(defun draw-lczh (zdm-list base-point base-zh)(prin1 "现在画里程桩号表……")(setq len (length zdm-list)i 0)(while (< i len)(command "text"(get-lczh-point base-point base-zh zdm-list i)"5""90"(get-zh-str (get-zh zdm-list i))"")(setq i (1+ i))));整理桩号文字:
(defun get-zh-str (zh)(setq zh-str (rtos zh 2 1)zero-str "")(setq str-len (strlen zh-str))(repeat (- 5 str-len) (setq zero-str (strcat "0" zero-str)))(strcat "+" zero-str zh-str));画竣工高程表:
(defun draw-jggc (zdm-list base-point base-zh)(prin1 "现在画竣工高程表……")(setq len (length zdm-list)i 0)(while (< i len)(command "text"(get-jggc-point base-point base-zh zdm-list i)"5""90"(rtos (get-jggc zdm-list i) 2 3)"")(setq i (1+ i))));画纵断面图:
(defun draw-zdm (zdm-list base-point base-zh base-gc)(prin1 "现在画纵断面图……")(setq zdm-points (get-zdm-points base-point base-zh base-gc zdm-list))(draw-zdm-bzd zdm-points)(draw-zdm-lines zdm-points));画标注线:
(defun draw-zdm-bz (zdm-point zdm-zh-str zdm-jggc-str)(command "qleader"zdm-point"@15<45""@3<0"""zdm-zh-strzdm-jggc-str""));画标注点:
(defun draw-zdm-bzd (zdm-points)(setq len (length zdm-list)i 0)(while (< i len)(setq zdm-point (nth i zdm-points))(setq i (1+ i))(command "circle"zdm-point2)));;画道路线:
(defun draw-zdm-lines (zdm-points)(command "_pline")(mapcar 'command zdm-points)(command ""))(defun get-zdm-points (base-point base-zh base-gc zdm-list)(setq len (length zdm-list)i (1- len)zdm-points nil)(while (>= i 0)(setq zdm-point (get-zdm-point base-point base-zh base-gc zdm-list i))(setq i (1- i))(setq zdm-points (cons zdm-point zdm-points))))

以下是用到的部分数据(来自于Excel文件):

以下是绘制出的其中纵断面图:


路线纵断面图-0


路线纵断面图-1


路线纵断面图-2


路线纵断面图-3


路线纵断面图-4


路线纵断面图-5

源代码开源在Github上:https://github.com/OnRoadZy/DrawRoadProfile.git

自动绘制公路工程纵断面的AutoLisp程序相关推荐

  1. 我在小程序工程化方面的一些实践

    我在小程序工程化方面的一些实践 早期做小程序时,还是原始时代,项目结构混乱,各种冗余代码,每次迭代时由于高昂的维护成本,极为头疼.遂在一次次的更迭中完成了基础组件的初版,极为酸爽.从此之后在当时的情况 ...

  2. 《公路工程适应自动驾驶附属设施总体技术规范(征求意见稿)》公开征求意见...

    来源:车东西 设专用车道和标识,高精地图至少3个月一更新. 文|Juice 车东西4月28日消息,随着国内自动驾驶技术的不断发展,越来越多的车企和自动驾驶公司都开始在道路上进行自动驾驶测试了. 为此, ...

  3. 程序适用范围:直线、圆曲线、相等缓和曲线、不等缓和曲线、卵型曲线等公路工程上常见的平面线型号,均能在同一个程序内计算。

    该程序只需一次建立数库, 即可进行任意线路位置 中边桩坐标计算. 程序适用范围:直线.圆曲线.相等缓和曲线.不等缓和曲线.卵型曲线等公路工程上常见的平面线型号,均能在同一个程序内计算.    二: 适 ...

  4. lisp地物代码_一种用AutoLISP程序绘制独立地物的方法

    赵龙 摘 要:在地图上无法按照比例表示的一些地物,统称为独立地物.它一般高出于其他建筑物,具有明显的方位意义,对地图定向.判断方位等意义较大.独立地物因无法依真型显示,所以大都用几何符号来表示.在地图 ...

  5. 自动修改线为指定宽度的AutoLisp程序

    给一段自动修改线为指定宽度的AutoLisp程序 问题的提出 实现目标 实现代码 使用方式 后记 问题的提出 在用AutoCAD绘图时遇到需要修改别人画好的图的各种线为指定宽度的问题.我们都知道应该用 ...

  6. cad批量等高线lisp,利用AUTOLISP自动绘制等高线的尝试

    利用A U T O L ISP自动绘制等高线的尝试 吕坚明 (金华市测绘院,浙江金华 321000) 摘 要:本文简述了在A U T O CAD中自动绘制等高线的方法,并给出了简易的数据格式和相应A ...

  7. 计算机绘制轴类零件图,轴类零件工序图自动绘制的方法和系统研究

    摘要: 计算机辅助工艺设计(Computer Aided Process Planning)是连接CAD/CAM的桥梁,是实现CIMS的关键环节,鉴于CAPP在制造业中的重要地位,一直成为国内外学者关 ...

  8. 如何根据离散点自动绘制等值线(等高线)之 三角形法

    转自:http://blog.csdn.net/lifei/article/details/3563 自动绘制等值线的方法从技术方向上看可以分为两大类,插值和曲线拟合.其中曲线拟合总的来说效果不如插值 ...

  9. 微信小程序(微信开发者工具及工程创建、小程序配置、逻辑层、模块化)

    一.阶段概述 1.课程安排 课程市场:14+1 课程安排:微信小程序:5uniapp:5数据可视化:4答辩:1 2.项目展示 小u商城 数据可视化 3.阶段目标 1.培养学员能力独立完成小程序原生开发 ...

最新文章

  1. 005_控制器和动作
  2. VTK修炼之道19:图像基本操作_图像像素值的访问与修改
  3. word List 07
  4. oracle 字段以逗号结尾的更新 数据库_Oracle数据库某个字段的值为逗号分隔的多个值组成的字符串,以一个多选的下拉框进行查询...
  5. 下载丨 MySQL运维管理+编程开发大全
  6. Python中定时任务框架APScheduler的快速入门指南
  7. html中img显示旋转,css如何实现图片的旋转展示效果(代码示例)
  8. Jmeter 调用python3脚本
  9. 调用Yahoo API监控外汇汇率
  10. 进制和ASCII转换工具
  11. R语言逻辑回归的预测概率怎么算
  12. 上海域格LTE模块CLM920_JC3贴片SIM卡双卡切换
  13. stm32 HardFault_Handler调试及问题查找方法——飞思卡尔
  14. 死磕源码系列【springboot项目打印is not eligible for getting processed by all BeanPostProcessors (for example: n
  15. 比较过才知道差别有多大,Win7与Win10,究竟哪个更适合日常使用?
  16. python中的汉字编码(转载,已经注明转载地址)
  17. 安其拉开门最快的服务器,魔兽世界:怀旧服安其拉开门压力测试周四开放,位面已成最大问题...
  18. java中的DOM4J解析XML
  19. 一个总经理的11个经典面试问题 (转载)
  20. 将JPG,PNG图像转为ktx2

热门文章

  1. 亚马逊国际站获取商品列表
  2. 数据库(MySQL + Redis)
  3. 如何读取NIFTI格式图像(.nii文件)
  4. 设计原则—KISS原则和YAGNI原则
  5. 中国的人工智能是否能在2030年引领世界?
  6. 惊闻!港媒:中国首艘航母海试时间延后1个月(图)
  7. 输入姓名并分别输出姓和名
  8. CSDN这个家比博客园温馨好多啊,我要搬家了。。。
  9. 动态链接函数dlsym()的参数RTLD_NEXT使用注意事项
  10. 去掉图片水印方法 小技巧