newer 发表于 2025-1-10 09:52:15

多段线生成缓冲区

本帖最后由 newer 于 2025-1-10 10:02 编辑


[*]生成多多段线的BOX,
[*]批量
[*]灵活设置上下左右偏移距离
[*]灵活设置封口方式





(defun c:xdtb_pl2box ( / ents ss tf tf1 val)
(defun _prompt1 ()
    (xdrx_prompt
      (xdrx-string-formatex
      (xdrx-string-multilanguage
          "\n** Offset 当前设置:上偏(%.1f) | 下偏(%.1f) | 左偏(%.1f) | 右偏(%.1f) | 封端(%s)   **"
          "\n** Offset Current settings:[ Up(%.1f) | Down(%.1f) | Left(%.1f) | Right(%.1f) | Close(%s) ]**"
      )
      #xd-var-global-offset-up-distance
      #xd-var-global-offset-down-distance
      #xd-var-global-offset-left-distance
      #xd-var-global-offset-right-distance
      #xd-var-global-offset-close-mode
      )
    )
    t
)
(if (not #xd-var-global-offset-up-distance)
    (setq #xd-var-global-offset-up-distance 10.0)
)
(if (not #xd-var-global-offset-down-distance)
    (setq #xd-var-global-offset-down-distance 10.0)
)
(if (not #xd-var-global-offset-left-distance)
    (setq #xd-var-global-offset-left-distance 0.0)
)
(if (not #xd-var-global-offset-right-distance)
    (setq #xd-var-global-offset-right-distance 0.0)
)
(if (not #xd-var-global-offset-close-mode)
    (setq #xd-var-global-offset-close-mode "Chamfer")
)
(xdrx-begin)
(_prompt1)
(setq tf t)
(while
    (and
      tf
      (_prompt1)
      (xdrx_initssget
      (xdrx-string-multilanguage
          "选取要偏移的多段线[上偏(0)/下偏(1)/左偏(2)/右偏(3)/封端(4)]<退出>:"
          "Select the polyline to be offset [ Up(0)/Down(1)/Left(2)/Right(3)/CloseMode(4) ]<Exit>:"
      )
      "0 1 2 3 4"
      ""
      ""
      ""
      )
      (setq ss (xdrx_ssget
               '((-4 . "<or")
                   (0 . "line")
                   (-4 . "<and")
                   (0 . "*polyline")
                   (-4 . "<not")
                   (-4 . "&=")
                   (70 . 1)
                   (-4 . "not>")
                   (-4 . "and>")
                   (-4 . "or>")
                  )
               )
      )
   
    )
   (setq tf1 (type ss))
   (cond
       ((= tf1 'STR)
      (cond
          ((= ss "0")
         (if (setq val
                      (getreal (xdrx-string-formatex
                                 (xdrx-string-multilanguage
                                 "\n上偏距离<%.1f>"
                                 "\nUp Offset<%.1f>"
                                 )
                                 #xd-var-global-offset-up-distance
                               )
                      )
               )
             (setq #xd-var-global-offset-up-distance val)
         )
          )
          ((= ss "1")
         (if (setq val
                      (getreal (xdrx-string-formatex
                                 (xdrx-string-multilanguage
                                 "\n下偏距离<%.1f>"
                                 "\nDown Offset<%.1f>"
                                 )
                                 #xd-var-global-offset-down-distance
                               )
                      )
               )
             (setq #xd-var-global-offset-down-distance val)
         )
          )
          ((= ss "2")
         (if (setq val
                      (getreal (xdrx-string-formatex
                                 (xdrx-string-multilanguage
                                 "\n左偏距离<%.1f>"
                                 "\nLeft Offset<%.1f>"
                                 )
                                 #xd-var-global-offset-Left-distance
                               )
                      )
               )
             (setq #xd-var-global-offset-Left-distance val)
         )
          )
          ((= ss "3")
         (if (setq val
                      (getreal (xdrx-string-formatex
                                 (xdrx-string-multilanguage
                                 "\n右偏距离<%.1f>"
                                 "\nRight Offset<%.1f>"
                                 )
                                 #xd-var-global-offset-Right-distance
                               )
                      )
               )
             (setq #xd-var-global-offset-Right-distance val)
         )
          )
          ((= ss "4")
         (xdrx-initget "0 1")
         (if (setq val
                      (getint
                        (xdrx-string-formatex
                        (xdrx-string-multilanguage
                            "\n封口方式<%d>:"
                            "\nClose Modet<%d>:"
                        )
                        (if
                            (= (strcase #xd-var-global-offset-close-mode)
                               "CHARMFER"
                            )
                           0
                           1
                        )
                        )
                      )
               )
             (setq #xd-var-global-offset-close-mode
                  (if      (= val 0)
                      "Charmfer"
                      "Fillet"
                  )
             )
         )
          )
      )
       )
       ((= tf1 'PICKSET)
      (if (= (strcase #xd-var-global-offset-close-mode) "CHARMFER")
          (xdrx-setvar "boxfillet" 1)
          (xdrx-setvar "boxfillet" 0))
      (setq ents (xdrx-getproperty
                     ss
                     "tobox"
                     #xd-var-global-offset-down-distance
                     #xd-var-global-offset-Up-distance
                     #xd-var-global-offset-Left-distance
                     #xd-var-global-offset-Right-distance
                  )
      )
      (xdrx-entity-make ents)
      (setq tf nil)
       )
   )
)
(xdrx-end)
(princ)
)
页: [1]
查看完整版本: 多段线生成缓冲区