edata 发表于 2015-8-26 23:42:53

entmake标注关联-直线起点关联

标注关联有的时候比较方便,最近研究了下,精力有限,基本了解了标注关联原理。
先创建词典DICTIONARY对象,再创建关联非实体对象DIMASSOC,
再修改DICTIONARY的组码360,更新标注DIMENSION对象的关联反应器组码,更新直线对象的关联反应器组码。
理论上其他应该类似。
以下是直线标注关联测试代码。
(defun c:tt(/ dic_list dim1 dim_assoc dim_dic dim_list l1 l1_list l2 l2_list p1 p2 p3 p4 pt pt1 pt2)
(setq p1(getpoint "\n第1点:")
p2(getpoint p1 "\n第2点:")
p3(getpoint"\n第3点:")
p4(getpoint p3 "\n第4点:")
)
(setq pt1 p1
pt2 p3
pt(polar pt2(+ (angle pt1 pt2) (* pi 1.5)) 1 )
)
(setq l1(entmakex(list '(0 . "line")(cons 10 p1)(cons 11 p2))))
(setq l2(entmakex(list '(0 . "line")(cons 10 p3)(cons 11 p4))))
(setq dim1(entmakex (list '(0 . "DIMENSION")
          '(100 . "AcDbEntity")
          '(100 . "AcDbDimension")
          (cons 10 pt)
          '(70 . 32)
          '(1 . "")
          '(100 . "AcDbAlignedDimension")
          (cons 13 pt1)
          (cons 14 pt2)
          '(50 . 1.5708)
          '(100 . "AcDbRotatedDimension")
          )
          )
)
(setq dim_dic(entmakex (list '(0 . "DICTIONARY")
             '(100 . "AcDbDictionary")
             '(280 . 1)
             '(281 . 1)
       )
         ))
(setq dim_assoc(entmakex (list'(0 . "DIMASSOC")
          '(102 . "{ACAD_REACTORS")
          (cons 330 dim_dic)
          '(102 . "}")
          (cons 330 dim_dic)
          '(100 . "AcDbDimAssoc")
          (cons 330 dim1)
          '(90 . 3) '(70 . 0) '(71 . 0)
          '(1 . "AcDbOsnapPointRef")
          '(72 . 13)
          (cons 331 l1)
          '(73 . 2) '(91 . 0) '(40 . 0.0) '(10 0.0 0.0 2.0e+050) '(75 . 0)
          '(1 . "AcDbOsnapPointRef")
          '(72 . 13)
          (cons 331 l2)
          '(73 . 2) '(91 . 0)
          '(40 . 0.0)
          '(10 0.0 0.0 2.0e+050)
          '(75 . 0))
         )
)
(setq dic_list(entget dim_dic)
dic_list(append dic_list (list '(3 . "ACAD_DIMASSOC")
               (cons 360 dim_assoc))))
(entmod dic_list)         
(setq dim_list(entget dim1)
dim_list(append (list(car dim_list)(cadr dim_list)(cadddr dim_list))
         (list '(102 . "{ACAD_XDICTIONARY")
         (cons 360 dim_dic)
         '(102 . "}")
         '(102 . "{ACAD_REACTORS")
         (cons 330 dim_assoc)
         '(102 . "}")
         (caddr dim_list)
         )      
       (cddddr dim_list)
      )
)
(entmod dim_list)
(setq l1_list(entget l1)
l1_list(append (list(car l1_list)(cadr l1_list)(cadddr l1_list))
         (list '(102 . "{ACAD_REACTORS")
         (cons 330 dim_assoc)
         '(102 . "}")
         (caddr l1_list)
         )
         (cddddr l1_list)
         )
)
(setq l2_list(entget l2)
l2_list(append (list(car l2_list)(cadr l2_list)(cadddr l2_list))
         (list '(102 . "{ACAD_REACTORS")
         (cons 330 dim_assoc)
         '(102 . "}")
         (caddr l2_list)
         )
         (cddddr l2_list)
         )
)
(entmod l1_list)
(entmod l2_list)   
(princ)
)

lucas_3333 发表于 2015-8-27 08:07:46

E大, 这么晚还是操劳, 辛苦了

664571221 发表于 2018-9-7 11:24:38

E大你好,你这个好像有问题,画了好几段,只标注关联了一段
页: [1]
查看完整版本: entmake标注关联-直线起点关联