无痕 发表于 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;&lt;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-&gt;vla-object ent) 'll 'ur)<BR>       (mapcar 'vlax-safearray-&gt;list (list ll ur))<BR>)
(defun inter (pl1 pl2 mode / ipts pts)<BR>       (setq        ipts (vla-intersectwith<BR>                                                       (vlax-ename-&gt;vla-object pl1)<BR>                                                       (vlax-ename-&gt;vla-object pl2)<BR>                                                       mode<BR>                                       )<BR>        ipts (vlax-variant-value ipts)<BR>       )<BR>       (if (&gt; (vlax-safearray-get-u-bound ipts 1) 0)<BR>                       (progn (setq ipts<BR>                       (vlax-safearray-&gt;list ipts)<BR>                       )<BR>                       (while (&gt; (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) (&gt; (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>                                       (&gt; 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) (&lt; (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>                                       (&gt; 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">:&lt;</FONT>指定基準點<FONT face="Times New Roman">&gt;</FONT>靠近移動件<FONT face="Times New Roman">,&lt;</FONT>指定位移方向<FONT face="Times New Roman">&gt;</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 &lt;</FONT>選取不動件<FONT face="Times New Roman">&gt; &lt;</FONT>選取移動件<FONT face="Times New Roman">&gt; &lt;</FONT>指定基準點<FONT face="Times New Roman">&gt; &lt;</FONT>指定位移方向<FONT face="Times New Roman">&gt;)<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楼所说的正是我现在最需要的,大家可以帮帮忙吗?
页: 1 [2] 3
查看完整版本: 关于多段线的有趣有挑战性的问题