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