乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: 3dwannab

[编程交流] 用相等的空间划分对象

[复制链接]

56

主题

256

帖子

230

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
253
发表于 2022-7-5 17:30:50 | 显示全部楼层
 
再回到这里。我在这里找到了惯例&在这里。
 
我对其进行了修改,以便它要求用户输入或选择对象的宽度,然后进行相应的分割。好吧,它不使用分割中的第一个对象和最后一个对象,正如您在所附的前后图片中看到的那样。
 
但是,我很高兴我能设法让它发挥作用。也适用于UCS。
 
如果有人可以帮助修改它,使其可以使用&沿直线分割开始和结束对象,那么这将非常像正确的结果图像。
 
我的修改版本:
  1. ;; Code found:
  2. ;; https://www.theswamp.org/index.php?topic=51616.msg566915#msg566915
  3. ;; https://www.theswamp.org/index.php?topic=51564.msg566732#msg566732
  4. ;;
  5. ;; Modified by 3dwannab on 11.04.17
  6. ;; Made it work by adding prompt to enter/pick width of arrayed objects and result will divide with equal spacings between object boundaries.
  7. ;;
  8. ;; Known Bugs: Doesn't use the start and end object of the arrayed objects.
  9. ;;
  10. (defun _bboxandmid (obj / a b l)
  11. (vla-getboundingbox obj 'a 'b)
  12. (list (car (setq l (mapcar 'vlax-safearray->list (list a b))))
  13.         ; (apply '(lambda (a b) (mapcar '(lambda (a b) (/ (+ a b) 2.)) a b)) l)
  14.         (apply '(lambda (a b) (mapcar '(lambda (a b) (/ (+ a b) 2.)) a b)) l)
  15.         (cadr l)
  16.         )
  17. )
  18. (defun ss->lst (ss / i l)
  19. (if (eq (type ss) 'pickset)
  20.         (repeat (setq i (sslength ss))
  21.                 (setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
  22.                 )
  23.         )
  24. )
  25. (defun c:spb (/ di doc fac g lst p1 p2 vec)
  26. ;; Added by 3dwannab.
  27. (setq di (getdist "\nEnter or Pick width of Array Object: "))
  28. (if di
  29. ;;
  30. (progn
  31.         (setq di (/ di 2.))
  32.         (if
  33.                 (and
  34.                         (setq lst (ss->lst (ssget "_:L")))
  35.                         (or
  36.                                 (< 1 (length lst))
  37.                                 (prompt "\nSelection set must contain at least 2 entities ")
  38.                                 )
  39.                         (or
  40.                                 (setq fixDist (getdist "\nFixed distance or Enter: "))
  41.                                 T
  42.                                 )
  43.                         (setq p1 (getpoint "\nSpecify first point: "))
  44.                         )
  45.                 (progn
  46.                         (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  47.                         (vla-endundomark doc)
  48.                         (vla-startundomark doc)
  49.                         (princ "\nSpecify second point: ")
  50.                         (while (eq 5 (car (setq g (grread t 15 0))))
  51.                                 (redraw)
  52.                                 (setq p2 (cadr g))
  53.                                 (setq p2
  54.                                         (cond
  55.                                         ((osnap p2 "_END,_MID")) ; Change to suit your needs.
  56.                                         (p2)
  57.                                         )
  58.                                         )
  59.                                 (if (not (equal p1 p2 1e-4))
  60.                                         (progn
  61.                                                 (grdraw p1 p2 1 -1)
  62.                                                 (setq fac
  63.                                                         (cond
  64.                                                         ; (fixDist (/ (distance p1 p2) fixDist))
  65.                                                         ;; Added by 3dwannab.
  66.                                                         (fixDist (/ (distance (list (- (car p1) di) (cadr p1) (caddr p1)) (list (+ (car p2) di) (cadr p2) (caddr p2))) fixDist))
  67.                                                         ;;
  68.                                                         ((1- (length lst)))
  69.                                                         )
  70.                                                         )
  71.                                         ; (setq vec (trans (mapcar '(lambda (crd1 crd2) (/ (- crd2 crd1) fac)) p1 p2) 1 0 T))
  72.                                         ;; Added by 3dwannab.
  73.                                         (setq vec (trans (mapcar '(lambda (crd1 crd2) (/ (- crd2 crd1) fac)) (list (- (car p1) di) (cadr p1) (caddr p1)) (list (+ (car p2) di) (cadr p2) (caddr p2))) 1 0 T))
  74.                                         ;;
  75.                                         ;; Added by 3dwannab.
  76.                                         (vlax-invoke (car lst) 'move (cadr (_bboxandmid (car lst))) (trans (list (- (car p1) di) (cadr p1) (caddr p1)) 1 0))
  77.                                         ;;
  78.                                         ; (vlax-invoke (car lst) 'move (cadr (_bboxandmid (car lst))) (trans p1 1 0))
  79.                                         (mapcar
  80.                                                 '(lambda (o1 o2 / l)
  81.                                                         (vlax-invoke o2 'move (cadr (_bboxandmid o2)) (mapcar '+ (cadr (_bboxandmid o1)) vec))
  82.                                                         )
  83.                                                 lst
  84.                                                 (cdr lst)
  85.                                                 )
  86.                                         )
  87.                                         )
  88.                                 )
  89.                         (vla-endundomark doc)
  90.                         )
  91.                 )
  92.         )
  93. )
  94. (redraw)
  95. (princ)
  96. )

172842tnnfu8dh4ghfvp4y.jpg
172843zsaf5nd0s4ac550o.jpg
172844fohrwihzhlzthihi.jpg
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:09 , Processed in 0.427162 second(s), 55 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表