start4444 发表于 2020-3-18 11:07:05

尘缘一生 发表于 2020-3-18 10:57
搞出来了,有点位就知道了

你这个求法不行,13 14点位不一定和横线平行的,angle 14 13那个角度不能通用的,两边线经常有长有短。

尘缘一生 发表于 2020-3-18 11:10:57

本帖最后由 尘缘一生 于 2020-3-18 11:23 编辑

start4444 发表于 2020-3-18 11:07
你这个求法不行,13 14点位不一定和横线平行的,angle 14 13那个角度不能通用的,两边线经常有长有短。
奥,这个问题,哪还得研究研究。忘了还有弧标注什么的情况,算法复杂了,。

ddqzmpaxlozc 发表于 2020-3-18 11:57:28

可根据这个点来做标注避让

taoyi0727 发表于 2020-3-18 12:58:20

(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14 pt2)
                (setq dxf (entget name))
                (setq pt13 (cdr (assoc 13 dxf)))
                (setq pt14 (cdr (assoc 14 dxf)))
                (setq ang (angle pt13 pt14));获取弧度
                (setq pt1 (polar (cdr (assoc 10 dxf)) ang (/(distance pt13 pt14) 2)))
                (setq pt2 (polar (cdr (assoc 10 dxf)) ang (- (/ (distance pt13 pt14) 2))))
                (if (<
                                        (+ (distance pt1 pt13) (distance pt1 pt14))
                                        (+ (distance pt2 pt13) (distance pt2 pt14))
                                )
                        pt1
                        pt2
                )
        )
        (if (setq ss (ssget '((0 . "DIMENSION"))))
                (progn
                        (while (setq name (ssname ss 0))
                                (setq pt (T-get-dim-centre name))
                                (command "CIRCLE" pt 100)
                                (ssdel name ss)
                        )
                )
        )
)

线性标注还要再判断下
对齐标注没问题

尘缘一生 发表于 2020-3-18 13:09:29

taoyi0727 发表于 2020-3-18 12:58
(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14...

试了下,线性标注停完美,

能不能修改下,意思是,线性标注就用这个,其他的标注,暂且都取得文字的定位点 DXF 11 点就近采用。不会出大偏差。

cghdy 发表于 2020-3-18 14:03:45

taoyi0727 发表于 2020-3-18 12:58
(defun c:tt (/ name pt ss t-get-dim-centre)
        (defun T-get-dim-centre (name / ang dxf pt1 pt13 pt14...

非世界坐标下无法使用

x_s_s_1 发表于 2020-3-18 19:12:16

本帖最后由 x_s_s_1 于 2020-3-18 19:34 编辑

没那么麻烦
(defun c:test1 (/ get_dim_mid ss n)
(defun get_dim_mid (en / ent pt10 pt13 pt14 v pt13t)
    (setq ent(entget en)
    pt10(cdr (assoc 10 ent))
    pt13(cdr (assoc 13 ent))
    pt14(cdr (assoc 14 ent))
    v(mapcar '- pt10 pt14)
    pt14(trans pt14 0 v)
    pt13t(trans pt13 0 v)
    )
    (mapcar
      '+
      pt10
      (mapcar '(lambda (x y) (* 0.5 (- x y)))
      pt13
      (trans (list (car pt14) (cadr pt14) (caddr pt13t)) v 0)
      )
    )
)
(setq ss (ssget))
(repeat (setq n (sslength ss))
    (entmake
      (list (cons 0 "circle")
      (cons 10 (get_dim_mid (ssname ss (setq n (1- n)))))
      (cons 40 100)
      )
    )
)
)



sfzyr 发表于 2022-9-9 02:44:50

要理解这个trans函数,要看看高飞兄的贴:CAD 的坐标系统和trans函数的工作原理http://bbs.mjtd.com/forum.php?mod=viewthread&tid=99954&highlight=trans
要搞清楚这个转换,要理解这个垂足怎么求出来的,要看看这个:Trans 函数妙用https://wenku.baidu.com/view/f9195127192e45361066f541.html
搞清楚了这个问题,利用数学几何知识,应该很好理解此贴了。

pxt2001 发表于 2024-1-15 20:20:38

尘缘一生 发表于 2020-3-18 10:57
搞出来了,有点位就知道了



组码13、14的连线不一定和尺寸线平行。

yshf 发表于 2024-1-15 22:02:18

; ;; 过13点平行于10-14的平行线与过10点垂直于10-14的线交点为10a
; ;; 10与10a的中点即为所求点
(defun c:qzd()
    (setvar "osmode" 0)
    (while (setq ssa (ssget ":S" '((0 . "DIMENSION"))))
      (setq ent (ssname ssa 0))
      (setq dxf (entget ent))
      (setq p10 (cdr (assoc 10 dxf)))
      (setq p13 (cdr (assoc 13 dxf)))
      (setq p14 (cdr (assoc 14 dxf)))
      (setq ang0 (angle p10 p14))
      (setq ang1 (+ ang0 (* 0.5 pi)))
      (setq p10a (inters p13 (polar p13 ang0 1.0)
                           p10 (polar p10 ang1 1.0)
                           nil
                   )
      )
      (setq pmid (mapcar '(lambda(x y)(* 0.5 (+ x y))) p10 p10a))
      (command "_pline"pmid (polar pmid ang0 2.0) "")
    )
    (princ)
)
页: 1 [2] 3
查看完整版本: 如何取得标注尺寸线的中点?