Nico 发表于 2018-6-1 16:04:42

交点快速标注

请教交点快速标注
指定第一点,
指定第二点,(与虚线相交对象的交点标注)
指定标注的位置
指定引线的位置点

请高手编个程序


结果如下图:

Linhay 发表于 2018-6-1 16:40:29

张大锤 发表于 2018-6-1 16:33
我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点

inters   

taoyi0727 发表于 2018-6-1 16:24:58

我也不怎么会这个也是我前天刚搞出来的,用会的函数硬怼出来的,凑合用吧!
坐标转换 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))
      )
    )
)
)

Andyhon 发表于 2018-6-4 14:27:58

;;;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

taoyi0727 发表于 2018-6-1 16:19:27

这个就是和QDIM差不多端点标

张大锤 发表于 2018-6-1 16:33:10

我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点

Nico 发表于 2018-6-1 16:44:03

张大锤 发表于 2018-6-1 16:33
我比较感兴趣 提问中提到的 交点 如何得到~ 俩个线相交 如何得到交点

搜索一下有很多相交得交点的lisp

CAD小神 发表于 2018-6-4 13:36:22

求大神出现~~~

young-yi 发表于 2018-6-4 14:58:24

张大锤 发表于 2018-6-4 16:39:08

Linhay 发表于 2018-6-1 16:40
inters

感谢感谢 每次到用的时候总是找不到
页: [1] 2
查看完整版本: 交点快速标注