无痕
发表于 2004-3-11 07:51:00
如果有弧段还是差一点啊
龙龙仔
发表于 2004-3-11 12:24:00
本帖最后由 作者 于 2004-3-11 17:07:54 编辑 <br /><br /> alin发表于2004-3-11 6:43:00static/image/common/back.gif;<SPAN style=\"FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-langu...
光直線,程序好像也沒有達到效果<BR>
;;對圓弧還是不行!!<BR>;;By 龍龍仔(LUCAS) <BR>;;程序未優化<BR>(defun massoc_t (key alist /)<BR> (apply 'append<BR> (mapcar '(lambda (x)<BR> (if (eq (car x) key)<BR> (list (cdr x))<BR> )<BR> )<BR> alist<BR> )<BR> )<BR>)
(defun scanpol (ent / lst pt enti)<BR> (setq lst nil<BR> enti ent<BR> )<BR> (while (/= "SEQEND"<BR> (cdr (assoc 0 (entget (setq enti (entnext enti)))))<BR> )<BR> (setq pt (cdr (assoc 10 (entget enti)))<BR> lst (cons pt lst)<BR> )<BR> )<BR> (reverse lst)<BR>)
(defun getboundingbox (ent / ll ur)<BR> (vla-getboundingbox (vlax-ename->vla-object ent) 'll 'ur)<BR> (mapcar 'vlax-safearray->list (list ll ur))<BR>)
(defun inter (pl1 pl2 mode / ipts pts)<BR> (setq ipts (vla-intersectwith<BR> (vlax-ename->vla-object pl1)<BR> (vlax-ename->vla-object pl2)<BR> mode<BR> )<BR> ipts (vlax-variant-value ipts)<BR> )<BR> (if (> (vlax-safearray-get-u-bound ipts 1) 0)<BR> (progn (setq ipts<BR> (vlax-safearray->list ipts)<BR> )<BR> (while (> (length ipts) 0)<BR> (setq pts (cons (list (car ipts)<BR> (cadr ipts)<BR> (caddr ipts)<BR> )<BR> pts<BR> )<BR> ipts (cdddr ipts)<BR> )<BR> )<BR> )<BR> )<BR> pts<BR>)
(defun tt (ent / etype)<BR> (setq etype (cdr (assoc 0 (entget ent))))<BR> (cond<BR> ((= "LWPOLYLINE" etype)<BR> (massoc_t 10 (entget ent))<BR> )<BR> ((= "POLYLINE" etype)<BR> (scanpol ent)<BR> )<BR> )<BR>)
(defun c:ttt (/ holdosmode dist1 dist dist2 ent box<BR> ent1 lst2 lst n pt pt2 pt1 lst3<BR> p1 p2 l1<BR> )<BR> (command "_.UNDO" "GROUP")<BR> (setq holdosmode (getvar "OSMODE"))<BR> (setvar "OSMODE" 0)<BR> (setq ent (car (entsel)))<BR> (setq box (getboundingbox ent))<BR> ;;(vl-cmdf ".RECTANG" (car box) (cadr box))<BR> (setq dist (abs (- (caar box) (caadr box))))<BR> (command "_.COPY" ent "" "0,0" (polar '(0 0) 0.0 dist))<BR> (setq ent1 (entlast))<BR> (command "_.LINE"<BR> (cadr box)<BR> (polar (cadr box) (* 0.5 pi) 10.0)<BR> ""<BR> )<BR> (setq l1 (entlast))<BR> (setq lst1 (inter l1 ent acextendthisentity));對圓弧找不到交點???<BR> (setq lst (inter l1 ent1 acextendthisentity);對圓弧找不到交點???<BR> n 0<BR> dist1 1E99<BR> )<BR> (command "_.ERASE" l1 "")<BR> (setq lst (append lst (tt ent1)))<BR> (repeat (length lst)<BR> (setq pt (nth n lst)<BR> dist2 nil<BR> )<BR> (if (= (length pt) 2)<BR> (setq pt (list (car pt) (cadr pt) 0.0))<BR> )<BR> (command "_.LINE"<BR> pt<BR> (polar pt 0 10.0)<BR> ""<BR> )<BR> (setq lst2 (inter (entlast) ent acextendthisentity))<BR> (setq pt2 (vl-sort<BR> lst2<BR> '(lambda (p1 p2) (> (car p1) (car p2)))<BR> )<BR> )<BR> (command "_.ERASE" (entlast) "")<BR> (if (not (equal (nth 0 pt2) pt))<BR> (setq dist2 (abs (distance (nth 0 pt2) pt)))<BR> (setq dist2 0)<BR> )<BR> (if (and dist2<BR> (> dist1 dist2)<BR> )<BR> (setq dist1 dist2)<BR> )<BR> (setq n (1+ n))<BR> )<BR> (setq lst1 (append lst1 (tt ent))<BR> n 0<BR> )<BR> (repeat (length lst1)<BR> (setq pt (nth n lst1)<BR> dist2 nil<BR> )<BR> (if (= (length pt) 2)<BR> (setq pt (list (car pt) (cadr pt) 0.0))<BR> )<BR> (command "_.LINE"<BR> pt<BR> (polar pt pi 10.0)<BR> ""<BR> )<BR> (setq lst2 (inter (entlast) ent1 acextendthisentity))<BR> (setq pt2 (vl-sort<BR> lst2<BR> '(lambda (p1 p2) (< (car p1) (car p2)))<BR> )<BR> )<BR> (command "_.ERASE" (entlast) "")<BR> (if (not (equal (nth 0 pt2) pt))<BR> (setq dist2 (abs (distance (nth 0 pt2) pt)))<BR> (setq dist2 0)<BR> )<BR> (if (and dist2<BR> (> dist1 dist2)<BR> )<BR> (setq dist1 dist2)<BR> )<BR> (setq n (1+ n))<BR> )<BR> (command "_.MOVE" ent1 "" "0,0" (polar '(0 0) pi dist1))<BR> (command "_.UNDO" "END")<BR> (setvar "OSMODE" holdosmode)<BR> (princ)<BR>)
龙龙仔
发表于 2004-3-12 08:16:00
match.vlx測試,type match執行
秋枫
发表于 2004-3-14 18:56:00
我感觉这个要求类似服装CAD系统的计算机自动布料系统所需要的。
各位有没有服装CAD软件推荐?有没有基于AutoCAD的服装CAD软件?
南子
发表于 2004-3-16 12:40:00
1.重合问题,比如矩形偏移
2.交点问题.我们知道点是没有大小的,但又确实存在.比如两条十字线,您剪掉右边线,那么您就无法剪掉左边线.
BDYCAD
发表于 2004-4-23 11:50:00
正如14樓秋楓所說. 我想做一個自動排料系統. 以下是我寫的代碼. 希望可以完善.
我需要自動排的效果如下圖所示
目前程序完成的效果如下圖所示
程序代碼如下.
測試圖如下
龙龙仔
发表于 2004-4-23 12:34:00
自動排是不太可能,半自動一次兩件兩件靠近是可以,類似我提供那種,有需要的話(說一聲)我可以改一下
BDYCAD
发表于 2004-4-23 12:50:00
其實我以前看了你的程序后我就開始想寫一個這樣的功能哦. 我上午看了很久你上面的程序. 不同點是我處理的全是SPLINE曲線 . 你運用的多是VL我有很多看不懂. 現在還是不明明白如何用你上面的去改進. 還望多多指教呢. 還有希望可以看到你是如何實現半自動的. 好吧就先行謝謝您了. 呵呵 : )
龙龙仔
发表于 2004-4-23 14:32:00
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><B>BDYCAD:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></B>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">先發個<FONT face="Times New Roman">vlx</FONT>函數給你使用<FONT face="Times New Roman">!<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">;;By </FONT>龍龍仔<FONT face="Times New Roman">(LUCAS)<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">;;</FONT>注意<FONT face="Times New Roman">:<</FONT>指定基準點<FONT face="Times New Roman">></FONT>靠近移動件<FONT face="Times New Roman">,<</FONT>指定位移方向<FONT face="Times New Roman">></FONT>指向不動件<o:p></o:p>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">;;</FONT>當兩件沒有接觸點<FONT face="Times New Roman">,</FONT>程序會<FONT face="Times New Roman">..........</FONT>無法停止<FONT face="Times New Roman">(</FONT>按<FONT face="Times New Roman">ESC</FONT>吧<FONT face="Times New Roman">!)<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">;;Usage:(match <</FONT>選取不動件<FONT face="Times New Roman">> <</FONT>選取移動件<FONT face="Times New Roman">> <</FONT>指定基準點<FONT face="Times New Roman">> <</FONT>指定位移方向<FONT face="Times New Roman">>)<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">(defun C:TT (/ ENT ENT1 PT1 PT2)<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (while (not (setq ENT (car (entsel "\n</FONT></SPAN>選取不動件<FONT face="Times New Roman">: ")))))<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (while (not (setq ENT1 (car (entsel "\n</FONT></SPAN>選取移動件<FONT face="Times New Roman">: ")))))<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (setq PT1 (getpoint "\n</FONT></SPAN>指定基準點<FONT face="Times New Roman">: "))<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (setq PT2 (getpoint PT1 "\n</FONT></SPAN>指定位移方向第二點<FONT face="Times New Roman">: "))<o:p></o:p></FONT>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (MATCH ENT ENT1 PT1 PT2)<o:p></o:p></FONT></SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><SPAN style="mso-spacerun: yes"> (princ)<o:p></o:p></FONT></SPAN>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman">)<o:p></o:p></FONT>
zoe
发表于 2004-4-26 19:59:00
14楼所说的正是我现在最需要的,大家可以帮帮忙吗?