Option Explicit ' COPYRIGHT DASSAULT SYSTEMES 2001 '******************************************************************************* ' Purpose : Build of a simplified camshaft ' Assumptions : ' Author : ' Languages : VBScript ' Locales : English (United states) ' CATIA Level : V5R6 '******************************************************************************* 'Number Of Cylinders ' ------------------ Dim iNumberOfCylinders As Integer ' Shaft data ' ---------- ' -- Shaft origin Dim iCenterX As Integer Dim iCenterY As Integer ' -- Distance between two cams of two different cylinders Dim iCylinderSpacing As Integer ' -- Bearing diameter Dim iBearingDiam As Integer ' -- Distance between the cylinders centers Dim iBearingLength As Integer ' -- Pin diameter between two cams Dim iPinDiam As Integer ' -- Distance between 2 cams of a single cylinder Dim iPinLength As Integer ' Cam data ' -------- ' -- Thickness Dim iCamThickness As Integer ' -- Circle 1 diameter Dim iCircle1Rad As Integer ' -- Circle 2 diameter Dim iCircle2Rad As Integer ' -- Distance between the 2 circle centers Dim iCircleDist As Integer ' Pi definition ' ------------- Dim dPi As Double ' Global data to define the different elements of the camshaft ' ------------------------------------------------------------ ' -- Cam Sketch and cam Sketch elements Dim oCurrentSketch As Sketch Dim oCurrentLine1 As AnyObject Dim oCurrentLine2 As AnyObject Dim oCurrentCircle1 As AnyObject Dim oCurrentCircle2 As AnyObject ' -- Current distance from shaft origin Dim iCurrentLevel As Integer ' Part definition ' --------------- ' -- Part Dim oPart As Part ' -- Main tool of the part Dim oPartBody As Body ' -- Definition of YZ plane as work plane Dim oPlaneYZ As Reference ' ************************************************************************** ' Main program ' ' ************************************************************************** Sub CATMain() ' -- Initialize global variables iNumberOfCylinders = 4 iCamThickness = 15 iCircle1Rad = 25 iCircle2Rad = 15 iCircleDist = 35 iCenterY = 0 iCenterX = 0 iCylinderSpacing = 100 iPinDiam = 15 iPinLength = 20 iBearingDiam = 32 iBearingLength = iCylinderSpacing - iPinLength - 2*iCamThickness dPi = 3.14159265358979323846 iCurrentLevel = 0 Dim oPartDocument As Document Set oPartDocument = CATIA.Documents.Add ( "Part" ) Set oPart = oPartDocument.Part Set oPartBody = oPart.MainBody Set oPlaneYZ = oPart.CreateReferenceFromGeometry( oPart.OriginElements.PlaneYZ ) ' -- Shading view Mode CATIA.ActiveWindow.ActiveViewer.RenderingMode = 1 msgbox "Create Five Bearings" Call CreatePatternBearing() oPart.Update CATIA.ActiveWindow.ActiveViewer.Reframe msgbox "Create First Cam Set" Call CreateCamSet (0) oPart.Update CATIA.ActiveWindow.ActiveViewer.Reframe msgbox "Create Second Cam Set" Call CreateCamSet (90) oPart.Update CATIA.ActiveWindow.ActiveViewer.Reframe msgbox "Create Third Cam Set" Call CreateCamSet (180) oPart.Update CATIA.ActiveWindow.ActiveViewer.Reframe msgbox "Create Fourth Cam Set" Call CreateCamSet (270) oPart.Update CATIA.ActiveWindow.ActiveViewer.Reframe msgbox "Create Driving Wheel" Call CreateCylinder (iPinLength/2, iBearingDiam ) oPart.Update Catia.ActiveWindow.ActiveViewer.Reframe msgbox "This is the macro end" End Sub ' ************************************************************************** ' Purpose: Defines the cylinders between cylinders ' ' Inputs : ' ' ************************************************************************** Sub CreatePatternBearing() ' Cylinder definition: Pad from a circular sketch ' ----------------------------------------------- ' -- The YZ plane is the sketch plane Set oCurrentSketch = oPartBody.Sketches.Add ( oPlaneYZ ) ' -- The sketch is a circle centered on shaft origin and of iBearingDiam diameter Dim oFactory2D as Factory2D Set oFactory2D = oCurrentSketch.OpenEdition Set oCurrentCircle1 = oFactory2D.CreateClosedCircle ( iCenterX, iCenterY, iBearingDiam/2 ) oCurrentSketch.CloseEdition ' Creation of the cylindrical pad Dim oPad As Pad Set oPad = oPart.ShapeFactory.AddNewPad ( oCurrentSketch, iBearingLength ) ' Creating the pattern ' -------------------- Dim originElements1 As OriginElements Set originElements1 = oPart.OriginElements Dim oRefPlaneXY As Reference Set oRefPlaneXY = oPart.CreateReferenceFromGeometry( oPart.OriginElements.PlaneXY ) Dim rectPattern1 As RectPattern ' Definition of the pattern: ' -- Element to be duplicated ' -- Number of instances in first direction ' -- Number of instances in second direction ' -- Spacing in first direction ' -- Spacing in second direction ' -- Direction 1 ' -- Direction 2 ' -- Angle Set rectPattern1 = oPart.ShapeFactory.AddNewRectPattern(oPad, _ iNumberOfCylinders+1, _ 1, _ iCylinderSpacing, _ 0.0, _ 1, _ 1, _ oRefPlaneXY, _ oRefPlaneXY, _ True, _ True, _ 0.0) ' -- Update of the current level iCurrentLevel = iBearingLength End Sub ' ************************************************************************** ' Purpose: Creation of a cam from an angle value ' ' Inputs : angle: The angle ' ' ************************************************************************** Sub CreateCam(angle) Dim dRad As Double dRad = angle*dPi/180 Dim dDSin1 as Double dDSin1 = iCircle1Rad*sin(dRad) Dim dDCos1 as Double dDCos1 = iCircle1Rad*cos(dRad) Dim dDSin2 as Double dDSin2 = iCircle2Rad*sin(dRad) Dim dDCos2 as Double dDCos2 = iCircle2Rad*cos(dRad) Dim dCSin as Double dCSin = iCircleDist*sin(dRad) Dim dCCos as Double dCCos = iCircleDist*cos(dRad) ' Create a sketch ' --------------- Set oCurrentSketch = oPartBody.Sketches.Add ( oPlaneYZ ) ' Create base elements in the sketch ' ---------------------------------- Dim oFactory2D As Factory2D Set oFactory2D = oCurrentSketch.OpenEdition Dim dRad1 As Double dRad1 = dRad - dPi/4 Dim dRad2 As Double dRad2 = dRad + dPi/4 Set oCurrentLine1 = oFactory2D.CreateLine ( _ iCenterX - dDSin1, iCenterY + dDCos1, _ iCenterX + dCCos + dDSin2, iCenterY - dCSin + dDCos2 ) Set oCurrentLine2 = oFactory2D.CreateLine ( _ iCenterX + dDSin1, iCenterY - dDCos1, _ iCenterX + dCCos - dDSin2, iCenterY - dCSin - dDCos2 ) Set oCurrentCircle1 = oFactory2D.CreateCircle ( _ iCenterX, iCenterY, _ iCircle1Rad, dRad2, dRad1) Set oCurrentCircle2 = oFactory2D.CreateCircle ( _ iCenterX + dCCos, iCenterY + dCSin, _ iCircle2Rad, dRad1, dRad2) ' Get references from elements to constraint ' ------------------------------------------ Dim oRefLine1 As Reference Set oRefLine1 = oPart.CreateReferenceFromObject(oCurrentLine1) Dim oRefCircle1 As Reference Set oRefCircle1 = oPart.CreateReferenceFromObject(oCurrentCircle1) Dim oRefLine2 As Reference Set oRefLine2 = oPart.CreateReferenceFromObject(oCurrentLine2) Dim oRefCircle2 As Reference Set oRefCircle2 = oPart.CreateReferenceFromObject(oCurrentCircle2) Dim oRefLine1StartPt As Reference Set oRefLine1StartPt = oPart.CreateReferenceFromObject(oCurrentLine1.StartPoint) Dim oRefLine1EndPt As Reference Set oRefLine1EndPt = oPart.CreateReferenceFromObject(oCurrentLine1.EndPoint) Dim oRefLine2StartPt As Reference Set oRefLine2StartPt = oPart.CreateReferenceFromObject(oCurrentLine2.StartPoint) Dim oRefLine2EndPt As Reference Set oRefLine2EndPt = oPart.CreateReferenceFromObject(oCurrentLine2.EndPoint) Dim oRefCircle1StartPt As Reference Set oRefCircle1StartPt = oPart.CreateReferenceFromObject(oCurrentCircle1.StartPoint) Dim oRefCircle1EndPt As Reference Set oRefCircle1EndPt = oPart.CreateReferenceFromObject(oCurrentCircle1.EndPoint) Dim oRefCircle2StartPt As Reference Set oRefCircle2StartPt = oPart.CreateReferenceFromObject(oCurrentCircle2.StartPoint) Dim oRefCircle2EndPt As Reference Set oRefCircle2EndPt = oPart.CreateReferenceFromObject(oCurrentCircle2.EndPoint) ' Create constraints ' ------------------ Dim oConstraints As Constraints Set oConstraints = oCurrentSketch.Constraints Dim oConstraint As Constraint ' -- Fix Circle1 Set oConstraint = oConstraints.AddMonoEltCst(catCstTypeReference, _ oRefCircle1) ' -- Fix Circle2 Set oConstraint = oConstraints.AddMonoEltCst(catCstTypeReference, _ oRefCircle2) ' -- Tangency Line1 Circle1 Set oConstraint = oConstraints.AddBiEltCst(catCstTypeTangency, _ oRefLine1, _ oRefCircle1) ' -- Tangency Line1 Circle2 Set oConstraint = oConstraints.AddBiEltCst(catCstTypeTangency, _ oRefCircle2, _ oRefLine1) ' -- Coincidence Circle1 Start Point Line1 Start Point Set oConstraint = oConstraints.AddBiEltCst(catCstTypeOn, _ oRefCircle1StartPt, _ oRefLine1StartPt) ' -- Coincidence Circle2 End Point Line1 End Point Set oConstraint = oConstraints.AddBiEltCst(catCstTypeOn, _ oRefCircle2EndPt, _ oRefLine1EndPt) ' -- Tangency Line2 Circle1 Set oConstraint = oConstraints.AddBiEltCst(catCstTypeTangency, _ oRefLine2, _ oRefCircle1) ' -- Tangency Line2 Circle2 Set oConstraint = oConstraints.AddBiEltCst(catCstTypeTangency, _ oRefLine2, _ oRefCircle2) ' -- Coincidence Circle1 End Point Line2 Start Point Set oConstraint = oConstraints.AddBiEltCst(catCstTypeOn, _ oRefCircle1EndPt, _ oRefLine2StartPt) ' -- Coincidence Circle2 Start Point Line2 End Point Set oConstraint = oConstraints.AddBiEltCst(catCstTypeOn, _ oRefCircle2StartPt, _ oRefLine2EndPt) oCurrentSketch.CloseEdition ' Create the Pad from the sketch ' ------------------------------ Dim oPad As Pad Set oPad = oPart.ShapeFactory.AddNewPad ( oCurrentSketch, iCamThickness + iCurrentLevel ) oPad.SecondLimit.Dimension.Value = iCurrentLevel*-1 End Sub ' ************************************************************************** ' Purpose: Create a cylindric Pad ' ' Inputs : thickness: length of the cylinder ' radius : radius of the cylinder ' ' ************************************************************************** Sub CreateCylinder(thickness, radius) ' -- Create a sketch Set oCurrentSketch = oPartBody.Sketches.Add ( oPlaneYZ ) ' -- Create base circle in the sketch Dim oFactory2D As Factory2D Set oFactory2D = oCurrentSketch.OpenEdition Set oCurrentCircle1 = oFactory2D.CreateClosedCircle (iCenterX, iCenterY, radius) oCurrentSketch.CloseEdition ' -- Create the Pad from the sketch Dim oPad As Pad Set oPad = oPart.ShapeFactory.AddNewPad ( oCurrentSketch, thickness + iCurrentLevel ) oPad.SecondLimit.Dimension.Value = iCurrentLevel*-1 ' -- Increase Level iCurrentLevel = iCurrentLevel + thickness End Sub ' ************************************************************************** ' Purpose: Creation of the set of cams for a cylinder ' ' Inputs : angle: The angle between the set of cam and the Y Axis ' ' ************************************************************************** Sub CreateCamSet(angle) ' -- Create a cam CreateCam(angle) iCurrentLevel = iCurrentLevel + iCamThickness ' -- Create a cylinder for the pin between cams Call CreateCylinder(iPinLength, iPinDiam) ' -- Create the other cam CreateCam(angle) ' -- Increase level iCurrentLevel = iCurrentLevel + iBearingLength + iCamThickness End Sub