Option Explicit
Language="VBSCRIPT"
' COPYRIGHT DASSAULT SYSTEMES 2010

' *****************************************************************************
'   Purpose:      Create standard openings on an SDD Plate.
'   Languages:    VBScript
'   Locales:      English 
'   CATIA Level:  V5R21 
' *****************************************************************************

Sub CATMain() 

  Set documents1 = CATIA.Documents
  Set PartDocument1 = documents1.Item("Design_Unit_002.CATPart")
  Set Part1 = PartDocument1.Part
  Set plate = Part1.FindObjectByName("Deck_002")
  Set plateref = Part1.CreateReferenceFromObject(plate)
  Dim Factory As SfmFunctionFactory
  Set Factory = Part1.GetCustomerFactory("SfmFunctionFactory")

  Dim ObjSfmContourMgr As SfmOpeningContoursMgr
  Set ObjSfmContourMgr = Factory.GetOpeningMgr(Part1, "SfmOpeningContoursMgr")
 
  Dim ObjSfmPosStrategyMgr As SfmPositioningStrategyManager
  Set ObjSfmPosStrategyMgr = Factory.GetOpeningMgr(Part1, "SfmPositioningStrategyManager")

  'Define The Contour

  Dim oListContourNames() As Variant
  ObjSfmContourMgr.GetAvailableStdOpeningContours oListContourNames

  Dim NbOfContour As Long
  NbOfContour = UBound(oListContourNames)

  'Display List of contours
  For i = 0 To NbOfContour
    MsgBox oListContourNames(i)
  Next

  'Set the Required Contour and Set it's Contour Parameters
  Dim oListCkeParms As SfmStandardContourParameters
  Set oListCkeParms = ObjSfmContourMgr.GetStdOpeningContourParams("Sfm_Rect")

  Dim NbOfParam As Long
  NbOfParam = oListCkeParms.Count

  Dim ContourParam As Parameter
  Dim ContourParamName As String

  For i = 1 To NbOfParam
    Set ContourParam = oListCkeParms.Item(i)
    ContourParamName = oListCkeParms.Item(i).Name
    MsgBox ContourParamName

    If ContourParamName = "Sfm_Width" Then
      ContourParam.ValuateFromString ("1000mm")
    End If
    If ContourParamName = "Sfm_Height" Then
      ContourParam.ValuateFromString ("2000mm")
    End If
    If ContourParamName = "Sfm_CornerRadius" Then
      ContourParam.ValuateFromString ("10mm")
    End If
  Next


  'Define The Postition Strategy
  Dim PositionStrategyParms As SfmStandardPosStrategyParameters
  Set PositionStrategyParms = ObjSfmPosStrategyMgr.GetPositioningStrategyParams("CATSfmPosMidDistMidDist")

  'Prepare a List of U & V Reference
  Dim UrefList As SfmReferences
  Dim Uref1 As Reference
  Set Uref1 = Part1.FindObjectByName("CROSS.95")
  Set Uref2 = Part1.FindObjectByName("CROSS.50")
  Set Uref3 = Part1.FindObjectByName("CROSS.25")
  Set Uref4 = Part1.FindObjectByName("CROSS.40")
  Set UrefList = Factory.SfmReferences
  UrefList.Add Uref1
  UrefList.Add Uref2
  UrefList.Add Uref3
  UrefList.Add Uref4
 
  Dim VrefList As SfmReferences
  Dim Vref1 As Reference
  Set Vref1 = Part1.FindObjectByName("LONG.0")
  Set Vref2 = Part1.FindObjectByName("LONG.10")
  Set VrefList = Factory.SfmReferences
  VrefList.Add Vref1
  VrefList.Add Vref2
 
  Dim NbofURef As Long
  NbofURef = UrefList.Count

  Dim NbofVRef As Long
  NbofVRef = VrefList.Count

  Dim StdOpening As SfmStandardOpening

  Dim URefListint As SfmReferences
  Set URefListint = Factory.SfmReferences

  For nUrefCnt = 1 To NbofURef Step 2
    If (nUrefCnt + 1) <= NbofURef Then
      URefListint.Add UrefList.Item(nUrefCnt)
      URefListint.Add UrefList.Item(nUrefCnt + 1)
      PositionStrategyParms.SetPosParamData "CATSfmPosMidDistMidDist", 20, URefListint, 1, VrefList, 2
      Set StdOpening = Factory.CreateStandardOpening("FunctionalOpening", "Sfm_Rect", oListCkeParms, "CATSfmPosMidDistMidDist", PositionStrategyParms, plateref)
      URefListint.ClearList
    End If
  Next

Part1.Update

End Sub