2015年1月11日 星期日

Autolisp Mleader Align

因為 AutoCAD 內建的 Mleader 對齊的功能實在很難用,而 Mleader 又是獨立於DIMSTYLE 可以分開管理並且跟 MText 物件連在一起的,於是我改寫了Max-Qleader 引線標注功能,變成 Max-Mleader ,與 Mleader 新的對齊功能,延續TrimDim 化條線就對齊的設計概念,Mleader Align 也是畫一條線就對齊。



Mleader 使用上非常方便 但相對 DXF 中 GroupCode 相對複雜,很多特徵是相同的例如:

  (
    (-1 . )
    (0 . "MULTILEADER")
    (330 . )
    (5 . "1F075")
    (100 . "AcDbEntity")
    (67 . 0)
    (410 . "Model")
    (8 . "Dim")
    (100 . "AcDbMLeader")
    (270 . 2)
    (300 . "CONTEXT_DATA{")
    (40 . 15.0)
    (10 7271.46 9881.71 0.0)
    (41 . 52.5)
    (140 . 30.0)
    (145 . 30.0)
    (174 . 2)
    (175 . 2)
    (176 . 1)
    (177 . 0)
    (290 . 1)
    (304 . "M5圓頭螺絲")
    (11 0.0 0.0 1.0)
    (340 . )
    (12 7415.04 9907.96 0.0)
    (13 1.0 0.0 0.0)
    (42 . 0.0)
    (43 . 0.0)
    (44 . 0.0)
    (45 . 1.0)
    (170 . 1)
    (90 . -1023410166)
    (171 . 2)
    (172 . 5)
    (91 . -1073741824)
    (141 . 0.0)
    (92 . 0)
    (291 . 0)
    (292 . 0)
    (173 . 0)
    (293 . 0)
    (142 . 0.0)
    (143 . 0.0)
    (294 . 0)
    (295 . 0)
    (296 . 0)
    (110 6680.17 9364.02 0.0)
    (111 1.0 0.0 0.0)
    (112 0.0 1.0 0.0)
    (297 . 0)
    (302 . "LEADER{")
    (290 . 1)
    (291 . 1)
    (10 7241.46 9881.71 0.0)
    (11 1.0 0.0 0.0)
    (90 . 0)
    (40 . 30.0)
    (304 . "LEADER_LINE{")
    (10 6680.17 9364.02 0.0)
    (91 . 0)
    (170 . 1)
    (92 . -1056964608)
    (340 . )
    (171 . -2)
    (40 . 0.0)
    (341 . )
    (93 . 0)
    (305 . "}")
    (271 . 0)
    (303 . "}")
    (272 . 9)
    (273 . 9)
    (301 . "}")
    (340 . )
    (90 . 67421184)
    (170 . 1)
    (91 . -1073741824)
    (341 . )
    (171 . -1)
    (290 . 1)
    (291 . 1)
    (41 . 2.0)
    (42 . 2.0)
    (172 . 2)
    (343 . )
    (173 . 2)
    (95 . 2)
    (174 . 1)
    (175 . 0)
    (92 . -1023410166)
    (292 . 0)
    (93 . -1056964608)
    (10 1.0 1.0 1.0)
    (43 . 0.0)
    (176 . 0)
    (293 . 0)
    (294 . 0)
    (178 . 0)
    (179 . 2)
    (45 . 15.0)
    (271 . 0)
    (272 . 9)
    (273 . 9)
    (295 . 1)
  )

10 作為索引就出現了四次,所以assoc 指令不論往前找或是往後找,你都找不到
中間那兩個,所以必須先撰寫一個副程式,來取得你想要的那個,並且取得其順序以供 nth 使用。



以圖面來說,只要你更新 P2 並以其為對齊點便可,不需要去操作P4(文字的對齊點),而P3 非常重要,他是判斷使用者到底是向左還是向右標。在程式碼中僅是這麼簡單幾句

;;--------------;; update P2 and justify  -------------------
      (setq ent (subst (cons 10 int1)
      (nth nthP2 ent)
      ent
)
      ) ;;p2
      (entmod ent)
      (if (= t (vlax-property-available-p vlaobj 'TextJustify))
(vlax-put vlaobj 'TextJustify 2)
      )
      (vlax-release-object vlaobj);;不要去變更 P4


程式還不完美,但是比起內建更加快速好用,其他的待工作空閒時再來修改。



沒有留言:

張貼留言