本帖最后由 cabinsummer 于 2012-4-15 11:51 编辑
今天贴第三个图片中实现的交互式操作,在已有标号附近选择,则自动判定方向,不会与原有的重叠在一起。其实就是控制驱动对话框中的p0、p1那一段。替换即可
- (setq p0 (getpoint "选择标号引线起点:\n"))
- (NEAP p0)
- (cond
- (PF0
- (cond
- ((> (cadr p0)(cadr PF0)) (setq UD 0.5))
- (T (setq UD -0.5))
- )
- (setq p1 (polar PF0 (* pi UD)(* 25.0 scl)) p0 PF0)
- )
- (T
- (setq p1 (getpoint p0 "选择标号放置位置:\n"))
- (NEAP p1)
- (cond
- (PF0
- (cond
- ((> (cadr p1)(cadr PF0))(setq UD 0.5))
- (T (setq UD -0.5))
- )
- (setq p1 (polar PF0 (* pi UD)(* 25.0 scl)))
- )
- (T
- (cond
- ((> (cadr p1)(cadr p0))(setq UD 0.5))
- (T (setq UD -0.5))
- )
- (cond
- ((> (car p0)(car p1))(setq ID_SIDE "R"))
- (T (setq ID_SIDE "L"))
- )
- )
- )
- )
- )
- (defun NEAP (PF / W1 W2 ss edata LR);;;PF附近已有标号则返回最近的标号插入点,同时给出方向ID_SIDE和UD。
- (setq PF0 nil)
- (setq W1 (mapcar '+ PF (list (* 10.0 scl) (* 10.0 scl) 0.0)))
- (setq W2 (mapcar '+ PF (list (* -10.0 scl) (* -10.0 scl) 0.0)))
- (setq ss (ssget "C" W1 W2 '((-4 . "<OR")(2 . "DTL-*")(2 . "STD-*")(2 . "IDT-*")(2 . "ASM-*")(-4 . "OR>"))))
- (if ss
- (progn
- (setq edata (entget (ssname ss 0)) LR (cdr (assoc 2 edata)))
- (setq PF0 (cdr (assoc 10 edata)) ID_SIDE (substr LR (strlen LR) 1))
- )
- )
- )
未完待续…… |