使用AUTOCAD自动绘制出中心线

使用autocad自动绘制出中心线
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)

前瞻2020 OPPO开发者大会:或将全面展现OPPO发展布局
iOS11 6月发布预示苹果8即将问世外形设计定型 有图为证
新形势下我国人工智能发展的机遇和挑战
台积电不排除扩厂 无大陆上市计划
小米6无缘双面屏,首发骁龙835
使用AUTOCAD自动绘制出中心线
LG即将推出的新品将颠覆传统屏幕触摸体验 使用双屏无缝拼接设计
如何基于ZWS-IoT低代码开发平台自主搭建一个物联网web应用系统
“停车制动器壳体”铣开档夹具设计
分析小型QFN封装的更高效第二代WiMAX功率放大器设计
东芝或被收购?拆分或收购东芝怎么走
诺基亚9参数,是一个“软硬兼施”的产品
钢铝复合散热器片距的详细介绍
日本考虑对国内电动汽车电池和芯片生产实行税收减免
PLC中模拟量的采集
NVIDIA对其NVIDIA AI平台进行更新 迈来芯推出Tactaxis
plc无线通讯模块怎么编程
高压开关柜无线测温系统设计原理及应用案例分享
谷歌放大招:借vr技术帮助你在曼哈顿大街过圣诞节
GD32330C-START开发板试用体验:+ 串口USART收发数据