Author Topic: [XDrX-PlugIn(61)] Divide Rectang  (Read 575 times)

0 Members and 1 Guest are viewing this topic.

xdcad

  • Bull Frog
  • Posts: 479
[XDrX-PlugIn(61)] Divide Rectang
« on: December 24, 2023, 11:01:20 PM »
Code: [Select]
(defun c:xdtb_recdivbygap (/ dir dist dist_x dist_y e i num p1 p2 p3 p4 pt pts ss val x x_dir y_dir
                          )
  (defun _reset (e pt)
    (if (not (xdrx_curve_direction e))
      (xdrx_curve_reverse e)
    )
    (xd::polyline:resetstartpoint e pt)
  )
  (xdrx_begin)
  (if (not #xd_var_global_div)
    (setq #xd_var_global_div 2)
  )
  (if (setq val (getint
                  (xdrx_prompt (xdrx-string-multilanguage "\n输入等分数<" "\nInput Divede Nums<") #xd_var_global_div ">:" t)
                )
      )
    (setq #xd_var_global_div val)
  )
  (if (not #xd_var_global_gap)
    (setq #xd_var_global_gap 10.0)
  )
  (if (setq val (getreal
                  (xdrx_prompt (xdrx-string-multilanguage "\n输入间距<" "\nInput Gap<") #xd_var_global_gap ">:" t)
                )
      )
    (setq #xd_var_global_gap val)
  )
  (if (not #xd_var_global_direction)
    (setq #xd_var_global_direction 0)
  )
  (xdrx_initget "0 1")
  (if (setq val (getint (xdrx_prompt
  (xdrx-string-multilanguage
                          "\n输入方向[X(0)/Y(1)]<" "\nInput Direction[X(0)/Y(1)]<")
                          #xd_var_global_direction
                          ">:"
                          t
                        )
                )
      )
    (setq #xd_var_global_direction val)
  )
  (xdrx_initget)
  (while (setq ss (xdrx_ssget
    (xdrx-string-multilanguage
      "\n选择要处理的矩形<退出>:"
      "\nSelect Rectang<Exit>:"
    )
    '((0 . "*POLYLINE") (-4 . "&=") (70 . 1))
  )
)
    (progn
      (setq num 0)
      (mapcar
        '(lambda (x)
           (if (setq pts (xd::polyline:isrectang x))
             (progn (setq pt (xd::pnts:extremum pts '< '< t))
                    (_reset x pt)
                    (setq pts    (xdrx_getpropertyvalue x "vertices")
                          x_dir  (xdrx_vector_normalize (mapcar '- (cadr pts) (car pts)))
                          dist_x (distance (car pts) (cadr pts))
                          dist_y (distance (car pts) (nth 3 pts))
                          y_dir  (xdrx_vector_normalize (mapcar '- (nth 3 pts) (car pts)))
                          dir    nil
                    )
                    (if (= #xd_var_global_direction 0)
                      (progn
                        (if (> dist_x (* (1- #xd_var_global_div) #xd_var_global_gap))
                          (progn (setq p1 (car pts)
                                       p2 (mapcar '+
                                                  p1
                                                  (xdrx_vector_product
                                                    x_dir
                                                    (setq dist
                                                           (/ (- dist_x (* (1- #xd_var_global_div) #xd_var_global_gap))
                                                              #xd_var_global_div
                                                           )
                                                    )
                                                  )
                                          )
                                       p3 (mapcar '+ p2 (xdrx_vector_product y_dir dist_y))
                                       p4 (nth 3 pts)
                                 )
                                 (setq dir x_dir)
                          )
                        )
                      )
                      (progn
                        (if (> dist_y (* (1- #xd_var_global_div) #xd_var_global_gap))
                          (progn (setq p1 (car pts)
                                       p2 (cadr pts)
                                       p3 (mapcar '+
                                                  p2
                                                  (xdrx_vector_product
                                                    y_dir
                                                    (setq dist
                                                           (/ (- dist_y (* (1- #xd_var_global_div) #xd_var_global_gap))
                                                              #xd_var_global_div
                                                           )
                                                    )
                                                  )
                                          )
                                       p4 (mapcar '+ p1 (xdrx_vector_product y_dir dist))
                                 )
                                 (setq dir y_dir)
                          )
                        )
                      )
                    )
                    (if dir
                      (progn (xdrx_polyline_make (list p1 p2 p3 p4) t)
                             (xdrx_entity_matchprop x (entlast))
                             (xdrx_entity_delete x)
                             (setq x (entlast))
                             (setq i   1
                                   num (1+ num)
                             )
                             (repeat (1- #xd_var_global_div)
                               (xdrx_entity_copy
                                 x
                                 p1
                                 (mapcar '+
                                         p1
                                         (xdrx_vector_product dir (* i (+ dist #xd_var_global_gap)))
                                 )
                               )
                               (setq i (1+ i))
                             )
                      )
                    )
             )
           )
         )
        (xdrx_pickset->ents ss)
      )
      (xdrx_prompt
(xdrx-string-multilanguage
  (xdrx-string-format "\n处理了%d个矩形." num)
  (xdrx-string-format "\n%d rectangles processed." num)
)
      )
    )
  )
  (xdrx_end)
  (princ)
)
« Last Edit: December 24, 2023, 11:08:02 PM by xdcad »
The code I wrote uses XDRX-API,which can be downloaded from github.com and is updated at any time.
===================================
[XDrx-Sub Forum]
https://www.theswamp.org/index.php?board=78.0
https://github.com/xdcad/XDrx-API
http://bbs.xdcad.net