AutoLisp从入门到放弃(二十一)
目标:
任意输入五个点,将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从入门到放弃(二十一)相关推荐
- AutoLisp从入门到放弃(十一)
AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...
- keras从入门到放弃(二十一)LSTM处理 RNN文本分类
数据集是航空公司评论数据集 美联航 Twitter 用户评论数据是一个Twitter评论情绪数据,从2015年2月开始抓取的美国航空公司Twitter评论数据,并对每条评论进行情感评价,包括正面.负面 ...
- AutoLisp从入门到放弃(十二)
AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...
- AutoLisp从入门到放弃(五)
AutoLisp从入门到放弃(五) 一.列表(LIST) 1.列表的创建 2.操作列表常用函数 二.DXF组码 1.DXF组码文件基本结构 2.DXF组码值类型 本章将介绍通过AutoLisp代码来查 ...
- AutoLisp从入门到放弃(九)
AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...
- AutoLisp从入门到放弃(十四)
AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...
- AutoLisp从入门到放弃(六)
AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...
- AutoLisp从入门到放弃(十)
AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...
- AutoLisp从入门到放弃(七)
AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...
- AutoLisp从入门到放弃(八)
AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...
最新文章
- 骚操作!阿里对业务中台痛下杀手!但却继续推进数据中台?
- 十、给小白看的第三篇Python基础教程
- CentOS 初体验二十五:redis常用命令:sorted set
- Event/window.Event属性和方法
- IBM 收购 RedHat(红帽)!340 亿美元
- 正则表达式的匹配规则
- 【LeetCode 剑指offer刷题】特殊数题3:204 Count Primes
- 【交换机在江湖】第十三章 VLAN划分篇
- ZZULIOJ部分题目解答
- 手把手教你注册谷歌账号 亲测有效 快来学
- Java开发16个经典面试问题
- 非常实用的10款网站数据实时分析工具(强烈推荐)
- 写给两个月前的自己的一封信
- 三菱服务器显示d1d2,三菱PLC指令SMOV D2 K2 K2 D1 K3详解
- 开源mysql web平台_Yearning Mysql–Web端SQL审核平台
- 斯芬克斯(sphinx) mysql全文搜索引擎
- 计算机网络实验之Cisco Packet Tracer 实验
- python sort 函数和sorted函数的简单区别
- 【项目管理案例】第十期:如何做好项目采购管理
- NET Framework Cleanup Tool