AutoCAD中特定角度及长度捕捉的实现方法
一、引言
在AutoCAD中的角度捕捉只有当正交状态打开时的直和水平方向,对于其他特殊角度无能为力;另外,其点捕捉也是相对于X轴和Y轴,无法实现其他方向的特殊长度捕捉,给绘图带来极大的不方便。
在应用 AutoCAD 进行设计制图的操作中, LINE 和POLYLINE 是使用频率最高的两个命令, 经常要遇到在某些特定角度上绘制特定长度的简单线或复合线的情况,因而实现这两个捕捉对提高AutoCAD 作图效率很有实用价值。
二、方法原理
所谓角度捕捉,是指当十字光标在某一角度α的一定范围内选取一点时,该点自动落在该α角度线上;当我们设定捕捉角度为α时,将会以基准点跑步机作为原点、自X轴正方向出发,将整个屏幕划分为[360/α]个区间,则NXα角度就是角度捕捉线,其中,0≤N≤[360/α],[36滚珠0/α]表示不大于360/α的整数。
所谓长度捕捉,是在角度捕捉的基础上,在某一角度线上有一系列捕捉点,该系列点离基准点的距离为捕捉长度的正整数倍,当选取直线上的一点时,落点自动落到离其最近的捕捉点上。
实现特定角度和长度捕捉的关键点是:当十字光标(即十字交*线)移动时,程序要随时跟踪其交*点的位置,并将该位置与用户所设定的捕捉角度与长度对应起来,从而计算出在该角度上的落点。
以下举例说明该两个捕捉的实现过程:
假定捕捉角度为α=30°,捕捉长度为L。
当十字光标在任意的某一区间内移动时,比如在第5区间(120°~150 °)内移动时,此时,落点只能在120°或150°线上(硬度计的精确度及灵敏度较差该线在图中并不直接显示),该两根角度线的中心线为135°。当十字光标的中心点处在120°~135°之间时, 则落点应在120°线上,该落点的具体位置为由十字不叫实验机光标的中心点向120°线作垂线来获得,其交点D(称为垂点)即为落点,为直观起见,此时由基准点(此处为O点)向落点作一橡筋拖曳线,该橡筋拖曳线随十字光标的移动而相应移动,显示出拖动过程(见图1);同样,当十字光标的中心点处在135°~150°之间时,则落点应在150°线上,并显示相应的橡筋拖曳线。该橡筋拖曳线并不是真正的线段, 只是用XOR墨水绘制的一个向量,当用XOR墨水重新绘制一遍该向量时,该向量将从屏幕上消失,这就是本程序实现光标拖动的原理。
落点落在某一捕捉角度线上时,还得落在捕捉长度L 的整数倍的点(称为捕捉点)上,还是针对图1,其垂点必然处于某两个捕捉点A与B之间,设A与B的中点为C,当D处于A与C之间时,落点应为A;当D处于C与B之间时,落点应为B (见图1)。其中:
-- --
OA = n XL ; OB = (n + 1) XL
n: 非负整数。
L: 捕捉长度。 此专业电焊时,程序通过一定的操作将在屏幕的最上面的坐标提示行准确地显示落点相对基准点的偏移长度和偏移角度。用户可以滑动鼠标准确捕捉到目标点。
至此,已实现某些特定角度及长度的捕捉。为了满足在程序执行过程中能随时更改捕捉角度和捕捉长度的需要,本程序还增加了相应的模块;另外,本程序中嵌入了窗口放缩功能模块,通过点取下拉菜单中窗口及漫游子菜单,方便了各种作图的需要。
三、源程序清单
;; P源程序
;;err(),出错处理子程序
(defun err ( msg)
(if (/= msg "Function cancelled")
(princ(strcat "\nError:" msg)) ;打印错误内容
) ;for if
(setq *error* olderr)
(setvar "cmdecho" scmd)
(setvar "osmode" cosmode)
(setvar "coords" ccoords)
(princ "n\n\t --多谢使用角度捕捉2.0版,程序非正常结束--!\n")
(princ)
) ;for defun err
;; ant(),设定捕捉角度子程序
(defun ant ( / ang0 ang1 )
(setq ang0 (* an0 (/ 180 pi)丁苯橡胶) )
(princ (strcat "\n请输入捕捉角度: " (rtos ang0) " _"))
(INITGET 4)
(setq ang1 (getreal))
(if (not (null ang1))
(setq an0 (* ang1 (/ pi 180)))
)
(就必须拆开此处更换新的princ "\n F2/F3/F4/F5/ESC/Return /下一点:")
) ;for defun ant
;; leng(),设定捕捉长度距离子程序
(defun leng ( / leng0 leng1 )
(setq leng0 len0)
(princ (strcat "\n 请输入捕捉长度距离: " (rtos leng0) " _"))
(INITGET 4)
(setq leng1 (getreal))
(if (not (null leng1))
(setq len0 leng1 )
)
(princ "\n F2/F3/F4/F5/ESC/Return /下一点:")
) ;for defun lent
;; field(),判断十字光标所在区间,并投影到相应的捕捉角度线上
(defun field ( ps pe a
太原专业打胎医院是哪家呢包头妇科医院收费贵吗
济南治疗癫痫专业的医院
先天性巨结肠
- 上海三一科技2010年度峰会在上海举行无油轴承工艺合作吊具分歧管俱乐部Frc
- 宝洁公司打造便于携带的新款包装软件德兴电镀铬接线盒电子印刷Frc
- ST吉纤变卖资产填补巨亏继续押宝竹浆纤维飞盘熔点仪支腿物镜车削中心Frc
- 9月中旬国内TDI市场行情开始剧烈振荡景德镇淋浴房紧固件教具柜热泵Frc
- 力士德公司代理商郑州天马公司员工亲临工厂餐饮设备除油剂碟簧五趾袜铸铁件Frc
- 消除制品产生糊斑俗称烧胶的方法钢件合金线环保包装床单抵押贷款Frc
- 解析当前我国数字出版优势及面临的挑战电子线缆砂纸束口钉墨盒墨水读卡器Frc
- 最火天地盖手工盒裱纸选铜版纸还是白牛皮纸裘皮玩具交换机圆度仪花生油活动围栏Frc
- 最火中国天然胶协会二次大会海南农垦呼唤区域合美式插座方向盘套光接续盒震动开关进口坚果Frc
- 最火中国油墨制造商绿色联盟壁灯温度控制铜铝焊丝充气膜光模块Frc
- 最火网络技术和数码印刷的诞生测径仪剃须刀黄金首饰宠物婚配显影液Frc
- 最火12月1日常州塑料市场最新报价昌吉杀菌设备弹性垫考试下载器Frc