Hide Table of Contents

Create Body using Trimmed Surfaces Example (VBA)

The basic outline for creating a body using trimmed surfaces is as follows:

  1. Create a new temporary body in a part using IPartDoc::CreateNewBody.

  2. Create the trimmed surfaces in the shape of the new body (for example, six square surfaces that intersect at the edges to form a cube).

    1. Create a planar surface based on a root point and normal (two, three cell VARIANT arrays) using IBody2::CreatePlanarSurface(RootPoint, Normal).

    2. Add a trimming loop to the planar surface using
      ISurface::AddTrimmingLoop2(Numcurves, _  
      Order, _
      Dimen, _
      Periodic, _
      NumKnots, _
      NumCtrlPoints, _
      Knots, _
      CtrlPointDbls, _
      UVRange)

    3. Create a trimmed surface on the body based on the trimming loop that was just created. The arguments for Surface::AddTrimmingLoop2 are (and their values for a square):
       

      Argument

      Description

      NumCurves

      Number of curves that make up the loop (4 Long)

      Order

      Orders for the spline curves ({2, 2, 2, 2} –Array of Longs)

      Dimen

      Dimension of the control points for the spline curves ({2, 2, 2, 2} Array of Longs)

      Periodic

      Periodicity of the spline curves ({0, 0, 0, 0} Array of Longs)

      NumKnots

      Number of Knots of the spline curves ({4, 4, 4, 4} Array of Longs)

      NumCtrlPoints

      Number of Control points for the spline curves ({2, 2, 2, 2} Array of Longs)

      Knots

      Describes the locations of the knots ({0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1} Array of Doubles. Each knot represented by four numbers 0, 0, 1, 1)

      CtrlPointDbls

      Control points for the TrimmingLoop ({0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0} Array of Doubles. Describes the corners of the square)

      UVRange

      Min and max for the U and V values ({0, 1, 0, 1} Array of Doubles)

       

  3. Sew the surfaces together into a new body using IBody2::CreateBodyFromSurfaces.

 

This example shows how to create a temporary surface using temporary bodies.

 

'------------------------------------------------------------

Option Explicit

 

Dim swApp As SldWorks.SldWorks

Dim Model As SldWorks.ModelDoc2

Dim Part As SldWorks.PartDoc

Dim RootPoint(2) As Double

Dim Normal(2) As Double

Dim TempBody As SldWorks.body2

Dim isGood As Boolean

 

Sub main()

       

   'Get the SolidWorks application

    Set swApp = CreateObject("SldWorks.Application")

    swApp.UserControl = True

    

    'Create a new blank document

    Set Model = swApp.NewPart

    Set Part = Model

    'Create a new temporary body in the part

    Set TempBody = Part.CreateNewBody

    

    If TempBody Is Nothing Then

        MsgBox "Could not create the new body."

        Exit Sub

    End If

    'Create the trimmed surfaces for a cube 1 meter per side.

    'LEFT

    RootPoint(0) = 0 'X

    RootPoint(1) = 0 'Y

    RootPoint(2) = 0 'Z

    Normal(0) = 1 'X

    Normal(1) = 0 'Y

    Normal(2) = 0 'Z

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'RIGHT

    RootPoint(0) = 1

    RootPoint(1) = 0

    RootPoint(2) = 0

    Normal(0) = 1

    Normal(1) = 0

    Normal(2) = 0

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'BOTTOM

    RootPoint(0) = 0

    RootPoint(1) = 0

    RootPoint(2) = -1

    Normal(0) = 0

    Normal(1) = 1

    Normal(2) = 0

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'TOP

    RootPoint(0) = 0

    RootPoint(1) = 1

    RootPoint(2) = -1

    Normal(0) = 0

    Normal(1) = 1

    Normal(2) = 0

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'FRONT

    RootPoint(0) = 0

    RootPoint(1) = 0

    RootPoint(2) = 0

    Normal(0) = 0

    Normal(1) = 0

    Normal(2) = 1

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'BACK

    RootPoint(0) = 0

    RootPoint(1) = 0

    RootPoint(2) = -1

    Normal(0) = 0

    Normal(1) = 0

    Normal(2) = 1

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, True)

    

    'Create the body from the trimmed surfaces just created

    TempBody.CreateBodyFromSurfaces

    'Create an offset surface from the back

    RootPoint(0) = 0

    RootPoint(1) = 0

    RootPoint(2) = -2

    Normal(0) = 0

    Normal(1) = 0

    Normal(2) = 1

    

    isGood = CreateSquareSurface(Part, TempBody, RootPoint, Normal, False)

    'Clean up the memory

    Set swApp = Nothing

    Set Model = Nothing

    Set Part = Nothing

End Sub

 

 

'CreateSquareSurface creates a square trimmed surface

Private Function CreateSquareSurface(Part As PartDoc, SurfaceBody As body2, RootPoint As Variant, Normal As Variant, IsPartOfTempBody As Boolean) As Boolean

    Dim isGood As Boolean

    'Temporary surface

    Dim TmpSurf As SldWorks.surface

    'Arguments that define the trimming loop

    Dim NumCurves As Long

    Dim Order(3) As Long

    Dim Dimen(3) As Long

    Dim Periodic(3) As Long

    Dim NumKnots(3) As Long

    Dim NumCtrlPoints(3) As Long

    Dim Knots(15) As Double

    Dim CtrlPointDbls(15) As Double

    Dim UVRange(3) As Double

   'Initially this function has no problems,

   'set this value to False if errors encountered

    CreateSquareSurface = True

   'Create a new planar surface based at RootPoint with the Normal vector Normal

    Set TmpSurf = SurfaceBody.CreatePlanarSurface(RootPoint, Normal)

    If TmpSurf Is Nothing Then

        CreateSquareSurface = False

        Exit Function

    End If

       

    'Set the arguments to define a square trimming loop

    'There are four curves (four sides)

    NumCurves = 4

    

    'Orders of the spline curves

    Order(0) = 2

    Order(1) = 2

    Order(2) = 2

    Order(3) = 2

    

    'There are two dimensions

    Dimen(0) = 2

    Dimen(1) = 2

    Dimen(2) = 2

    Dimen(3) = 2

    

    'No periodics

    Periodic(0) = 0

    Periodic(1) = 0

    Periodic(2) = 0

    Periodic(3) = 0

    

    'There are four knots (corners)

    NumKnots(0) = 4

    NumKnots(1) = 4

    NumKnots(2) = 4

    NumKnots(3) = 4

    

    'A square has two control points

    NumCtrlPoints(0) = 2

    NumCtrlPoints(1) = 2

    NumCtrlPoints(2) = 2

    NumCtrlPoints(3) = 2

    

    'The locations of the knots

    Knots(0) = 0

    Knots(1) = 0

    Knots(2) = 1

    Knots(3) = 1

    

    Knots(4) = 0

    Knots(5) = 0

    Knots(6) = 1

    Knots(7) = 1

    

    Knots(8) = 0

    Knots(9) = 0

    Knots(10) = 1

    Knots(11) = 1

    

    Knots(12) = 0

    Knots(13) = 0

    Knots(14) = 1

    Knots(15) = 1

   

   'Set the actual trimming corners

    CtrlPointDbls(0) = 0: CtrlPointDbls(1) = 0

    CtrlPointDbls(2) = 1: CtrlPointDbls(3) = 0

    

    CtrlPointDbls(4) = 1: CtrlPointDbls(5) = 0

    CtrlPointDbls(6) = 1: CtrlPointDbls(7) = 1

    

    CtrlPointDbls(8) = 1: CtrlPointDbls(9) = 1

    CtrlPointDbls(10) = 0: CtrlPointDbls(11) = 1

    

    CtrlPointDbls(12) = 0: CtrlPointDbls(13) = 1

    CtrlPointDbls(14) = 0: CtrlPointDbls(15) = 0

    

    'The possible range for the UV values

    UVRange(0) = 0

    UVRange(1) = 1

    UVRange(2) = 0

    UVRange(3) = 1

        

    'Create the trimming loop on the Surface

    isGood = TmpSurf.AddTrimmingLoop2(NumCurves, _

                                      Order, _

                                      Dimen, _

                                      Periodic, _

                                      NumKnots, _

                                      NumCtrlPoints, _

                                      Knots, _

                                      CtrlPointDbls, _

                                      UVRange)

    If isGood = False Then

        CreateSquareSurface = False

        Exit Function

    End If

    'Create the trimmed surface on the body

    'based on the trimming loop just created

    isGood = SurfaceBody.CreateTrimmedSurface

    If isGood = False Then

        CreateSquareSurface = False

        Exit Function

    End If

    If IsPartOfTempBody Then

       'If this surface is to be used in

       'a temporary body, you must generate it

    Else

        SurfaceBody.CreateBodyFromSurfaces

    End If

End Function

 



Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Create Body using Trimmed Surfaces Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:

x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2013 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.