liminnet发表于2009-8-28 16:49:00兄弟,你的的代码内容的水不够深呢,拿的复杂的出来呀
你自称是大师,就给大家讲讲我这的代码是做什么的吧~ (setq ob (car (setq get (entsel)))) (Vlax-Invoke-Method (setq blk (Vlax-Ename->Vla-Object ob)) 'GetXData "Test" 'a 'b) (setq blkname (vla-get-name blk)) (setq Blks (Vlax-Invoke-Method (Vlax-Get Doc 'Blocks) 'Item blkname)) (if (and b (= "Road" (vlax-variant-value (cadr (vlax-safearray->list b))))) (progn (vlax-for item Blks (setq objectName (Vlax-Get item 'ObjectName )) (cond ((= "AcDbPoint" objectName) (setq pts (append pts (list (trans (Vlax-Get item 'Coordinates ) 0 1)))) ) ) ) ) ) (cond ((= DrawMode 0);逆时针 (com "line" (list pt_1a pt_c1a pt_1b pt_c1b)) (setq pta pt_1a ptc pt_1b ptb (polar (GetMidPt pt_1a pt_1b) ang12 (* 0.3 ArcWidth))) (setq long (distance pt_1a pt_c1a)) (while (> long (+ ArcLong (* 0.3 ArcWidth))) (command "_.Arc" pta ptb ptc) (setq long (- long Arclong)) (setq pta (polar pta ang12 Arclong) ptc (polar ptc ang12 Arclong) ptb (polar ptb ang12 Arclong) ) ) (command "_.Arc" pt_c1a pt_c2a pt_c3a) (command "_.Arc" pt_c1b pt_c2b pt_c3b) (setq pt_z1 (GetMidPt pt_c1a pt_c1b));中间圆弧 (setq pt_z2 (GetMidPt pt_c2a pt_c2b)) (setq pt_z3 (GetMidPt pt_c3a pt_c3b)) (setq long_left long);刚才剩下的部分 (command "_.Arc" pt_z1 pt_z2 pt_z3) (setq las_arc (Vlax-Ename->Vla-Object (entlast))) (setq long (Vlax-Get las_arc 'ArcLength )) (setq pta pt_c1a ptc pt_c1b) (setq pt_st pt_z1) (setq ptb (vlax-curve-getPointAtDist las_arc (* 0.3 ArcWidth))) (setq ptb (trans ptb 0 1)) (setq j 0) (while (> long (* Arclong (+ j 0.3))) (command "_.Arc" pta ptb ptc) (setq long (- long Arclong)) (setq ptb (vlax-curve-getPointAtDist las_arc (* Arclong (setq j (1+ j))))) (setq ptb (trans ptb 0 1)) (setq pta (polar pt_cen (angle pt_cen ptb) ArcWidth)) (setq ptc (polar pt_cen (angle pt_cen ptb) (* ArcWidth 2))) (setq ptb (vlax-curve-getPointAtDist las_arc (* Arclong (+ j 0.3)))) (setq ptb (trans ptb 0 1)) ) (Vlax-Invoke-Method las_arc 'Delete ) ) ((= DrawMode 1);顺时针 (com "line" (list pt_3a pt_c3a pt_3b pt_c3b)) (setq long (distance pt_3a pt_c3a)) (setq pta pt_3a ptc pt_3b ptb (polar (GetMidPt pt_3a pt_3b) ang32 (* 0.3 ArcWidth))) (while (> long (+ ArcLong (* 0.3 ArcWidth))) (command "_.Arc" pta ptb ptc) (setq long (- long Arclong)) (setq pta (polar pta ang32 Arclong) ptc (polar ptc ang32 Arclong) ptb (polar ptb ang32 Arclong) ) ) (command "_.Arc" pt_c1a pt_c2a pt_c3a) (command "_.Arc" pt_c1b pt_c2b pt_c3b) (setq pt_z1 (GetMidPt pt_c3a pt_c3b));中间圆弧 (setq pt_z2 (GetMidPt pt_c2a pt_c2b)) (setq pt_z3 (GetMidPt pt_c1a pt_c1b)) (setq long_left long);刚才剩下的部分 (command "_.Arc" pt_z1 pt_z2 pt_z3) (setq las_arc (Vlax-Ename->Vla-Object (entlast))) (setq long (Vlax-Get las_arc 'ArcLength )) (setq pta pt_c3a ptc pt_c3b) (setq pt_st pt_z1) (setq ptb (vlax-curve-getPointAtDist las_arc (- long (* 0.3 ArcWidth)))) (setq ptb (trans ptb 0 1)) (setq j 1) (while (> long (* Arclong (+ j 0.3))) (command "_.Arc" pta ptb ptc) (setq ptb (vlax-curve-getPointAtDist las_arc (- long (* Arclong j)))) (setq ptb (trans ptb 0 1)) (setq pta (polar pt_cen (angle pt_cen ptb) ArcWidth)) (setq ptc (polar pt_cen (angle pt_cen ptb) (* ArcWidth 2))) (setq ptb (vlax-curve-getPointAtDist las_arc (- long (* Arclong (+ j 0.3))))) (setq ptb (trans ptb 0 1)) (setq j (1+ j)) ) (Vlax-Invoke-Method las_arc 'Delete ) ) ) |