目标:

任意输入五个点,将5个点用pline线相连,并在最短边上绘制一个半圆弧,在最长边上绘制两个相等的圆弧。预期效果如图:

程序:

(defun C:DrawPlineArc(/#iCmdEcho               ;; 人机交互系统变量值#iOsMode                ;; 捕捉方式系统变量值#ptPline1               ;; 多段线的五个顶点#ptPline2#ptPline3#ptPline4#ptPline5#lsPlineList            ;; 多段线数据#dDist1                 ;; 多段线的五段距离#dDist2#dDist3#dDist4#dDist5#lsData                 ;; 用于记录距离和点坐标#dDistMax               ;; 最大距离#dDistMin               ;; 最小距离#ptMinSta               ;; 最小距离起点#ptMinEnd               ;; 最小距离终点#ptMaxSta               ;; 最大距离起点#ptMaxEnd               ;; 最大距离终点#ptMaxMid               ;; 最大距离中点#lsMaxPt                ;; 最大距离关联的所有信息#lsMinPt                ;; 最小距离关联的所有信息);; 获取当前的人机交互和捕捉的状态(setq #iCmdEcho (getvar "CMDECHO"))(setq #iOsMode (getvar "OSMODE"));; 关闭所有捕捉和人机交互(setvar "CMDECHO" 0)(setvar "OSMODE" 0);; 获取多段线点坐标(setq #ptPline1 (getpoint "\n请确定PLine线第一点:")#ptPline2 (getpoint #ptPline1 "\n请确定PLine线第二点:")#ptPline3 (getpoint #ptPline2 "\n请确定PLine线第三点:")#ptPline4 (getpoint #ptPline3 "\n请确定PLine线第四点:")#ptPline5 (getpoint #ptPline4 "\n请确定PLine线第五点:"));setq;; 生成多段线数据列表(setq #lsPlineList (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 5) (cons 70 1) (cons 10 #ptPline1) (cons 10 #ptPline2) (cons 10 #ptPline3) (cons 10 #ptPline4) (cons 10 #ptPline5)); list); setq;; 生成多段线(entmake #lsPlineList);; 计算多段线的五段距离(setq#dDist1 (distance #ptPline1 #ptPline2)#dDist2 (distance #ptPline2 #ptPline3)#dDist3 (distance #ptPline3 #ptPline4)#dDist4 (distance #ptPline4 #ptPline5)#dDist5 (distance #ptPline5 #ptPline1)); setq;; 将距离和对应的一对点坐标合成点对,并将所有的点对组成列表,方便后续数据处理(setq #lsData '())(setq #lsData (cons (list #dDist1 #ptPline1 #ptPline2) #lsData)#lsData (cons (list #dDist2 #ptPline2 #ptPline3) #lsData)#lsData (cons (list #dDist3 #ptPline3 #ptPline4) #lsData)#lsData (cons (list #dDist4 #ptPline4 #ptPline5) #lsData)#lsData (cons (list #dDist5 #ptPline5 #ptPline1) #lsData));setq;; 计算最大和最小距离(setq #dDistMax (max #dDist1 #dDist2 #dDist3 #dDist4 #dDist5)#dDistMin (min #dDist1 #dDist2 #dDist3 #dDist4 #dDist5));setq;; 获取距离最远的两个点坐标,以及两点中点(setq #lsMaxPt (assoc #dDistMax #lsData))(setq #ptMaxSta (cadr #lsMaxPt)#ptMaxEnd (caddr #lsMaxPt)#ptMaxMid (polar #ptMaxSta (angle #ptMaxSta #ptMaxEnd) (* #dDistMax 0.5)));setq;; 获取距离最近的两个点坐标(setq #lsMinPt (assoc #dDistMin #lsData))(setq #ptMinSta (cadr #lsMinPt)#ptMinEnd (caddr #lsMinPt));setq;; 开始绘制圆弧(command "arc" #ptMaxSta "e" #ptMaxMid "a" 180 "")(command "arc" #ptMaxMid "e" #ptMaxEnd "a" 180 "")(command "arc" #ptMinSta "e" #ptMinEnd "a" 180 "");; 还原程序运行前的捕捉和人机交互状态(setvar "CMDECHO" #iCmdEcho)(setvar "OSMODE" #iOsMode);; 消除函数返回值(prin1)
)

AutoLisp从入门到放弃(二十一)相关推荐

  1. AutoLisp从入门到放弃(十一)

    AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...

  2. keras从入门到放弃(二十一)LSTM处理 RNN文本分类

    数据集是航空公司评论数据集 美联航 Twitter 用户评论数据是一个Twitter评论情绪数据,从2015年2月开始抓取的美国航空公司Twitter评论数据,并对每条评论进行情感评价,包括正面.负面 ...

  3. AutoLisp从入门到放弃(十二)

    AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...

  4. AutoLisp从入门到放弃(五)

    AutoLisp从入门到放弃(五) 一.列表(LIST) 1.列表的创建 2.操作列表常用函数 二.DXF组码 1.DXF组码文件基本结构 2.DXF组码值类型 本章将介绍通过AutoLisp代码来查 ...

  5. AutoLisp从入门到放弃(九)

    AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...

  6. AutoLisp从入门到放弃(十四)

    AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...

  7. AutoLisp从入门到放弃(六)

    AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...

  8. AutoLisp从入门到放弃(十)

    AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...

  9. AutoLisp从入门到放弃(七)

    AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...

  10. AutoLisp从入门到放弃(八)

    AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...

最新文章

  1. 骚操作!阿里对业务中台痛下杀手!但却继续推进数据中台?
  2. 十、给小白看的第三篇Python基础教程
  3. CentOS 初体验二十五:redis常用命令:sorted set
  4. Event/window.Event属性和方法
  5. IBM 收购 RedHat(红帽)!340 亿美元
  6. 正则表达式的匹配规则
  7. 【LeetCode 剑指offer刷题】特殊数题3:204 Count Primes
  8. 【交换机在江湖】第十三章 VLAN划分篇
  9. ZZULIOJ部分题目解答
  10. 手把手教你注册谷歌账号 亲测有效 快来学
  11. Java开发16个经典面试问题
  12. 非常实用的10款网站数据实时分析工具(强烈推荐)
  13. 写给两个月前的自己的一封信
  14. 三菱服务器显示d1d2,三菱PLC指令SMOV D2 K2 K2 D1 K3详解
  15. 开源mysql web平台_Yearning Mysql–Web端SQL审核平台
  16. 斯芬克斯(sphinx) mysql全文搜索引擎
  17. 计算机网络实验之Cisco Packet Tracer 实验
  18. python sort 函数和sorted函数的简单区别
  19. 【项目管理案例】第十期:如何做好项目采购管理
  20. NET Framework Cleanup Tool

热门文章

  1. MavLink简单使用
  2. mysql考勤数据库设计_MySQL 数据库设计总结
  3. PHP实战之发送邮件
  4. Laravel5中通过SimpleQrCode扩展包生成二维码实例
  5. Axhub Charts的图表 点击后 无法进行中继器的数据编辑(axure 9)问题解决
  6. STM32异常与中断过程详解
  7. 计算机函数提取班级,老师,execl中的那个提取班级的函数是什么意思?
  8. Arduino使用避障传感器实验
  9. 【一起学UniGUI】--UniGUI介绍(1)
  10. windows依赖服务或组无法启动的解决办法