找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 84|回复: 0

两点动态圆弧------(一级)-----

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-6-28 12:16:47 | 显示全部楼层 |阅读模式
  1. ;;两点动态圆弧------(一级)-----
  2. ;功能:给2点画弧,且提示弧长,半径,并支持扑捉,TAB键乒乓开关信息
  3. (defun 2p-dd-arc (p1 p2 / p3 nam nam1 obj nam2 ent ent1 loop bb pt f3 d ang s0 s s1 s2 s3)
  4.   (command "_.undo" "be")
  5.   (setq s0 "\n->动态圆弧 [信息开关(TAB)/扑捉(F3)/定位(Left-Right-Other keys)]")
  6.   (setq p3 (polar (sl:mid p1 p2) (+ (angle p1 p2) pi2) 50) s1 "mm" s2 "..开.." s3 "..关..")
  7.   (make-arc p1 p3 p2) ;3P画弧
  8.   (setq nam (entlast))
  9.   (slmkwz (strcat "R=" (rtos (* (getvar "DIMLFAC") (dxf1 nam 40))) s1) p3 3.0 0 nil "f-i-n-d" nil 6 "m") ;中心定位写字
  10.   (setq ent (entget (setq nam1 (entlast))) obj (en2obj nam1))
  11.   (slmkwz (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1) p3 3.0 0 nil "f-i-n-d" nil 6 "m")
  12.   (setq ent1 (entget (setq nam2 (entlast))))
  13.   (setq loop t f3 (getvar "OSMODE") s s2)
  14.   (princ (strcat s0 "(" s ")"))
  15.   (while loop
  16.     (setq bb (grread t 15 2))
  17.     (setq pt (cadr bb) d (p2uu 20))
  18.     (cond
  19.       ((equal bb '(2 6));F3切换捕捉开关
  20.         (cond
  21.           ((and (< f3 16384) (/= f3 0))
  22.             (setq f3 (+ f3 16384))
  23.             (prompt "\n <对象捕捉 关>")
  24.           )
  25.           ((or (= f3 0) (>= f3 16384))
  26.             (setq f3 16383)
  27.             (prompt "\n <对象捕捉 开>")
  28.           )
  29.         )
  30.         (setvar "OSMODE" f3)(redraw)
  31.       )   
  32.       ((= (car bb) 5)
  33.         (redraw)
  34.         (if (and (<= f3 16384) (> f3 0))
  35.           (setq pt (slosnappt nam pt))
  36.         )
  37.         (setq pt (trans pt 1 0))
  38.         (entdel nam)
  39.         (make-arc p1 pt p2)
  40.         (setq nam (entlast))
  41.         (if (= s s2)
  42.           (progn
  43.             (setq ang (angle-sharp (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv nam (vlax-curve-getparamatpoint nam pt)))))
  44.             (setq pt (polar pt (+ ang pi2) (* 0.7 d)))
  45.             (entmod (emod (emod (emod (emod (emod ent 1 (strcat "R=" (rtos (* (getvar "DIMLFAC") (dxf1 nam 40))) s1)) 10 pt) 11 pt) 40 d) 50 ang))
  46.             (setq pt (polar pt (+ ang pi2) (* 1.3 d)))
  47.             (entmod (emod (emod (emod (emod (emod ent1 1 (strcat "L=" (rtos (* (getvar "DIMLFAC") (sllen nam))) s1)) 10 pt) 11 pt) 40 d) 50 ang))
  48.           )
  49.         )
  50.       )
  51.       ((member bb '((2 9))) ;;table 信息关
  52.         (entdel nam1) (entdel nam2)
  53.         (if (not (vlax-erased-p obj)) (setq s s2) (setq s s3))
  54.         (princ (strcat s0 "(" s ")"))
  55.       )
  56.       ((or t (equal (car bb) 3) (member (car bb) '(11 25)));;左、右、其余键
  57.         (setq loop nil)
  58.       )
  59.     )
  60.   )
  61.   (command "_.undo" "e")
  62.   (redraw)
  63. )
  64. ;;测试-----(需要三领支持测试)
  65. (defun c:tt (/ p1 p2)
  66.   (setq p1 (getpoint "\n 圆弧第一点:")
  67.     p2 (getpoint p1 "\n 圆弧第二点:")
  68.   )
  69.   (2p-dd-arc p1 p2)
  70. )
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 10:02 , Processed in 0.186375 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表