// Adv Wire32 V6.00 10/26/92 Macro File
// GEAR.mcl
// CREATED: By Rick Meyers
//  
//  
//------------------------------ FORMULAS -----------------------------------
//
// #PITCH_DIA = Pitch Diameter
// #TEETH = Number of Teeth
// #PRESSURE_ANGLE = Pressure Angle
//
IF(#GEARANG=0)#PRESSURE_ANGLE=14.5
ENDIF
IF(#GEARANG=1)#PRESSURE_ANGLE=20
ENDIF
IF(#GEARANG=2)#PRESSURE_ANGLE=25
ENDIF
IF(#GEARANG=3)#PRESSURE_ANGLE=30
ENDIF
IF(#GEARANG=4)#PRESSURE_ANGLE=37.5
ENDIF
IF(#GEARANG=5)#PRESSURE_ANGLE=45
ENDIF
//
#PITCH_DIA=ABS(#PITCH_DIA)
#TEETH=ABS(#TEETH)
#BACKLASH=ABS(#BACKLASH)
//
#PI=3.141592653589794
#BASE_CIRCLE=#PITCH_DIA*COS(#PRESSURE_ANGLE)
#R=(#BASE_CIRCLE/2)
#DIAMETRAL_PITCH=#TEETH/#PITCH_DIA
#CIRCULAR_PITCH=#PI/#DIAMETRAL_PITCH
#TOOTH_THICKNESS=#CIRCULAR_PITCH/2
//
IF(#PRESSURE_ANGLE<=25)
	#OUTSIDE_DIA=(#TEETH+2)/#DIAMETRAL_PITCH	// 14.5, 20, 25
ELSE
	#OUTSIDE_DIA=(#TEETH+1)/#DIAMETRAL_PITCH	// 30, 37.5, 45
ENDIF
//
#ADDENDUM=1.000/#DIAMETRAL_PITCH
//
IF(#DIAMETRAL_PITCH<20)
	#DEDENDUM=1.250/#DIAMETRAL_PITCH					// COARSE PITCH GEAR
ELSE
	#DEDENDUM=(1.200/#DIAMETRAL_PITCH)+.002		// FINE PITCH GEARS
ENDIF
//
#WHOLE_DEPTH=#ADDENDUM+#DEDENDUM
//
IF(#PRESSURE_ANGLE=14.5)
	#ROOT_DIA=#PITCH_DIA-(2*#DEDENDUM)
ENDIF
IF(#PRESSURE_ANGLE=20,AND#DIAMETRAL_PITCH<20)
	#ROOT_DIA=(#TEETH-2.5)/#DIAMETRAL_PITCH		// 20 COARSE GEARS
ENDIF
IF(#PRESSURE_ANGLE=20,AND#DIAMETRAL_PITCH>=20)		// 20 FINE GEARS
	#ROOT_DIA=#PITCH_DIA-(2*#DEDENDUM)
ENDIF
IF(#PRESSURE_ANGLE=25,AND#DIAMETRAL_PITCH<20)
	#ROOT_DIA=(#TEETH-2.5)/#DIAMETRAL_PITCH		// 25 COARSE GEARS
ENDIF
IF(#PRESSURE_ANGLE=25,AND#DIAMETRAL_PITCH>=20)		// 25 FINE GEARS
	#ROOT_DIA=#PITCH_DIA-(2*#DEDENDUM)
ENDIF
IF(#PRESSURE_ANGLE=30)
	#ROOT_DIA=(#TEETH-1.35)/#DIAMETRAL_PITCH
ENDIF
IF(#PRESSURE_ANGLE=37.5)
	#ROOT_DIA=(#TEETH-1.3)/#DIAMETRAL_PITCH
ENDIF
IF(#PRESSURE_ANGLE=45)
	#ROOT_DIA=(#TEETH-1)/#DIAMETRAL_PITCH
ENDIF
//
#TOOTH_FILLET=0.157/#DIAMETRAL_PITCH
//
//------------------- GATHER INSERT PANEL INFO ------------------------------
//
POINT[XE=#CENTER_X, YE=#CENTER_Y]
#GEARTL=TOOL(#EL)
#GEARLY=LAY(#EL)
#GEARLV=LVL(#EL)
#GEARPL=PLN(#EL)
DELETE[EL=#EL]
IF(#GEARPL<>0)
	PAUSE[TX="The current workplane is not the XY_PLANE.  The gear will be created on the XY_PLANE based on the Gear Center Point.  If this is not OK, select CANCEL and update the workplane and Gear Center Point.", PT=1, SR=6]
ENDIF	
//
//--------------------------- CREATE GEAR -----------------------------------
//
NEW_GRP[]
ON_LAYER[LV=0, WP="XY_PLANE", LY=91]
ARC[XC=#CENTER_X, YC=#CENTER_Y, DR=1, RA=(#ROOT_DIA/2), AS=90, AE=90, LV=0]
NAME_ELMT[EL=#EL, EN="ROOT"]
ARC[XC=#CENTER_X, YC=#CENTER_Y, DR=1, RA=(#OUTSIDE_DIA/2), AS=90, AE=90, LV=0]
NAME_ELMT[EL=#EL, EN="OD"]
ARC[XC=#CENTER_X, YC=#CENTER_Y, DR=1, RA=#R, AS=90, AE=90, LV=0]
FULL[]
ON_LAYER[LV=0, WP="XY_PLANE", LY=93]
//
#COUNTER=0
#SEGS=60
WHILE(#COUNTER<=#SEGS)
	#A=(90-#COUNTER)
	#S=((#PI*(#R*(90-#A)))/180)
	IF(#COUNTER=0)
		START_PROF[XE=(((#R*COS(#A))-(#S*COS(#COUNTER)))+#CENTER_X),
			YE=(((#R*SIN(#A))+(#S*SIN(#COUNTER)))+#CENTER_Y), 
			ZE=0]
	ELSE
		LINE_PROF[XE=(((#R*COS(#A))-(#S*COS(#COUNTER)))+#CENTER_X),
			YE=(((#R*SIN(#A))+(#S*SIN(#COUNTER)))+#CENTER_Y), 
			ZE=0]
	ENDIF
	#COUNTER=#COUNTER+1
ENDW
//
RANGE_GRP[E1=#EL, E2=(#EL-59), AR=0]
GRP_CHAIN[PJ=2]
GRP_TRIM[EL="OD", S1=1, TS=0, TY=0]//#EL-2
//
IF((STX(#EL)=ENX(#EL)), OR (STY(#EL)=ENY(#EL)))// 0 length polyline?
	DELETE[EL=#EL]
ENDIF
//
IF(#BASE_CIRCLE<#ROOT_DIA)
	GRP_TRIM[EL="ROOT", S1=0, TS=0, TY=0]//#EL-3
ENDIF
//
ELMT_SEQ[BA=1, EL=(#EL-1), ME=1]
ARC[DR=0, XC=#CENTER_X, YC=#CENTER_Y, RA=#PITCH_DIA/2, AS=90, AE=90, LV=0]
TRIM_EXT[E1=#EL, E2=(#EL+1), S1=3, S2=1, IN=1]
SPLIT[EL=#EL, LC=2, GW=0, DS=((#CIRCULAR_PITCH/4)-(#BACKLASH/4)), FR=0]
ELMT_SEQ[BA=1, EL=(#EL+1), ME=1]
NAME_ELMT[EL=(#EL-1), EN="PITCH"]
NEW_GRP[]
ELMT_GRP[EL=#EL, AR=0]
MIRROR[XS=#CENTER_X, YS=#CENTER_Y, XE=ENX(#EL-2), YE=ENY(#EL-2), CP=1, 
    NC=1, TS=0]
ARC[DR=0, XC=#CENTER_X, YC=#CENTER_Y, RA=#OUTSIDE_DIA/2, XS=ENX(#EL-1), 
    YS=ENY(#EL-1), XE=ENX(#EL), YE=ENY(#EL), LV=0]
NEW_GRP[]
RANGE_GRP[E1=#EL, E2=(#EL-2), AR=0]
GRP_CHAIN[PJ=0]
REDRAW[]
//
IF(#BASE_CIRCLE>#ROOT_DIA)
	#GEARTYPE=1
	IF(#BASE_CIRCLE-(#ROOT_DIA+(2*#TOOTH_FILLET))<0)
		#GEARTYPE=3
		GOTO(TYPE2)
	ENDIF
	//
	LINE[XS=ENX(#EL), YS=ENY(#EL), ZS=0, XE=#CENTER_X, YE=#CENTER_Y, 
    	ZE=0]
	NEW_GRP[]
	PROF_GRP[EL=#EL, AR=0]
	GRP_TRIM[EL="ROOT", S1=0, TS=0, TY=0]
	SPLIT[EL="ROOT", LC=2, GW=0, DS=#PI*(#ROOT_DIA/#TEETH), FR=1]
	ARC[DR=0, XC=#CENTER_X, YC=#CENTER_Y, RA=#ROOT_DIA/2, XS=ENX(#EL), 
	    YS=ENY(#EL), XE=ENX(ROOT), YE=ENY(ROOT), LV=0]
	LINE[XS=ENX(#EL), YS=ENY(#EL), ZS=0, ZE=0, AN=90-(360/#TEETH), 
	    DS=(#BASE_CIRCLE-#ROOT_DIA)/2]
	BLEND[E1=(#EL-2), E2=(#EL-1), S1=0, S2=0, IN=1, DR=0, RA=#TOOTH_FILLET]
	BLEND[E1=(#EL-1), E2=#EL, S1=0, S2=0, IN=2, DR=0, RA=#TOOTH_FILLET]
	PROF_GRP[EL=#EL, AR=0]
	GRP_CHAIN[PJ=0]
	PROF_SEQ[BA=1, EL=#EL, ME=1]
ELSE
	#GEARTYPE=2
@TYPE2
	NEW_GRP[]
	ELMT_GRP[EL=(#EL-2), AR=0]
	ROTATE[XS=#CENTER_X, YS=#CENTER_Y, AN=-1*(360/#TEETH), CP=0, NC=0, TS=0]
	ARC[DR=0, XC=#CENTER_X, YC=#CENTER_Y, RA=#ROOT_DIA/2, XS=ENX(#EL), 
	    YS=ENY(#EL), XE=STX(#EL-2), YE=STY(#EL-2), LV=0]
	IF(#GEARTYPE=3)
		TRIM_EXT[E1=(#EL-1), E2=#EL, S1=0, S2=0, IN=1]
		TRIM_EXT[E1=#EL, E2=(#EL-3), S1=0, S2=0, IN=1]
	ENDIF
	NEW_GRP[]
	RANGE_GRP[E1=#EL, E2=(#EL-3), AR=0]
	GRP_CHAIN[PJ=0]
	SPLIT[EL=(#EL-2), LC=2, GW=(#TOOTH_FILLET*2), DS=0, FR=1]
	NEW_GRP[]
	ELMT_GRP[AR=0, EL=(#EL-2)]
	EXPLODE[EX=0, TO=.0001]
	BLEND[E1=(#EL-2), E2=(#EL-1), S1=0, S2=0, IN=1, DR=0, RA=#TOOTH_FILLET]
	GRP_CHAIN[PJ=2]
	SPLIT[EL=#EL, LC=2, GW=(#TOOTH_FILLET*2), DS=0, FR=0]
	NEW_GRP[]
	ELMT_GRP[AR=0, EL=#EL]
	EXPLODE[EX=0, TO=.0001]
	PROF_SEQ[BA=0, EL=#EL, ME=1]
	BLEND[E1=(#EL-1), E2=#EL, S1=0, S2=0, IN=2, DR=0, RA=#TOOTH_FILLET]
	GRP_CHAIN[PJ=2]
	PROF_GRP[EL=#EL, AR=0]
	GRP_CHAIN[PJ=0]
	PROF_SEQ[BA=1, EL=#EL, ME=1]
//
ENDIF
//
GRP_REVERSE[RP=0]
LAYER_SEQ[BA=1, LY=93, ME=0]
ROTATE[XS=#CENTER_X, YS=#CENTER_Y, AN=360/#TEETH, CP=1, NC=#TEETH-1, TS=0]
GET_GRP[GN="RESULT"]
NAME_GRP[GN="GEAR", RM=0]
NEW_GRP[]
RANGE_GRP[E1="ROOT", E2="PITCH", AR=0]
GRP_DELETE[]
GET_GRP[GN="GEAR"]
//
//-------------------- USE INSERT PROPERTIES? -------------------------------
//
IF(#INSERT=1)
	IF(#GEARTL>0)
		#GEAROF=OFS(#EL)*-1
		IF(#GEAROF=0) #GEAROF=2
		ENDIF
		IF(#GEAROF=-1) #GEAROF=0
		ENDIF
		PCHG_TP[TL=#GEARTL, LV=#GEARLV, OF=#GEAROF]
	ELSE
		PCHG_LY[LY=#GEARLY, LV=#GEARLV]
	ENDIF
ENDIF
//
//--------------------------- SET UP UNDO -----------------------------------
//
REDRAW[]
GRP_DELETE[]
UNDO[]
//
//
@END
