不仅实现属性编号递增修改,还能自动寻找长高
<p></p><p>基本思路:创建一属性快ST,里边包含NUM,X,Y三属性,看到<strong><font face="Verdana" color="#da2549">ZZXXQQ大哥编的程序能实现NUM的增量修改,我的想法是能不能同时还能自动对X,Y属性赋予新值,X即指ST属性快位置周边的直线所形成的封闭区域的长度,Y指ST属性快位置周边的直线所形成的封闭区域的高度,主要功能就是实现平面排板的下料与编号功能。</font></strong></p><p><strong><font face="Verdana" color="#da2549">具体一点说,就是在我的所传附件中,我先把ST属性快一一复制到每个封闭区域中,然后用ZZXXQQ的程序实现编号自动修改,同时还要实现根据ST属性快所处的每个位置周边区域大小不一样,重新赋予X,Y值。</font></strong></p><p><strong><font face="Verdana" color="#da2549">请求高手在ZZXXQQ编的程序基上再编一段实现我说的功能,愿意有偿请求帮助</font></strong></p> jscxh372 发表于 2010-4-22 08:48 版主,你太强大了,这段程序对于一个经常从事平面下料的人来而言,是省了90%的工 ...
请问一下平面下料是 主要下什么料呢 纸板还是铁板 ZZXXQQ 发表于 2010-4-21 22:41
看不见呢看不见呢看不见呢看不见呢看不见呢
;属性编号增加,自动替换长高 明经 ZZXXQQ 2010.4.21
(defun c:tt ()
(setvar "CMDECHO" 0)
(command ".undo" "be")
(setq k 1)
(while (and (setq s1 (entsel "\n选择带属性图块 :"))
(setq en (car s1) pt (cadr s1) ent (entget en))
(= (cdr(assoc 0 ent)) "INSERT")
)
(command "BPOLY" pt "")
(setq ent1 (entget(ssname(ssget "L") 0)))
(setq ptl (list))
(foreach x ent1 (if (= (car x) 10) (setq ptl (cons(cdr x) ptl))))
(setq pxmax -1e99 pxmin 1e99 pymax pxmax pymin pxmin)
(foreach x ptl
(setq pxmax (if (> (car x) pxmax) (car x) pxmax)
pxmin (if (< (car x) pxmin) (car x) pxmin)
pymax (if (> (cadr x) pymax) (cadr x) pymax)
pymin (if (< (cadr x) pymin) (cadr x) pymin))
)
(setq x1 (- pxmax pxmin) y1 (- pymax pymin))
(command ".erase" "l" "")
(setq ent2 (entget(entnext(cdr(assoc -1 ent)))))
(setq ent2 (subst (cons 1 (itoa k)) (assoc 1 ent2) ent2))
(entmod ent2)
(entmod ent)
(setq ent3 (entget(entnext(cdr(assoc -1 ent2)))))
(setq ent3 (subst (cons 1 (rtos y1 2 3)) (assoc 1 ent3) ent3))
(entmod ent3)
(entmod ent)
(setq ent4 (entget(entnext(cdr(assoc -1 ent3)))))
(setq ent4 (subst (cons 1 (rtos x1 2 3)) (assoc 1 ent4) ent4))
(entmod ent4)
(entmod ent)
(entupd en)
(setq k (1+ k))
)
(command ".undo" "e")
(setvar "CMDECHO" 1)
(princ)
)
<p> 版主,你太强大了,这段程序对于一个经常从事平面下料的人来而言,是省了90%的工时,而且有效地把下料的准确度提升到100%,这对于一个行业而言,是革命性的提高。</p><p> 我们传统的工作模式是图打印出来,照图下料,纯手工的,后来我是想到用属性与标柱建立函数关系,但是这个函数关系的过程需要手工,另外编号需要手工修改,而现在因你的这段程序达到完全的自动下料。 </p><p> 感谢<strong><font face="Verdana" color="#da2549">ZZXXQQ的无私奉献,对于您而言,也许是举手之劳,对于我们行业而言,却是解放了一整个行业的人,我替我们整个从事平面下料行业感谢您。</font></strong></p> 如何将同一尺寸,自动变为一个编号呢? 烦请老大<strong><font face="Verdana" color="#da2549">ZZXXQQ<font color="#000000">再帮忙看一下,如在附件中的图例一样,编号已修改完毕,有没有办法能对图中所有属性块中的X,Y值,用框选一次性分别赋上各自封闭区域的相应的长高值。</font></font></strong> 忘了发附件补发一下 <p>建议使用动态块,设定矩形STRETCH,同时在定义块时,使用FIELD自动追踪块尺寸的变化。不过需要CAD06以上。</p><p>可以参考附图图块GL1里的HEIGHT和WIDTH属性。</p> <p>感谢楼上的建议,我有用过类似,就是在FIELD中插入标柱中的数字,可以作到类似功能,只是复制时得当心一点,一定是每次复制的编号与标柱一定要一起,否则函数定义就不对了。</p><p></p>
;框选自动替换长高 明经 ZZXXQQ 2010.4.26
(defun c:tt ()
(setvar "CMDECHO" 0)
(command ".undo" "be")
(if (progn (princ "\n选择带属性图块 :")
(setq ss (ssget '((0 . "INSERT") (66 . 1))))) (progn
(setq k 0)
(repeat (sslength ss)
(setq en (ssname ss k) ent (entget en))
(setq ent2 (entget(entnext(cdr(assoc -1 ent)))))
(setq pt (cdr(assoc 10 ent2)))
(setq k (1+ k))
(command "BPOLY" pt "")
(setq ent1 (entget(ssname(ssget "L") 0)))
(setq ptl (list))
(foreach x ent1 (if (= (car x) 10) (setq ptl (cons(cdr x) ptl))))
(setq pxmax -1e99 pxmin 1e99 pymax pxmax pymin pxmin)
(foreach x ptl
(setq pxmax (if (> (car x) pxmax) (car x) pxmax)
pxmin (if (< (car x) pxmin) (car x) pxmin)
pymax (if (> (cadr x) pymax) (cadr x) pymax)
pymin (if (< (cadr x) pymin) (cadr x) pymin))
)
(setq x1 (- pxmax pxmin) y1 (- pymax pymin))
(command ".erase" "l" "")
; (setq ent2 (subst (cons 1 (itoa k)) (assoc 1 ent2) ent2)) ;要变序号就用这三行
; (entmod ent2)
; (entmod ent)
(setq ent3 (entget(entnext(cdr(assoc -1 ent2)))))
(setq ent3 (subst (cons 1 (rtos y1 2 3)) (assoc 1 ent3) ent3))
(entmod ent3)
(entmod ent)
(setq ent4 (entget(entnext(cdr(assoc -1 ent3)))))
(setq ent4 (subst (cons 1 (rtos x1 2 3)) (assoc 1 ent4) ent4))
(entmod ent4)
(entmod ent)
(entupd en)
)
))
(command ".undo" "e")
(setvar "CMDECHO" 1)
(princ)
)
<p>ok,经试用,所有预期均完美解决。非常感谢<strong><font face="Verdana" color="#da2549">ZZXXQQ的付出。</font></strong>作为我个人的工作,已经是足够。</p><p>看到此版有行业应用征求意见帖,其实我问的这几个问题归纳起来就是平面下料行业,一般饰面工程均可以应用的</p><p>如果开发成工具,则需包括以下步骤</p><p>第一,检查图形是否封闭,如未封闭则自动以最短或是以下料规则连接</p><p>第二,自动根据根据排板图,复制每个属性快到每个封闭区域内</p><p>第三,下料(最难的一步,老大已经解决)</p><p>第四,归并相同规格,并合并编号</p><p>第四,整理成材料清单.</p><p> </p><p> </p>