Code:
;ring order dishes [draw / modify ] command
; lijinsong have a bit empty time write at New Year
(defun c:dd(/ rr lst enlst loops ptslst p1 p2 p22 p3a p4a ang1 ang2 cmda )
;design ring
(setq p1 ( getvar "viewctr" ) ;;needle rotate point
rr (/( getvar "viewsize" )10)
lst '(
(0.369411765 "line")
(0.738823529 "pline")
(1.108235294 "xline")
(1.477647059 "polygon")
(1.847058824 "rectang")
(2.216470588 "arc" )
(2.585882353 "circle")
(2.955294118 "revcloud")
(3.324705882 "spline")
(3.694117647 "ellipse")
(4.063529412 "insert")
(4.432941176 "block")
(4.802352941 "point")
(5.171764706 "bhatch")
(5.541176471 "region")
(5.910588235 "text")
(6.28 "mtext")
)
enlst '()
)
(entmake (list
(cons 0 "CIRCLE" )
(cons 62 6)
(cons 10 p1)
(cons 40 (* rr 1.3) )
)
)
( setq enlst ( cons ( entlast ) enlst ) )
(foreach a lst
(entmake
(list
(cons 0 "TEXT")
(cons 1 (cadr a) )
(cons 10 (polar p1 (car a) rr) )
(cons 40 (/ rr 10))
(cons 41 1)
(cons 50 0)
(cons 62 3)
)
)
( setq enlst ( cons ( entlast ) enlst ) )
)
(setq loops t )
(while loops
(setq ptslst (grread t 7 0) )
(if ( or ( = (car ptslst) 3 )
( = ( car ptslst ) 5 )
)
(progn
(setq
p2 ( cadr ptslst )
ang1( angle p1 p2 )
ang2( angle p2 p1 )
) ;arrow handle
(setq p3a (polar p2 (+ ang2 10) (/ rr 10) ) ;;arrow line1
p4a (polar p2 (- ang2 10) (/ rr 10) ) ;;arrow line2
p22 (polar p2 ang2 (/ rr 4) )
)
(redraw)
(grdraw p1 p2 4) (grdraw p2 p3a 2) (grdraw p2 p4a 2) (grdraw p3a p4a 2) (grdraw p2 p22 1)
;;EXIT FOR
(if ( = 3 (car ptslst) )
(progn
( setq loops nil )
( if ( ssget "cp" (list p2 p3a p4a p2 ) '( ( 0 . "TEXT" ) ( 62 . 3 ) ) ) ;;若有选择集
( progn
( setq cmda (cdr(assoc 1 (entget (ssname (ssget "P") 0 ) ) ) ) )
(foreach en enlst
(command "erase" en "")
)
( vl-cmdf cmda )
) );if ss
) );if 3
) );if 3 5
);for
);defun
(defun c:mm(/ rr lst enlst loops ptslst p1 p2 p22 p3a p4a ang1 ang2 cmda )
;设计钟盘
(setq p1 ( getvar "viewctr" ) ;;指针旋转起点
rr (/( getvar "viewsize" )10)
lst '(
(0.369411765 "erase")
(0.738823529 "copy")
(1.108235294 "mirror")
(1.477647059 "offset")
(1.847058824 "array")
(2.216470588 "move")
(2.585882353 "rotate")
(2.955294118 "scale")
(3.324705882 "stretch")
(3.694117647 "trim")
(4.063529412 "extend")
(4.432941176 "break1")
(4.802352941 "break")
(5.171764706 "chamfer")
(5.541176471 "fillet")
(5.910588235 "explode")
(6.1 "lengthen")
(6.28 "chprop")
)
enlst '()
)
(entmake (list
(cons 0 "CIRCLE" )
(cons 62 1)
(cons 10 p1)
(cons 40 (* rr 1.3) )
)
)
( setq enlst ( cons ( entlast ) enlst ) )
(foreach a lst
(entmake
(list
(cons 0 "TEXT")
(cons 1 (cadr a) )
(cons 10 (polar p1 (car a) rr) )
(cons 40 (/ rr 10))
(cons 41 1)
(cons 50 0)
(cons 62 3)
)
)
( setq enlst ( cons ( entlast ) enlst ) )
)
(setq loops t )
(while loops
(setq ptslst (grread t 7 0) )
(if ( or ( = (car ptslst) 3 )
( = ( car ptslst ) 5 )
)
(progn
(setq
p2 ( cadr ptslst )
ang1( angle p1 p2 )
ang2( angle p2 p1 )
;p2a ( polar p1 ang1 rr )
) ;箭柄
(setq p3a (polar p2 (+ ang2 10) (/ rr 10) ) ;;箭头线1
p4a (polar p2 (- ang2 10) (/ rr 10) ) ;;箭头线2
p22 (polar p2 ang2 (/ rr 4) )
)
(redraw)
(grdraw p1 p2 4) (grdraw p2 p3a 2) (grdraw p2 p4a 2) (grdraw p3a p4a 2) (grdraw p2 p22 1)
;;EXIT FOR
(if ( = 3 (car ptslst) )
(progn
( setq loops nil )
( if ( ssget "cp" (list p2 p3a p4a p2 ) '( ( 0 . "TEXT" ) ( 62 . 3 ) ) ) ;;若有选择集
( progn
( setq cmda(cdr(assoc 1 (entget (ssname (ssget "P") 0 ) ) ) ) )
(foreach en enlst
(command "erase" en "")
)
( if ( = cmda "break1" )
( command "break" (entsel) "f" (getpoint) "@" )
) ;if cmd
( if ( = cmda "LENGTHEN" )
(COMMAND?"LENGTHEN" "DY")
) ;if cmd
( vl-cmdf cmda )
) );if ss
) );if 3
) );if 3 5
);for
);defun
[ModeratorAction] Please use [CODE ] Tags [/ModeratorAction]