autocad是目前国内应用最广范的cad系统之一,autocad 功能强大,是一个通用的cad平台,但是如果不根据本专业的需要进行二次开发,使用起来是很不方便的。画对称中心线是机械设计中经常遇到的一个问题。
笔者用autolisp依据国家标准开发了两个程序,可以很方便地解决直线对称中心线的问题。
第一个程序适用于两条边是连续直线的情况。使用方法是:用load命令装入gls.lsp,运行c:gsl,依据屏幕提示,分别选择两边, 自动绘制出中心线。
gsl.lsp:
(defun mid(pt1 pt2 ) 计算两点之中点的功能函数
(setq pt (mapcar'+pt1 pt2 ))
(setq pt (mapcar'/pt'(2 2 2)))
)
(defun c:gsl/m cl1 cl cl2 e pt pt1 pt2 pt3 pt4 a) (setq m 1)
(while m
(setq cl1 (entsel\n选择第一条直线 ))
(cond
((not cl1 ) (prompt\n 没有发现实体))
((/=line(cdr (assoc 0 (setqe(entget (car cl1))))))
(prompt\n 所选不是直线)
)
(t (prompt找到了第一条直线”)
(setq m nil);退出循环
)
)
)
(setq cl (ssget (nth 0 (cdr cl1))));取得第一条直线的实体数据
(setq m 1)
(while m
(setq cl2 (entsel\n选择第二条直线))
(if cl2
(if (ssmemb (car cl2) cl )
(progn
(princ\n选择重复,重新选择)
(setq cl2 nil)
)
)
)
(cond
((not cl2 ) (prompt没有发现实体或重复))
((/=line(cdr (assoc 0 (setq e (entget (car cl2))))))
(prompt\n 所选不是直线)
)
(t (prompt\n两条直线已经选择完毕)
(setq m nil);;;退出循环
)
)
)
;;;取得第一直线两端点的坐标
(setq pt1 (cdr (assoc 10 e )) pt2 (cdr (assoc 11 e )))
(setq e (entget (car cl1)));;取得第二条直线的实体数据
;;;取得第二直线两端点的坐标
(setq pt3 (cdr (assoc 10 e )) pt4 (cdr (assoc 11 e )))
;;调整端点
(if (inters pt1 pt3 pt2 pt4 t)
(setq pt pt1
pt1 pt2
pt2 pt
)
)
;;;计算两端中点坐标
(setq pt1 (mid pt1 pt3 ))
(setq pt2 (mid pt2 pt4 ))
(setq a (angle pt1 pt2));计算中心线的倾角
(setq pt2 (polar pt2 a 2.5));;计算中心线的第一个端点
(setq pt1 (polar pt1 (+pi a ) 2.5))
(commandlayerset5);;设置中心线层
(command line pt1 pt2 );;画出中心线
)
(princ \nc:gsl has loaded)
(princ \n for symmetry line)
(princ)
第二个程序适用于阶梯轴,阶梯孔等各种情况。使用方法是:用load命令装入gls1.lsp,运行c:gsl1,依据屏幕提示,分别选择两边的端点, 自动绘制出中心线。
gsl1.lsp
(defun mid(pt1 pt2 )
(setq pt (mapcar '+ pt1 pt2 ))
(setq pt (mapcar '/ pt '(2 2 2)))
)
(defun c:gsl1(/ p1 p1 p3 p4 a )
;;保存环境变量
(setq os (getvar osmode))
(setq cm (getvar cmdecho))
;;设置环境变量
(setvar osmode 33)
(setvar cmdecho 0)
;;依次读取两条直线的端点
(initget 1)
(setq p1 (getpoint\n选择第一条直线的第一个点))
(initget 1)
(setq p2 (getpoint\n选择第一条直线的第二个点))
(initget 1)
(setq p3 (getpoint\n选择第二条直线的第一个点))
(initget 1)
(setq p4 (getpoint\n选择第二条直线的第二个点))
;;;;恢复环境变量
(setvar osmode os)
(setq p1 (mid p1 p3 ))
(setq p2 (mid p2 p4 ))
(setq a (angle p1 p2))
(setq p2 (polar p2 a 2.5))
(setq p1 (polar p1 (+ pi a ) 2.5))
(command layer set 5 )
(command line p1 p2 )
)
(princ \nc:gsl1 has loaded)
(princ \n for symmetry line)
(princ)
千元级智能新机 HTC Explorer发布
PCB行业出现波动 三大向好信号
2022慕尼黑上海电子展同期论坛汇总精彩预告
Leetcode上第11号问题:盛最多水的容器
又是第一,华为Mate9在美测试网站夺冠
新概念画机械图
监控数据保存遇难题,云存储如何帮助解决问题
豹米2代母婴版评测 整机显得更加优雅小巧
行货3G 索尼爱立信W508c售价跌破1500元
亚洲工业市场规模已达44亿美元,ST打算吞下这块“肥肉”
这个雷达方程是怎么推导出来的呢?
网络爬虫的概念及其工作原理说明
龙芯案有了新进展
浅谈有限空间管理系统对安全的重要性
半导体所在硅上In线的光致相变机理研究中获进展
基于单片机的智能感应灯设计
一部海信阅读手机A5Pro 健康读遍万卷书 双11钜惠不读不型
浅谈基于RFID的酒类EPC标签
无源无损软开关三电平CUK电路
芯片精灵检测不到芯片型号的原因