交点快速标注
请教交点快速标注指定第一点,
指定第二点,(与虚线相交对象的交点标注)
指定标注的位置
指定引线的位置点
请高手编个程序
结果如下图:
张大锤 发表于 2018-6-1 16:33
我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点
inters 我也不怎么会这个也是我前天刚搞出来的,用会的函数硬怼出来的,凑合用吧!
坐标转换 trans 这个是试出来的 不知道怎么用
那位大大 能写几个简单的trans例子给我学习下
;;;===选择集实体外矩形框(左下角点与右上角点)
;;;示例 (GetssBox (ssget))
(defun GetssBox (ss / i L l1 l2 ll ur)
(setq L (sslength ss))
(repeat (setq i L)
(vla-getBounDingBox (vlax-ename->vla-object (ssname ss (setq i (1- i)))) 'll 'ur)
(setq l1 (cons (vlax-safearray->list ll) l1)
l2 (cons (vlax-safearray->list ur) l2)
)
)
(mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list l1 l2))
)
;;说明:四舍五入
;;参数:n:要四舍五入的数
;;参数:m:保留的小数位数
;;返回:数值
(defun sswr (n m)
(read (rtos n 2 m))
)
(defun c:asdf ()
(setq jl 100)
(setq jl1 (+ jl 10000))
(setq dxf210 (getvar 'VIEWDIR))
(setq ss_q (ssget "x"));选择所有的图元
(setq ss (ssget '((0 . "LINE"))))
(setq pt (getpoint "\n请点取一个点"))
(setq aa (list (trans (car (GetssBox ss)) dxf210 1) (trans (cadr (GetssBox ss)) dxf210 1)))
(setq max_x (max (car (cadr aa)) (car (car aa))))
(setq min_x (min (car (cadr aa)) (car (car aa))))
(setq max_y (max (cadr (car aa)) (cadr (cadr aa))))
(setq min_y (min (cadr (car aa)) (cadr (cadr aa))))
(cond
((< (cadr pt) min_y);判断pt是否在下
(setq ptt (list (car pt) (- min_y jl1)))
(setq pd "下")
)
((> (cadr pt) max_y);判断pt是否在上
(setq ptt (list (car pt) (+ max_y jl1)))
(setq pd "上")
)
((< (car pt) min_x);判断pt是否在左
(setq ptt (list (- min_x jl1) (cadr pt)))
(setq pd "左")
)
((> (car pt) max_x);判断pt是否在右
(setq ptt (list (+ max_x jl1) (cadr pt)))
(setq pd "右")
)
)
(vl-cmdf "._QDIM" ss "" ptt)
(setq ss_h (ssget "x"));选择所有的图元
(setq xh 0)
(repeat (sslength ss_q);最后一批新的标注
(ssdel (ssname ss_q xh) ss_h)
(setq xh (1+ xh))
)
(cond
((= pd "下")
(vl-cmdf "._MOVE" ss_h "" '(0 0) '(0 10000))
(setq xh 0)
(repeat (sslength ss_h);最后一批新的标注
(setq dxf (entget (ssname ss_h xh)))
(if (= (sswr (cdr (assoc 42 dxf)) 0) 18)
(entdel (ssname ss_h xh))
(progn
(setq dxf (entmod (subst (cons 13 (trans (list (car (trans (cdr (assoc 13 dxf)) dxf210 1)) min_y) 1 dxf210)) (assoc 13 dxf) dxf)))
(entmod (subst (cons 14 (trans (list (car (trans (cdr (assoc 14 dxf)) dxf210 1)) min_y) 1 dxf210)) (assoc 14 dxf) dxf))
)
)
(setq xh (1+ xh))
)
)
((= pd "上")
(vl-cmdf "._MOVE" ss_h "" '(0 0) '(0 -10000))
(setq xh 0)
(repeat (sslength ss_h);最后一批新的标注
(setq dxf (entget (ssname ss_h xh)))
(if (= (sswr (cdr (assoc 42 dxf)) 0) 18)
(entdel (ssname ss_h xh))
(progn
(setq dxf (entmod (subst (cons 13 (trans (list (car (trans (cdr (assoc 13 dxf)) dxf210 1)) max_y) 1 dxf210)) (assoc 13 dxf) dxf)))
(entmod (subst (cons 14 (trans (list (car (trans (cdr (assoc 14 dxf)) dxf210 1)) max_y) 1 dxf210)) (assoc 14 dxf) dxf))
)
)
(setq xh (1+ xh))
)
)
((= pd "左")
(vl-cmdf "._MOVE" ss_h "" '(0 0) '(10000 0))
(setq xh 0)
(repeat (sslength ss_h);最后一批新的标注
(setq dxf (entget (ssname ss_h xh)))
(if (= (sswr (cdr (assoc 42 dxf)) 0) 18)
(entdel (ssname ss_h xh))
(progn
(setq dxf (entmod (subst (cons 13 (trans (list min_x (cadr (trans (cdr (assoc 13 dxf)) dxf210 1))) 1 dxf210)) (assoc 13 dxf) dxf)))
(entmod (subst (cons 14 (trans (list min_x (cadr (trans (cdr (assoc 14 dxf)) dxf210 1))) 1 dxf210)) (assoc 14 dxf) dxf))
)
)
(setq xh (1+ xh))
)
)
((= pd "右")
(vl-cmdf "._MOVE" ss_h "" '(0 0) '(-10000 0))
(setq xh 0)
(repeat (sslength ss_h);最后一批新的标注
(setq dxf (entget (ssname ss_h xh)))
(if (= (sswr (cdr (assoc 42 dxf)) 0) 18)
(entdel (ssname ss_h xh))
(progn
(setq dxf (entmod (subst (cons 13 (trans (list max_x (cadr (trans (cdr (assoc 13 dxf)) dxf210 1))) 1 dxf210)) (assoc 13 dxf) dxf)))
(entmod (subst (cons 14 (trans (list max_x (cadr (trans (cdr (assoc 14 dxf)) dxf210 1))) 1 dxf210)) (assoc 14 dxf) dxf))
)
)
(setq xh (1+ xh))
)
)
)
)
;;;QDIM v1.0 01.20.93
;;;by Raymond Bradley, CIS 71165,2764
;;;c/o Fitschen & Associates
;;;1855 Gateway Blvd., Ste 370
;;;Concord, CA94520
;;;510 686 2400
这个就是和QDIM差不多端点标 我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点 张大锤 发表于 2018-6-1 16:33
我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点
搜索一下有很多相交得交点的lisp 求大神出现~~~ Linhay 发表于 2018-6-1 16:40
inters
感谢感谢 每次到用的时候总是找不到
页:
[1]
2