明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1249|回复: 6

[源码] 请教,如果让书柜成组?

[复制链接]
发表于 2023-3-5 12:15:51 | 显示全部楼层 |阅读模式

;;;;;;;;;;;书柜
(vl-load-com)
(defun c:SG ( / _line)
(defun *error* (msg)
(setvar "cecolor""bylayer") ;_ 恢复颜色随层;
(setvar "clayer" mylayer)   ;恢复原有图层
(princ "错误信息: ")
(princ msg)      ;_ 打印错误信息
(princ)         
)
(setvar "measurement" 0)     ; 设置公制单位
(setvar "cmdecho" 0)         ; 关闭命令响应
(setvar "hpassoc" 0)          ;设置填充时不关联
(setvar "osmode" 959)         ;设置捕捉
(setq mylayer (getvar "clayer"))    ;保存当前层
(setq oldcolor (getvar "cecolor"))   ;保存原有颜色
(defun _line (lst)
(if (= (tblsearch "layer" "0-PM-固定家具") nil)
    (Command "-layer" "m" "0-PM-固定家具" "c" 251 "" "")
    (Command "-layer" "t" "0-PM-固定家具" "")
  )
(setvar "clayer" "0-PM-固定家具")
    (mapcar '(lambda (a b)(entmakex (list '(0 . "LINE") (cons 10 a) (cons 11 b)))) lst (cdr lst))
  )
  (while (and (setq n (Cond ((getint(strcat "\n等分数["(itoa(setq n(Cond ( n )( 5 ))))"] ")))( n )))
              (setq p1 (getpoint "\n第一角点 :"))
              (setq p2 (getcorner p1 "\n另一角点 :"))
         )
    (setq dx (abs (- (car p2) (car p1)))
          dy (abs (- (cadr p2) (cadr p1)))
    )
    (setq ptm (list (min (car p1) (car p2)) (min (cadr p1) (cadr p2)))
          p2  (list (max (car p1) (car p2)) (max (cadr p1) (cadr p2)))
          p1  ptm
    )
    (if        (> dx dy)
      (progn
        (setq dd (/ dx n))
        (repeat        n
          (setq        p3 (polar p1 0 dd)
                p4 (polar p1 (/ pi 2) dy)
                p5 (polar p4 0 dd)
          )
          (_LINE (list p1 p3 p4 p5 p1 p4))
          (setq p1 p3)
        )
      )
      (progn
        (setq dd (/ dy n))
        (repeat        n
          (setq        p3 (polar p1 (/ pi 2) dd)
                p4 (polar p1 0 dx)
                p5 (polar p3 0 dx)
          )
          (_LINE (list p1 p3 p4 p5 p1 p4))
          (setq p1 p3)
        )
      )
    )
    (_LINE (list p3 p5))
  )
(command "color" oldcolor)   ;设置为原有颜色
;;(setvar "cecolor" "bylayer")  ;设置颜色随层

;;(setvar "color" "251")  ;设置颜色随层
(setvar "clayer" mylayer)
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-3-5 19:09:51 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:SG (/ *error* _line addngroup bjty dd dx dy lm-make-ssadd lm-ss-enlst n p1 p2 p3 p4 p5 ptm sss)
  3.         (defun *error* (msg)
  4.                 (princ "错误信息: ")
  5.                 (princ msg) ;_ 打印错误信息
  6.                 (princ)
  7.         )
  8.         (defun lm-ss-enlst (ss / enlst)
  9.                 (cond
  10.                         ((= (type ss) 'PICKSET)
  11.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  12.                         )
  13.                         ((= (type ss) 'LIST)
  14.                                 (setq enlst (ssadd))
  15.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  16.                         )
  17.                 )
  18.         )
  19.         (defun lm-make-ssadd (en / lst)
  20.                 (if en
  21.                         (progn
  22.                                 (while (setq en (entnext en))
  23.                                         (if (not (member (cdr (assoc 0 (entget en)))
  24.                                                                                  '("ATTRIB" "VERTEX" "SEQEND")
  25.                                                                          )
  26.                                                         )
  27.                                                 (setq LST (cons en LST))
  28.                                         )
  29.                                 )
  30.                                 (lm-ss-enlst (reverse LST))
  31.                         )
  32.                         (ssget "X")
  33.                 )
  34.         )
  35.         (defun AddnGroup (Objlst)
  36.                 (vla-appenditems
  37.                         (vla-add (vla-get-groups
  38.                                                                  (vla-get-activedocument (vlax-get-acad-object))
  39.                                                          )
  40.                                 "*"
  41.                         )
  42.                         (vlax-make-variant
  43.                                 (vlax-safearray-fill
  44.                                         (vlax-make-safearray
  45.                                                 vlax-vbobject
  46.                                                 (cons 0 (1- (length objlst)))
  47.                                         )
  48.                                         objlst
  49.                                 )
  50.                         )
  51.                 )
  52.         )
  53.         (setvar "measurement" 0) ; 设置公制单位
  54.         (setvar "cmdecho" 0) ; 关闭命令响应
  55.         (setvar "hpassoc" 0) ;设置填充时不关联
  56.         (setvar "osmode" 959) ;设置捕捉
  57.         (setvar "pickstyle" 1)
  58.         (defun _line (lst)
  59.                 (if (null(tblsearch "layer" "0-PM-固定家具"))
  60.                         (Command "-layer" "m" "0-PM-固定家具" "c" 251 "" "")
  61.                 )
  62.                 (mapcar '(lambda (a b)(entmakex (list '(0 . "LINE") '(8 . "0-PM-固定家具") (cons 10 a) (cons 11 b)))) lst (cdr lst))
  63.         )
  64.         (while (and
  65.                                          (setq n (Cond ((getint(strcat "\n等分数["(itoa(setq n(Cond ( n )( 5 ))))"] ")))( n )))
  66.                                          (setq p1 (getpoint "\n第一角点 :"))
  67.                                          (setq p2 (getcorner p1 "\n另一角点 :"))
  68.                                  )
  69.                 (setq
  70.                         dx (abs (- (car p2) (car p1)))
  71.                         dy (abs (- (cadr p2) (cadr p1)))
  72.                         ptm (list (min (car p1) (car p2)) (min (cadr p1) (cadr p2)))
  73.                         p2 (list (max (car p1) (car p2)) (max (cadr p1) (cadr p2)))
  74.                         p1 ptm
  75.                         bjty(entlast)
  76.                 )
  77.                 (if (> dx dy)
  78.                         (progn
  79.                                 (setq dd (/ dx n))
  80.                                 (repeat n
  81.                                         (setq
  82.                                                 p3 (polar p1 0 dd)
  83.                                                 p4 (polar p1 (/ pi 2) dy)
  84.                                                 p5 (polar p4 0 dd)
  85.                                         )
  86.                                         (_LINE (list p1 p3 p4 p5 p1 p4))
  87.                                         (setq p1 p3)
  88.                                 )
  89.                         )
  90.                         (progn
  91.                                 (setq dd (/ dy n))
  92.                                 (repeat n
  93.                                         (setq
  94.                                                 p3 (polar p1 (/ pi 2) dd)
  95.                                                 p4 (polar p1 0 dx)
  96.                                                 p5 (polar p3 0 dx)
  97.                                         )
  98.                                         (_LINE (list p1 p3 p4 p5 p1 p4))
  99.                                         (setq p1 p3)
  100.                                 )
  101.                         )
  102.                 )
  103.                 (_LINE (list p3 p5))
  104.                 (setq sss(lm-ss-enlst(lm-make-ssadd bjty)))
  105.                 (addngroup (mapcar 'vlax-ename->vla-object sss))
  106.         )
  107.         (princ)
  108. )

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

 楼主| 发表于 2023-3-6 08:35:43 | 显示全部楼层
谢谢!可以了!
发表于 2024-4-29 18:58:06 | 显示全部楼层

这个最好能设置柜子的深度
发表于 2024-4-29 21:07:43 | 显示全部楼层
stonedesign 发表于 2024-4-29 18:58
这个最好能设置柜子的深度

他这是平面的 没这功能
发表于 2024-4-30 15:40:06 | 显示全部楼层
飞雪神光 发表于 2024-4-29 21:07
他这是平面的 没这功能

我说的就是平面的  也就是长和宽  宽度小的这一面可以设置就好了
发表于 2024-4-30 18:06:39 | 显示全部楼层
stonedesign 发表于 2024-4-30 15:40
我说的就是平面的  也就是长和宽  宽度小的这一面可以设置就好了

那你得找作者改啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 17:36 , Processed in 0.180263 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表