byghbcx
				发表于 2007-4-9 09:00:00	
			
		<p>先定义一个块,再用MEASURE命令.lsp也可以做,但计算要复杂点,对多义线,首先要求出每隔1.5米的所有点,然后分别求出该点的法线角度,也就可以达到目的要求了.</p>				
					lht
				发表于 2007-4-9 10:18:00	
			
		<p>(defun c:kjh ( / )<br/>(setvar "osmode" 0)                           ;关闭捕捉<br/>(command"_pline" (list 0 0) (list 100 0) "")  ;画长为100的水平线<br/>(command"_pline" (list 0 0) (list 0 0.5) "")  ;画长为0.5的垂直线<br/>(command "-array" (entlast) "" "r" 1 101 1 "");1行,101列,列距为1的矩阵<br/>(setvar "osmode" 35)                          ;打开捕捉<br/>)</p>				
					lht
				发表于 2007-4-9 10:20:00	
			
		<p>(defun c:kjh ( / )<br/>(setvar "osmode" 0)                           ;关闭捕捉<br/>(command"_pline" (list 0 0) (list 100 0) "")  ;画长为100的水平线<br/>(command"_pline" (list 0 0) (list 0 0.5) "")  ;画长为0.5的垂直线<br/>(command "-array" (entlast) "" "r" 1 101 1 "");1行,101列,列距为1的矩阵<br/>(setvar "osmode" 35)                          ;打开捕捉<br/>)</p>				
					byghbcx
				发表于 2007-4-9 11:19:00	
			
		多义线只是水平的吗?只有一段吗?这有点太简单了				
					wei209
				发表于 2007-4-9 16:49:00	
			
		<p>"-array" 改为 "_array"</p><p></p>				
					alin
				发表于 2007-4-10 21:45:00	
			
		;;; ***************<br/>;;; By Alvin Y. LIN<br/>;;; ***************<br/>(defun C:test (/   interval   width initlen    oldOSMODE<br/>        plObj   ent      startPoint endPoint   initPoint<br/>        revp   len      interval num    cnt<br/>        rotang   firstDeriv pt  stPoint    selPoint<br/>       )<br/>  (setq interval 1000   ; 1m<br/> width 500   ; 0.5m<br/> initlen 0   ;????<br/>  )<br/>  (setq oldOSMODE (getvar "OSMODE"))<br/>  (command "ucs" "w")<br/>  (setq plObj (vlax-ename->vla-object<br/>  (car<br/>    (setq ent (entsel "\nSelect an object: "))<br/>  )<br/>       )<br/>  )<br/>  (if (member (vla-get-objectname plObj)<br/>       '("AcDbPolyline"   "AcDbLine"     "AcDbSpline"<br/>  "AcDbARC"   "AcDbCircle"     "AcDbEllipse"<br/>        )<br/>      )<br/>    (progn<br/>      (setq selPoint (cadr ent))<br/>      (setq startPoint (vlax-curve-getStartPoint plObj))<br/>      (setq endPoint (vlax-curve-getEndPoint plObj))<br/>      (if (> (distance selPoint startPoint)<br/>      (distance selPoint endPoint)<br/>   )<br/> (setq stPoint endPoint<br/>       revp    T<br/> )<br/> (setq stPoint startPoint<br/>       revp    nil<br/> )<br/>      )<br/>      (setvar "OSMODE" 0)<br/>      (setq len (- (vlax-curve-getDistAtParam<br/>       plObj<br/>       (vlax-curve-getendparam plObj)<br/>     )<br/>     initlen<br/>  )<br/>      )<br/>      (setq num (1+ (fix (/ len interval))))<br/>      (setq cnt 0)<br/>      (command "undo" "BE")<br/>      (while (<= cnt (1- num))<br/> (cond ((= revp nil)<br/>        (setq pt (vlax-curve-getPointAtDist<br/>     plObj<br/>     (+ initlen (* interval cnt))<br/>   )<br/>        )<br/>        (setq firstDeriv<br/>        (vlax-curve-getFirstDeriv<br/>   plObj<br/>   (vlax-curve-getParamAtPoint plObj pt)<br/>        )<br/>        )<br/>        (setq rotang (angle '(0 0 0) firstDeriv))<br/>        (command "line"<br/>   (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))<br/>   (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))<br/>   ""<br/>        )<br/>       )<br/>       ((= revp T)<br/>        (setq pt (vlax-curve-getPointAtDist<br/>     plObj<br/>     (- len (* interval cnt))<br/>   )<br/>        )<br/>        (setq firstDeriv<br/>        (vlax-curve-getFirstDeriv<br/>   plObj<br/>   (vlax-curve-getParamAtPoint plObj pt)<br/>        )<br/>        )<br/>        (setq rotang (angle '(0 0 0) firstDeriv))<br/>        (command "line"<br/>   (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))<br/>   (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))<br/>   ""<br/>        )<br/>       )<br/> )    ;cond<br/> (setq cnt (1+ cnt))<br/>      )     ;while<br/>      (command "undo" "E")<br/>    )     ;progn<br/>    (alert "\Invalid object Selected!")<br/>  )     ;endif<br/>  (vlax-release-object plObj)<br/>  (command "ucs" "p")<br/>  (setvar "OSMODE" oldOSMODE)<br/>  (princ)<br/>)				
					byghbcx
				发表于 2007-4-11 09:23:00	
			
		<p>可以改一下,即画即显示,加入比例变量,但怎样在多义线绘制中间能够绘制短线,就是说在命令行显示为:</p><p><font style="BACKGROUND-COLOR: #c4c43c;">指定下一点或 [圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)]:</font></p><p><font style="BACKGROUND-COLOR: #ffffff;">的时候能运行程序.</font></p><p>我一时还没想到办法(可以用程序去模拟多义线绘制命令,但这样较复杂点),是否注册一个透明命令?</p><p>(defun C:test (/ scale  interval   width initlen    oldOSMODE<br/>        plObj   ent  pt1 pt2    startPoint endPoint   initPoint<br/>        revp   len      interval num    cnt<br/>        rotang   firstDeriv pt  stPoint    selPoint<br/>       )<br/>  (setq scale (getreal "\n请输入比例1:<1000>"))<br/>  (if (not scale) (setq scale 1000))<br/>  (setq interval scale   ; 1m<br/> width (* scale 0.5)  ; 0.5m<br/> initlen 0   ;????<br/>  )<br/>  (setq oldOSMODE (getvar "OSMODE"))<br/>  (setq cnt 0)<br/>  (command "undo" "BE")<br/>  (command "ucs" "w")<br/>  (vl-load-com)<br/>  (setq pt1 (getpoint "\n输入多义线起点"))<br/>  (setq pt2 (getpoint pt1 "\n输入多义线顶点(下一点)"))<br/>  (while pt2<br/>    (command "_.pline" pt1 pt2 "")<br/>    (if ent (progn (command "_.pedit" ent "j" (entlast) "" ""))) (setq ent (entlast))<br/>  (setq plObj (vlax-ename->vla-object ent<br/>;;;  (car<br/>;;;    (setq ent (entsel "\nSelect an object: "))<br/>;;;  )<br/>       )<br/>  )<br/>  (if (member (vla-get-objectname plObj)<br/>       '("AcDbPolyline" "AcDb2dPolyline"  "AcDbLine"     "AcDbSpline"<br/>  "AcDbARC"   "AcDbCircle"     "AcDbEllipse"<br/>        )<br/>      )<br/>    (progn<br/>;;;      (setq selPoint (cdr (assoc 10 (entget ent)))));(cadr ent))<br/>      (setq startPoint (vlax-curve-getStartPoint plObj))<br/>      (setq endPoint (vlax-curve-getEndPoint plObj))<br/>;;;      (if (> (distance selPoint startPoint)<br/>;;;      (distance selPoint endPoint)<br/>;;;   )<br/>;;; (setq stPoint endPoint<br/>;;;       revp    T<br/>;;; )<br/> (setq stPoint startPoint<br/>       revp    nil<br/> )<br/>;;;      )<br/>      (setvar "OSMODE" 0)<br/>      (setq len (- (vlax-curve-getDistAtParam<br/>       plObj<br/>       (vlax-curve-getendparam plObj)<br/>     )<br/>     initlen<br/>  )<br/>      )<br/>      (setq num (1+ (fix (/ len interval))))<br/>      <br/>      (while (<= cnt (1- num))<br/> (cond ((= revp nil)<br/>        (setq pt (vlax-curve-getPointAtDist<br/>     plObj<br/>     (+ initlen (* interval cnt))<br/>   )<br/>        )<br/>        (setq firstDeriv<br/>        (vlax-curve-getFirstDeriv<br/>   plObj<br/>   (vlax-curve-getParamAtPoint plObj pt)<br/>        )<br/>        )<br/>        (setq rotang (angle '(0 0 0) firstDeriv))<br/>        (command "line"<br/>   (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))<br/>   (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))<br/>   ""<br/>        )<br/>       )<br/>       ((= revp T)<br/>        (setq pt (vlax-curve-getPointAtDist<br/>     plObj<br/>     (- len (* interval cnt))<br/>   )<br/>        )<br/>        (setq firstDeriv<br/>        (vlax-curve-getFirstDeriv<br/>   plObj<br/>   (vlax-curve-getParamAtPoint plObj pt)<br/>        )<br/>        )<br/>        (setq rotang (angle '(0 0 0) firstDeriv))<br/>        (command "line"<br/>   (polar pt (+ rotang (* 0.5 pi)) (* 0.5 width))<br/>   (polar pt (- rotang (* 0.5 pi)) (* 0.5 width))<br/>   ""<br/>        )<br/>       )<br/> )    ;cond<br/> (setq cnt (1+ cnt))<br/>      )     ;while<br/>      <br/>    )     ;progn<br/>    (alert "\Invalid object Selected!")<br/>  )     ;endif<br/>    (setq pt1 pt2)<br/>    (setq pt2 (getpoint pt1 "\n输入多义线顶点(下一点)"))<br/>    )<br/>  (vlax-release-object plObj)<br/>  (command "ucs" "p")<br/>  (command "undo" "E")<br/>  (setvar "OSMODE" oldOSMODE)<br/>  (princ)<br/>)</p>				
					77077
				发表于 2007-4-26 11:31:00	
			
		<p>楼上的,我运行了以后发现是以下这个样子哦!</p><p>在转弯的地方就不能在多段线上了!</p><p></p>				
					byghbcx
				发表于 2007-4-26 11:35:00	
			
		这里没有多段线模拟程序,也就是没有加入弧段的功能,要稍加修改方能实现				
					77077
				发表于 2007-4-28 13:50:00	
			
		<p>问题是 难者不会,会者不难!</p><p>请楼上的帮忙一下哦!</p>