样条曲线可以传换成圆孤的吗
本帖最后由 作者 于 2005-7-20 19:19:03 编辑样条曲线可以传换成圆孤的吗。。怎样设置才可以。那位高手帮我写一个LISP程序。传换成圆孤不要太少。。孤长3。4MM都可以。。主要的是传换回的精度。圆孤要跟原来的样条曲线对得上。精度不能大于0。01MM。我在此先多谢先 <P><STRONG>问:::????vb中多义线如何拟合?</STRONG></P> <P>怎么没有帮帮我这个忙啊。。</P>
<P>在CAD里另存为R12格式可以把SPL传换回PL。但是传换过来都是直线了。是圆孤的地方也是直线。有什么办法可以把传换回来的PL有圆孤的地方是圆孤。直线的是直线。怎样设置或有什么程序可以的吗。</P> <P>我以前编写过类似的程序但有点问题,另现在网吧不让上传</P>
<P>我把我的思路说一下吧,希望对你有所帮助:用vlax-curve-***函数获得spline的startpoint和endpoint,以及spline线上指定长度的点(我是将spline线等分n份;n越大精度越高run越慢);然后循环在spline线上以三点画arc,直到完成。</P>
<P>几点注意:1.在比较尖锐的地方要缩小spline线上指定长度的点;2.当spline很平直时不能用arc只能用line;3.垂直和水平的spline部分要注意。</P>
<P> </P> <P>多谢楼上。。我对这个不懂啊。。能不能帮我帮到底。帮我写一个。在此先多谢先</P> <P>(defun c:t1 (/ en dist length-en nn vl-en vl-en old_osmode)<BR> (vl-load-com)<BR> (setq *acadobject* (vlax-get-acad-object)<BR> *acaddocument* (vla-get-activedocument *acadobject*)<BR> *mspace* (vla-get-modelspace *acaddocument*)<BR> ) ;_ endsetq</P>
<P> (setq en (car (entsel "please select a spline: ")))<BR> (if (null en)<BR> (exit)<BR> ) ;_ endif<BR> (setq dist (getreal "please input the distance that you want: "))<BR> (if (null dist)<BR> (setq dist 1)<BR> ) ;_ endif<BR> (vla-startundomark *acadDocument*)<BR> (command "lengthen" en "")<BR> (setq ss1 (ssadd)<BR> old-osmode (getvar "osmode")<BR> old-cmdecho (getvar "cmdecho")<BR> length-en (getvar "perimeter")<BR> nn (fix (/ length-en dist))<BR> i 0<BR> vl-en (vlax-ename->vla-object en)<BR> c (ssadd)<BR> pt-end (cdr (last (entget en)))<BR> ) ;_ Endsetq<BR> (if (< length-en dist)<BR> (exit)<BR> ) ;_ Endif<BR> (setvar "osmode" 0)<BR> (setvar "cmdecho" 0)<BR> (repeat nn<BR> (setq pt0 (vlax-curve-getpointatdist vl-en (* (+ i 0) dist))<BR> pt1 (vlax-curve-getpointatdist vl-en (* (+ i 1) dist))<BR> i (1+ i)<BR> ) ;_ Endsetq<BR> (command "line" pt0 pt1 "")<BR> (ssadd (entlast) ss1)<BR> ) ;_ Endrepeat<BR> (command "line" pt1 pt-end "")<BR> (command "pedit" (entlast) "y" "j" ss1 "" "")<BR> (setvar "osmode" old-osmode)<BR> (setvar "cmdecho" old-cmdecho)<BR> (vla-endundomark *acadDocument*)<BR>) ;_ enddefun<BR></P> <P>看能不能起一点抛砖引玉的作用了</P>
<P>,另请 torcky 批评指正</P> <P><A name=46883><FONT color=#000066><B>HuaiYu</B></FONT></A>,你太谦虚了。</P>
<P>你是用短直线代替spline,这样还比较简单。</P>
<P> </P> <P>;;;这是俺好久以前写的,供各位参考</P>
<P>(defun c:cr ()<BR> (vl-load-com)<BR> (command "undo" "be")<BR> (command "ucs" "w")<BR> (setvar "cmdecho" 0)<BR> (setq oldpara1 (getvar "orthomode") oldpara2 (getvar "osmode"))<BR> (setvar "orthomode" 0 )<BR> (setvar "osmode" 0)<BR> (setq entname (car(entsel "\nSelect Curve:")))<BR> (setq precision(getreal "\nEnter Precision Factor<1>:"))<BR> (command "area" "e" entname)<BR> (setq curve-long (getvar "perimeter"))<BR> (if (= precision nil)<BR> (setq facter 0.5)<BR> (setq facter (/ 0.5 precision)))<BR> (setq re (rem curve-long facter))<BR> (setq i (/ (- curve-long re)facter))<BR> (setq j 0)<BR> (setq arc (ssadd))<BR> (setq vla-curve(vlax-ename->vla-object entname))<BR> (setq st-point(vlax-curve-getStartPoint vla-curve))<BR> (while (< j i)<BR> (setq mid-point(vlax-curve-getPointAtDist vla-curve (+ (/ facter 2.0) (* facter j))))<BR> (setq end-point(vlax-curve-getPointAtDist vla-curve (+ facter (* facter j))))<BR> (slope)<BR> (cond<BR> ((= flags 0) (command "line" st-point end-point ""))<BR> ((= flags 1) (command "arc" st-point mid-point end-point))<BR> ((= flags 2) (progn<BR> (setq mid-point(vlax-curve-getPointAtDist vla-curve (+ (/ facter 8.0) (* facter j))))<BR> (setq end-point(vlax-curve-getPointAtDist vla-curve (+ (/ facter 4.0) (* facter j))))<BR> (command "arc" st-point mid-point end-point))))<BR> (setq arc (ssadd (entlast) arc))<BR> (setq st-point end-point)<BR> (setq j(1+ j))<BR> )<BR> (if (> re 0)<BR> (progn<BR> (setq re2 (/ re 2.0))<BR> (setq mid-point(vlax-curve-getPointAtDist vla-curve (+ re2(+ facter (* facter (- j 1))))))<BR> (setq end-point(vlax-curve-getEndPoint vla-curve))<BR> (slope)<BR> (cond<BR> ((= flags 0) (command "line" st-point end-point ""))<BR> ((= flags 1) (command "arc" st-point mid-point end-point)))<BR> (setq arc (ssadd (entlast) arc))<BR> (princ)<BR> )<BR> )<BR> (command "pedit" (entlast) "y" "j" arc "" "")<BR> (setvar "orthomode" oldpara1 )<BR> (setvar "osmode" oldpara2)<BR> (command "undo" "e")<BR> (prompt "\n*****Designer of CurveToArc V1.0 Is Tang.J.Z.*****")<BR> (princ)<BR> )<BR>(defun slope()<BR> (setq st-point-x(car st-point))<BR> (setq st-point-y(cadr st-point))<BR> (setq mid-point-x(car mid-point))<BR> (setq mid-point-y(cadr mid-point))<BR> (setq end-point-x(car end-point))<BR> (setq end-point-y(cadr end-point))<BR> (cond<BR> ((and (= st-point-y mid-point-y)(/= end-point-y mid-point-y)) (setq flags 1))<BR> ((and (/= st-point-y mid-point-y)(= end-point-y mid-point-y)) (setq flags 1))<BR> ((and (/= st-point-y mid-point-y)(/= end-point-y mid-point-y))<BR> (progn<BR> (setq slope-st(/(- mid-point-x st-point-x)(- mid-point-y st-point-y)))<BR> (setq slope-end(/(- end-point-x mid-point-x )(- end-point-y mid-point-y )))<BR> (setq flags 1)<BR> (if (<= (abs (- slope-st slope-end)) 0.0005)<BR> (setq flags 0)<BR> )<BR> (if (>= (abs (- slope-st slope-end)) 0.5)<BR> (setq flags 2)<BR> )<BR> )<BR> )<BR> ((and (= st-point-y mid-point-y)(= end-point-y mid-point-y)) (setq flags 0))<BR> )<BR>)</P> <P>变什么都行!</P>
<P></P>
页:
[1]
2