×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Catia Macro : To Create 100 Datum Lines about Center Point

Catia Macro : To Create 100 Datum Lines about Center Point

Catia Macro : To Create 100 Datum Lines about Center Point

(OP)
Hello Friends
I want to create 100 Datum lines about Axis System Center in a Given Geometric Set. So each of the line must be exactly 3.6 deg from its neighbor. Unfortunately this is not the case in case of the code I have created. There is a little bit of inaccuracy due to deg to Rad conversion I guess. Is there any better way to do that so that accuracy in deg can be maintained ? Below is my code

CODE --> VBA

Option Explicit

Sub CATMain()

    Dim MyPartDoc As PartDocument
    Dim MyPart As Part
    Dim MySelection 'As Selection
    
    Set MyPartDoc = CATIA.ActiveDocument
    Set MyPart = MyPartDoc.Part
    Set MySelection = MyPartDoc.Selection
    
    Dim vFilter1(0)
    Dim Status As String
    
    vFilter1(0) = "HybridBody"
    
    MySelection.Clear
    Status = MySelection.SelectElement2(vFilter1, "Select Geometric Set", True)
    
    If Status = "Normal" Then
    
        Dim MyHybridBody As HybridBody
        Set MyHybridBody = MySelection.Item(1).Value
        
        Dim vFilter2(1)
        vFilter2(0) = "PlanarFace"
        vFilter2(1) = "HybridShapePlaneExplicit"
    
        MySelection.Clear
        Status = MySelection.SelectElement2(vFilter2, "Select Sketch Plane", True)
        
        If Status = "Normal" Then
            
            Dim Reference1 As Reference
            Set Reference1 = MySelection.Item(1).Value
            
            Dim MySketch 'As Sketch
            Dim i As Integer
            Dim theta As Double
            Dim x As Double, y As Double
            
            For i = 1 To 100
            
                Set MySketch = MyHybridBody.HybridSketches.Add(Reference1)
               
                Dim MyFactory2d As Factory2D
                Set MyFactory2d = MySketch.OpenEdition
                
                If i > 0 And i < 27 Then
                    theta = 90 - 3.6 * (i - 1)
                    theta = theta * 22# / (7# * 180#)
                End If
                
                If i > 26 And i < 52 Then
                    theta = 0 - 3.6 * (i - 26)
                    theta = theta * 22# / (7# * 180#)
                End If
                
                If i > 51 And i < 77 Then
                    theta = -90 - 3.6 * (i - 51)
                    theta = theta * 22# / (7# * 180#)
                End If
                
                If i > 76 And i < 101 Then
                    theta = 180 - 3.6 * (i - 76)
                    theta = theta * 22# / (7# * 180#)
                End If
                
                x = 100# * Cos(theta)
                y = 100# * Sin(theta)
                
                Dim MyLine As Line2D
                Set MyLine = MyFactory2d.CreateLine(0#, 0#, x, y)
                
                Debug.Print MyLine.Name
                
                MySketch.CloseEdition
    
                MyPart.Update
                
                MyPart.InWorkObject = MyHybridBody
                
                Dim hybridShapeFactory1 As Factory
                Set hybridShapeFactory1 = MyPart.HybridShapeFactory
                
                Dim Reference2 As Reference
                Set Reference2 = MyPart.CreateReferenceFromObject(MySketch)
                
                Dim LineDatum
                Set LineDatum = hybridShapeFactory1.AddNewLineDatum(Reference2)
                
                MyHybridBody.AppendHybridShape LineDatum
                
                MyPart.InWorkObject = LineDatum
    
                hybridShapeFactory1.DeleteObjectForDatum Reference2
                
            Next
            
            MyPart.Update

        End If
        
    End If

End Sub 

RE: Catia Macro : To Create 100 Datum Lines about Center Point

CODE --> CATScript

Option Explicit
Sub CATMain()

    Dim MyPartDoc As PartDocument
    Dim MyPart As Part
    Dim MySelection 'As Selection    
    Set MyPartDoc = CATIA.ActiveDocument
    Set MyPart = MyPartDoc.Part
    Set MySelection = MyPartDoc.Selection
    
    Dim vFilter1(0)
    Dim Status As String
    
    vFilter1(0) = "HybridBody"
    
    MySelection.Clear
    Status = MySelection.SelectElement2(vFilter1, "Select Geometric Set", True)
    
    If Status = "Normal" Then
    
        Dim MyHybridBody As HybridBody
        Set MyHybridBody = MySelection.Item(1).Value
        
        Dim vFilter2(1)
        vFilter2(0) = "PlanarFace"
        vFilter2(1) = "HybridShapePlaneExplicit"
    
        MySelection.Clear
        Status = MySelection.SelectElement2(vFilter2, "Select Sketch Plane", True)
        
        If Status = "Normal" Then
            
            Dim Reference1 As Reference
            Set Reference1 = MySelection.Item(1).Value
            
            Dim MySketch 'As Sketch
            Dim i As Integer
            Dim theta As Double
            Dim x As Double, y As Double
            
            For i = 1 To 100
            
                Set MySketch = MyHybridBody.HybridSketches.Add(Reference1)
               
                Dim MyFactory2d As Factory2D
                Set MyFactory2d = MySketch.OpenEdition
                Dim PI
               PI = 3.1415926535897932384626433832795   '' all depends on precision :-)
              If i > 0 And i < 27 Then 
              theta = 90 - 3.6 * (i - 1)
               theta= theta * PI/180
               End If
                
                If i > 0 And i < 27 Then
                    theta = 90 - 3.6 * (i - 1)
                    theta= theta * PI/180
                End If
                
                If i > 26 And i < 52 Then
                    theta = 0 - 3.6 * (i - 26)
                   theta= theta * PI/180
                End If
                
                If i > 51 And i < 77 Then
                    theta = -90 - 3.6 * (i - 51)
                    theta= theta * PI/180
                End If
                
                If i > 76 And i < 101 Then
                    theta = 180 - 3.6 * (i - 76)
                    theta= theta * PI/180
                End If
                
                x = 100 * Cos(theta)
                y = 100 * Sin(theta)
                
                Dim MyLine As Line2D
                Set MyLine = MyFactory2d.CreateLine(0, 0, x, y)
                
                '~ Debug.Print MyLine.Name
                
                MySketch.CloseEdition
    
                MyPart.Update
                
                MyPart.InWorkObject = MyHybridBody
                
                Dim hybridShapeFactory1 As Factory
                Set hybridShapeFactory1 = MyPart.HybridShapeFactory
                
                Dim Reference2 As Reference
                Set Reference2 = MyPart.CreateReferenceFromObject(MySketch)
                
                Dim LineDatum
                Set LineDatum = hybridShapeFactory1.AddNewLineDatum(Reference2)
                
                MyHybridBody.AppendHybridShape LineDatum                
                MyPart.InWorkObject = LineDatum    
                hybridShapeFactory1.DeleteObjectForDatum Reference2
                
            Next
            
            MyPart.Update

        End If
        
    End If

End Sub 

Regards
Fernando

https://picasaweb.google.com/102257836106335725208
https://picasaweb.google.com/103462806772634246699...

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources