新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 图形图像 > AutoCAD教程 > 正文:AutoCAD中特定角度及长度捕捉的实现方法

AutoCAD中特定角度及长度捕捉的实现方法

新客网 XKER.COM 2006-11-06 来源: 收藏本文

  (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 ang0 / ang1 n )

  (setq ang1 (angle ps pe))

  (setq n (fix (+ ( / ang1 ang0) 0.5)))

  (setq ang2 (* ang0 n))

 );for defun

 ;; endp(), 十字光标投影到相应的捕捉角度上后,以用户设定的长度

 ;; 捕捉计算落点

 (defun endp ( ps pe ang0 / p1 p2 p3 p4 dis )

  (setq p1 ps

  p2 (polar ps ang0 1)

  p3 pe

  p4 (polar pe (+ ang0 (/ pi 2)) 1)

  )

  (setq pend (inters p1 p2 p3 p4 nil))

  (setq dis (distance ps pe))

  (if ( / = len0 0)

  (setq dist (* (fix (+ (/ dis len0) 0.5)) len0))

  ;else

  (setq dist dis)

  ) ;for if

  (setq pend (polar ps ang0 dist))

 ) ;for defun endp

 ;; drag(), 对上一次显示的拖曳线进行"或"操作,使其从屏幕上消失,

 ;; 并绘制下一次拖曳线

 (defun drag ( pold1 pold2 pold3 / )

  (if ( / = b2 4)

  (progn

  (grdraw pold1 pold2 -1 0)

  (grdraw pold2 pold3 -1 0)

  )

  ) ;for if

  (grdraw pstart pend -1 0)

  (grdraw pend pframe -1 0)

 ) ;for defun drag

 ;; coord(), 在屏幕的最上一行的坐标栏显示长度和角度

 (defun coord ( / str leng1 leng0 ang0)

  (setq ang0 (* ang2 (/ 180 pi)) )

  (setq str (strcat (rtos dist) ">" (rtos ang0)))

  (grtext -2 str)

 ) ;for defun coord

 ;; init(), 对程序进行初始化

 (defun init ( / )

  (setq scmd (getvar "cmdecho"));保留原命令回显方式

  (setq ccoords (getvar "coords"));保留原坐标显示方式

  (setq cosmode (getvar "osmode"))

  (setq olderr *error* *error* err) ;出错处理

  (setvar "cmdecho" 0);不回显

  (setvar "coords" 0) ;不显示坐标

  (setvar "osmode" 0 ) ;取消捕捉

  (setq b 0 b1 0 c '(0 0) )

  (setq pstart (getpoint "\n 请输入直线第一点:"))

  (if (or (null an0 ) (< an0 0) (not (numberp an0)))

  (progn

  (setq an0 (/ pi 6))

  (ant)

  )

  ) ; for if

  (if (or (null len0 ) (< len0 0) (not (numberp len0)))

  (progn

  (setq len0 1)

  (leng)

  )

  ) ;for if

  (if (null len0) (leng))

  (princ "\n F2/F3/F4/F5/ESC/Return /下一点::")

  (setq a (grread 2 nil))

  (setq pframe (cadr a))

  (field pstart pframe an0)

  (endp pstart pframe ang2)

  (grdraw pstart pend -1 0)

  (grdraw pend pframe -1 0)

  (setq plast pframe polde pend)

  (setq b (car a))

 ) ;for defun init

  ;; home(), 设置退出程序的控制变量

 (defun home ( / )

  (setq b 3)

  (setq b1 1)

 ) ;for defun home

 ;; pull(), 接受用户输入控制子程序

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。