hhh454 发表于 2018-4-5 15:17:12

春婵建筑模型CAD绘图工具箱

建筑模型绘图插件,本人从事建筑模型绘图工作10多年,在工作中,经常用到AutoCAD软件,在大量的工作中,我总结出一套快速绘图的工具,纯lisp编写的,适用于多版本的CAD软件,测试CAD2007和CAD2014,测试没有问题,所有快捷命令,全部自己定,再也不用记别人的命令的,所有启动命令自己设置。
工作当中,图层的使用是最多的,程序代码有单独的图层命令,里面有大量的功能,自动建立图层,锁定图层,打开图层,独显选择图层等等,图层工具的启动命令也可以自己定,工具所有命令都是自己设置,方便实用。
其中的户型命令,是我觉得是最实际的命令,一个户型画图费用80块,用了命令相当于所有内墙都是自动绘制,自动排版,只需鼠标点击就可以完成,几秒钟所有内墙全部出来,省去大量绘图时间,也加快了自己的赚钱速度,特别是绘制大型综合体的建筑,例如:大型商场的室内模型,室内的内墙,要是一个的一个的画门洞,是不是要好久,用了这个命令,秒速出料,已经自动排好版,按照你的选择顺序,框选就是按照绘图顺序,自己体验吧,还有可以自动画门框,根据选择的门洞,自动绘制门框,再用不用一个个的去调整宽度了。
自动绘制窗线也是非常实用的工具,用过的都知道,快捷出窗线,窗线排版前期的增加外框,有专门的外框绘制命令,考虑了有凸窗的情况,底部收料位,四周收料位,等等各种情况,还有外框自动排版命令,统称窗线绘制三部曲。
百叶窗的绘制程序就更有说头了,百叶窗绘图简单,做雕刻文件就容易产生大肚子,用这个代码出来的百叶窗,在做雕刻文件时就可以很好的避免这个头疼的问题,百叶的径的宽度,除了常规的几个宽度,还可以自己设置宽度,直接明了。
单击矩形边界拉伸,这个功能一说就明白了,在绘制超高型建筑的时候,有的时候用 s 拉伸就很不方便,料太高了,框不住,不是框多了,就是框少了,通过眼睛看很吃力,有这个命令就很方便了,直接点击单边的矩形边就可以直接拉伸。
在绘图当中,有的时候图纸的线条的 z 轴点高度不一样,直接导致测量的尺寸不准,画出的墙面就大了,或者小了,“z 轴归零” 这个命令就很好用了,直接把所有线都投影到z 轴为零的平面上,相当于二维平面,这样绘图就不卡,测量的值也是准确的。
画建筑的模型的图纸,我们会用到各种颜色的图层,好的绘图分层习惯对以后的排版做雕刻文件至关重要,前期认真后期就很方便操作,我当时的想法就是在绘图时能不能根据自己的想法去自动变换图层,不用手动去选择,下面这个命令就出生了,自动变换图层命令,例如:我画一条线,功能是刻线,在画线之前,图层自动改变为2#黄色图层,画出的线就是黄色线,图层2#,矩形刻透,rec 之前图层自动变成1#红色图层,画出的矩形自动为1#红色图层(也可以定制自己颜色图层),我相信这个功能更适合大家,相当于无意识的完成了绘图前的分配图层工作。
相信有好多的抄单绘图人员,给公司和个人绘图时,标号是不可少的步骤,对方直接按照号码拼接楼体就可以,软件自动底板标号,墙面标号,自动画体块,合理配合使用,功能组合应用更广泛,
删除重线功能,最大的功能就是减少雕刻时间,景观绘图用的比较多,景观绘图填充曲线小路时可以用曲线填充的命令,很方便。
最后说一个在雕刻排版时用到的命令,雕刻分离和雕刻合并,相信看到这两个命令就知道他的功能,都排版用到的命令,节约绘图时间。
春婵建筑模型CAD绘图工具箱,免安装,直接拖到CAD窗口,就可以使用
下载地址:





hhh454 发表于 2018-4-5 16:22:46

写万家灯火代码的时候,写了一个判断线方向的代码,觉得很有意思,我发出来源码,请厉害的前辈看看是否能简化,

实现的功能就是图上的显示的
(defun ssinters(sss / i num obj1 obj2 j interpts ptlist)
(setqi   0
num (sslength sss)
)
(while (< i (1- num))
    (setq obj1 (ssname sss i)
    obj1 (vlax-ename->vla-object obj1)
    j    (1+ i)
    )
    (while (< j num)
      (setq obj2   (ssname sss j)
      obj2   (vlax-ename->vla-object obj2)
      interpts (vla-intersectwith
         obj1
         obj2
         0
         )
      interpts (vlax-variant-value interpts)
      )
      (if (> (vlax-safearray-get-u-bound interpts 1) 0)
(progn
    (setqinterpts
   (vlax-safearray->list interpts)
    )
    (while (> (length interpts) 0)
      (setq ptlist (cons (list (car interpts)
             (cadr interpts)
             (caddr interpts)
             )
             ptlist
       )
      )
      (setq interpts (cdddr interpts))
    )
)
      )
      (setq j (1+ j))
    )
    (setq i (1+ i))
)
ptlist
)


(defun HH:ssPts:Sort (ssPts KEY FUZZ / E EN FUN LST N);By 自贡黄明儒
;;1 点列表排序
(defun sortpts (PTS FUN xyz FUZZ)
    (vl-sort pts
      '(lambda (a b)
(if (not (equal (xyz a) (xyz b) fuzz))
    (fun (xyz a) (xyz b))
)
       )
    )
)
;;2 排序先后
(defun sortpts1 (PTS KEY FUZZ)
    (setq Key (vl-string->list Key))
    (foreach xyz (reverse Key)
      (cond ((< xyz 100)
      (setq fun >)
      (setq xyz (nth (- xyz 88) (list car cadr caddr)))
   )
   (T
      (setq fun <)
      (setq xyz (nth (- xyz 120) (list car cadr caddr)))
   )
      )
      (setq Pts (sortpts Pts fun xyz fuzz))
    )
)
;;3 本程序主程序
(cond
    ((= (type ssPts) 'PICKSET)
   (repeat (setq n (sslength ssPts))
       (if (and (setq e (ssname ssPts (setq n (1- n))))
(setq en (entget e))
    )
(setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
       )
   )
   (mapcar 'last (sortpts1 lst KEY FUZZ))
    )
    ((Listp ssPts)
      (cond
((vl-consp (car ssPts)) (sortpts1 ssPts KEY FUZZ))
((= (type (car ssPts)) 'ENAME)
(foreach e ssPts
    (if (setq en (entget e))
      (setq lst (cons (append (cdr (assoc 10 en)) (list e)) lst))
    )
)
(mapcar 'last (sortpts1 lst KEY FUZZ))
)
(T
(cond ((equal key "X") (vl-sort ssPts '>))
      ((equal key "x") (vl-sort ssPts '<))
)
)
      )
    )
)
)

;; Clockwise-p-Lee Mac
;; Returns T if p1,p2,p3 are clockwise oriented

(defun LM:Clockwise-p ( p1 p2 p3 )
    ((lambda ( n ) (< (car (trans p2 0 n)) (car (trans p1 0 n)))) (mapcar '- p1 p3))
)

;;164.3 [功能] 多段线端点列表 By 自贡黄明儒
;;示例(HH:PtLists (car (entsel)))
(defun HH:PtLists (en)
(mapcar 'cdr
          (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en))
)
)


;(/ osmode_bak clayer_bak ss ss7 ss2 en pts n);猫老师编辑器变量自动生成
(defun c:tt (/ osmode_bak clayer_bak ss ss7 ss2   p1 pts p2 p3 en n ss1sss ptx lst pt)
;----开始系统变量备份----
(command "undo" "be")
(setvar "cmdecho" 0);_关闭命令提示
(setq osmode_bak (getvar "osmode"));_记录捕捉
(setvar "osmode" 0);_关闭捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
;----;----;----;----;----;----;----;----;----
;按照图层分选择集,为了求2个图层对象的交点
(setq ss (ssget))

(command "select" ss"")
(setq ss7 (ssget "p" '((8 . "ngc7"))))

(command "select" ss "")
(setq ss2 (ssget "p" '((8 . "ngc2"))))


(setq en (ssname ss7 0))
(setq pts (HH:PtLists en));HH:PtLists多段线端点列表 By 自贡黄明儒
(setq n 0)

(if (< (fix(vlax-curve-getEndParam en)) 2)
    (progn
    (dengg);一条线的时候
)
)
(if (> (fix(vlax-curve-getEndParam en)) 1)
    (progn
    (deng);多条线的时候
)
)


;----结束系统变量还原----
(setvar "osmode" osmode_bak);_还原捕捉
(setvar "clayer" clayer_bak);_还原图层
(setvar "cmdecho" 1);_打开命令提示
(command "undo" "e")
(princ);_关闭程序返回值
)



;(/ p1 pts p2 p3 en n ss1 ss2 sss ptx lst pt)
(defun deng ()
(setq p1 (nth 0 pts)
      p2 (nth 1 pts)
      p3 (nth 2 pts)
)
(if (= (LM:Clockwise-p p1 p2 p3) nil); 判断顺时针和逆时针Clockwise-p-Lee Mac
    (progn (setq pts(reverse pts)))
)
;重复动作
(repeat
   (fix(vlax-curve-getEndParam en))
(command "line" (nth n pts) (nth (1+ n) pts) "")
(setq ss1 (entlast))
(command "select" ss1 ss2 "")
(setq sss (ssget "p" ))
(setq ptx (ssinters sss));ssinters求交点,明经论坛里面的
(command "erase" ss1 "")

(setq lst (append (list(nth n pts) (nth (1+ n) pts))ptx))
;下面就是判断线的方向,根据方向,重新排序点
(if (and(= (car(nth n pts)) (car(nth (1+ n) pts)))
      (< (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "y" 0.1)));点排序 HH:ssPts:SortBy 自贡黄明儒
)
(if (and(= (car(nth n pts)) (car(nth (1+ n) pts)))
      (> (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "Y" 0.1)))
)
(if (and(= (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (< (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "x" 0.1)))
)
(if (and(= (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (> (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "X" 0.1)))
)
(if (and(< (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (< (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "xy" 0.1)))
)
(if (and(> (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (> (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "XY" 0.1)))
)
(if (and(> (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (< (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "Yx" 0.1)))
)
(if (and(< (cadr(nth n pts)) (cadr(nth (1+ n) pts)))
      (> (car(nth n pts)) (car(nth (1+ n) pts)))
   )
   (progn(setq lst (HH:ssPts:Sort lst "Xy" 0.1)))
)

(command "-layer" "s" "ngc1" "")

(entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length lst)))
      (mapcar '(lambda (pt)(cons 10 pt)) lst ))
)
(setq n (1+ n))
)
)
上面的源码和附件源码是一样的,不愿意复制的可以下载,收币一枚
上面的代码是我自己琢磨的,有点啰嗦,只能说实现功能,期望大师能给个简单的办法,抛转一块,

zilong136 发表于 2024-1-15 01:14:08

本帖最后由 zilong136 于 2024-1-15 01:31 编辑

hhh454 发表于 2024-1-15 00:38
输入时间为:1982
OK,谢谢。

02春婵自动画体块墙面已扣好料位【tk】
03春婵模型-自动画万家灯火【d3】
春婵工具-画卡条加宽02【d4】
春婵工具-画卡条加宽04【d4】
申请码为: -1966280254
求注册码:

hhh454 发表于 2018-4-5 16:28:12

hhh454 发表于 2018-4-5 16:22
写万家灯火代码的时候,写了一个判断线方向的代码,觉得很有意思,我发出来源码,请厉害的前辈看看是否能简 ...

需要创建图层:ngc1   ngc2    ngc7

hehoubin 发表于 2018-4-10 11:43:51

支持你无私奉献

love1030312 发表于 2018-4-13 14:06:26

感谢分享   楼主把群号发下加个群谢谢

LIULISHENG 发表于 2020-11-15 10:10:43

这个工具很强

zmzk 发表于 2020-11-25 21:03:46

好想你 放出源码

迷失1786 发表于 2023-6-10 12:40:57

好东西要分享

lyq003 发表于 2023-6-30 14:21:14


好东西要分享

lyq003 发表于 2023-9-28 15:47:07

好东西要分享
页: [1] 2
查看完整版本: 春婵建筑模型CAD绘图工具箱