Author Topic: [XDrX-PlugIn(139)] Polyline dimensioning  (Read 131 times)

0 Members and 1 Guest are viewing this topic.

xdcad

  • Swamp Rat
  • Posts: 514
[XDrX-PlugIn(139)] Polyline dimensioning
« on: April 09, 2024, 10:53:50 PM »

Code: [Select]
(defun c:XDTB_DIMPL
       ( / ang ang1 e edim gap msg myerr olderr p1 p2 pos pts scl ss tf unit x)
  (defun myerr (msg)
    (princ (strcat "\n" msg))
    (xdrx_end)
    (setq *error* olderr)
    (princ)
  )
  (defun _dim (e)
    (setq pts (xdrx_getpropertyvalue e "vertices"))
    (if (xdrx_curve_isclosed e)
      (setq pts (xd::pnts:close pts))
    )
    (if (XD::Pnts:isClockWise pts)
      (setq pts (reverse pts))
    )
    (setq pts (xd::list:snakepair pts))
    (mapcar '(lambda (x)
       (setq p1   (car x)
     p2   (cadr x)
     ang  (angle p1 p2)
     ang1 (- ang (/ pi 2.0))
     pos  (polar
    p1
    ang1
    (* scl
       (+ (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap)
  (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianLength)
       )
    )
  )
       )
       (setq edim (xdrx_dimension_makerotate p1 p2 pos ang))
       (if (/= scl 1.0)
(xdrx_setpropertyvalue (entlast) "dimscale" scl)
       )
       (xdrx_setpropertyvalue
(entlast)
"dimexo"
(xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap)
       )
     )
    pts
    )
  )
  (xdrx_begin)
  (xdrx_sysvar_push '("osmode" 33))
  (setq olderr *error*)
  (setq *error* myerr)
  (setq tf t)
  (setq unit (xd::var:getdrawingunit))
  (if (not (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianLength))
    (if (= unit 0)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianLength 15)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianLength 1500)
    )
  )
  (if (not (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap))
    (if (= unit 0)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianGap 15)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianGap 500)
    )
  )
  (setq scl (XD::Var:GetScaleRatio))
  (defun _keyword (keyword)
    (if (setq
  gap (getreal (xdrx_prompt
(xdrx-string-multilanguage "\n界线距离<" "\nExtension Distance<")
(xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap)
">:"
t
       )
      )
)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianGap gap)
    )
    (if (setq gap
       (getreal (xdrx_prompt
  (xdrx-string-multilanguage "\n界线长度<" "\nExtension Length<")
  (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianLength)
  ">:"
  t
)
       )
)
      (xd::symbol:put '#XD_GLOBAL_VAR_DIMJieXianLength gap)
    )
    (xdrx_prompt
      (xdrx-string-formatex
(xdrx-string-multilanguage
  "\n** 当前设置:界线距离(%.1f) | 界线长度(%.1f) **"
  "\n** Current settings: Extension Distance (%.1f) | Extension Length (%.1f) **"
)
(xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap)
(xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianLength)
      )
    )
  )
  (xd::dim:init)
  (while (and (xdrx_prompt
(xdrx-string-formatex
  (xdrx-string-multilanguage
    "\n** 当前设置:界线距离(%.1f) | 界线长度(%.1f) **"
    "\n** Current settings: Extension Distance (%.1f) | Extension Length (%.1f) **"
  )
  (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianGap)
  (xd::symbol:get '#XD_GLOBAL_VAR_DIMJieXianLength)
)
      )
      (xdrx_initssget
(xdrx-string-multilanguage "\n选取要标注的多段线[设置(BE)]<退出>:""\nSelect the polyline [Settings (BE)]<Exit>:")
"BE"    ""
"_keyword"    ""
       )
      (setq ss (xdrx_ssget '((0 . "*polyline"))))
)
    (mapcar '(lambda (x) (_dim x)) (xdrx_pickset->ents ss))
  )
  (setq *error* olderr)
  (xdrx_sysvar_pop)
  (xdrx_end)
  (princ)
)
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
https://github.com/xdcad
https://sourceforge.net/projects/xdrx-api-zip/
http://bbs.xdcad.net