Design a Part in Catia by clicking an Excel Button

╄→尐↘猪︶ㄣ 提交于 2019-12-12 02:16:47

问题


I already wrote some Macros in Catia V5 built in Macro Editor, but i can't figure out how to access Catia commands from Excel.

I would like to know how can I create for instance a simple straight cylinder by only having in the excel file cylinder's radius and length.

I want to make different pressure vessels in Catia by entering their diameter and height in Excel and after clicking on a button in that excel sheet the vessel should appear in Catia. I have no problem if I already need to have an open empty part in Catia, but would be best just to have Catia Opened with nothing loaded in it.

If i have the start and see how can I access Catia Methods from Excel I think I can figure out the rest methods needed to complete the vessel, like neck, cap, etc.

Thank you.

Edit: I managed to test some stuff, I got stuck on one problem, I don't know how to set up constraints in Excel vba. I moved the code from Catia vb to Visual Express and managed to make it work there but in excel I don't find a link on how to use a driving dimension.

Here is my code:

Sub Main()

    Dim CATIA As Object
    Set CATIA = GetObject(, "CATIA.Application")

    Set openDocument = CATIA.ActiveDocument

    Set currentPart = openDocument.Part

    Set currentHybridBodies = currentPart.HybridBodies

    Set currentHybridBody = currentHybridBodies.Add()

    Set referenceHybridBody = currentPart.CreateReferenceFromObject(currentHybridBody)

    currentPart.HybridShapeFactory.ChangeFeatureName referenceHybridBody, "GeometricalSet"

    Set partOriginElements = currentPart.OriginElements

    Set plnYZ = currentPart.OriginElements.PlaneYZ

    Set currentGeometricalSet = currentPart.HybridShapeFactory

    Dim currentOffset As Integer
    Dim circleDiameter As Integer
    Dim cylinderLength As Integer

    currentOffset = 0

    circleDiameter = Range("B2").Value

    cylinderLength = Range("B3").Value

    Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)

    currentPart.Update

    currentOffset = currentOffset + cylinderLength

    circleDiameter = Range("B5").Value

    cylinderLength = Range("B6").Value


    Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)

    openDocument.Part.Update

    currentOffset = currentOffset + cylinderLength

    circleDiameter = Range("B8").Value

    cylinderLength = Range("B9").Value

    Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)

    currentPart.Update

    currentOffset = currentOffset + cylinderLength

    CATIA.ActiveWindow.ActiveViewer.Reframe

End Sub




Sub CreateCylinder(iCenterX, iCenterY, iDiameter, iLength, iPlaneOffset)

    Set CATIA = GetObject(, "CATIA.Application")
    Set openDocument = CATIA.ActiveDocument
    Set currentPart = openDocument.Part
    Set plnYZ = currentPart.OriginElements.PlaneYZ
    Set currentGeometricalSet = currentPart.HybridShapeFactory

    Set planeOffset1 = currentGeometricalSet.AddNewPlaneOffset(plnYZ, iPlaneOffset, False)

    Set currentHybridBody = currentPart.HybridBodies.Item("GeometricalSet")

    currentHybridBody.AppendHybridShape (planeOffset1)

    openDocument.Part.Update

    Set currentBodies = currentPart.Bodies

    Set currentBody = currentBodies.Add()

    Set currentSketch = currentBody.Sketches.Add(planeOffset1)

    Dim Factory2D As Object

    Set Factory2D = currentSketch.OpenEdition

    Set geometricElements1 = currentSketch.GeometricElements

    Dim axis2D1 As Object

    Set axis2D1 = geometricElements1.Item("AbsoluteAxis")

    Dim line2D1 As Object

    Set line2D1 = axis2D1.GetItem("HDirection")

    Dim line2D2 As Object

    Set line2D2 = axis2D1.GetItem("VDirection")

    Set currentCircle = Factory2D.CreateClosedCircle(iCenterX, iCenterY, iDiameter / 2)

    Dim point2D1 As Object

    Set point2D1 = axis2D1.GetItem("Origin")

    Dim constraints1 As Object

    Set constraints1 = currentSketch.Constraints

    Dim reference2 As Object

    Set reference2 = currentPart.CreateReferenceFromObject(currentCircle)

    Dim constraint1 As Object

    Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)

    Dim catCstModeDrivingDimensions As Object

    'Set constraint1.Mode = catCstModeDrivingDimensions  'Here I get the error

    Dim iRadius As Double

    iRadius = iDiameter / 2       

    currentCircle.CenterPoint = point2D1

    currentSketch.CloseEdition

    Dim newPad As Object

    Set newPad = currentPart.ShapeFactory.AddNewPad(currentSketch, iLength)

End Sub

On that commented line I get error 438: Object doesn't support this property or method.

The code works without that line, but the geometric elements are not constrained, instead they appear fixed and I don't want this.

That code works fine in Visual Express and put all the constraints where they should be.

Can anyone tell me how to link that Catia command to excel vb.

This is from v5 automation documentation:

enum CatConstraintMode { catCstModeDrivingDimension, catCstModeDrivenDimension }

Also any feedback on my code is appreciated.

Thank you.

excel sheet

Edit: The only references I seem to be allowed to import are these: references

If I select others I receive an error: Error in loading DLL. Catia is installed on a server but I can point to it using Browse... still I'm not sure what to select there because there are a lot of files.


回答1:


Here is a code to create a bolt. Paste the code in a module in Excel and assign a button to the macro.

Sub Button1_Click()
  Dim CATIA As Object
    
  'Get CATIA or Launch it if necessary.
  On Error Resume Next
  Set CATIA = GetObject(, "CATIA.Application")
  If CATIA Is Nothing Then
     Set CATIA = CreateObject("CATIA.Application")
    CATIA.Visible = True
  End If
  On Error GoTo 0
  
  ' Add a new Part
  Set MyDocument = CATIA.documents.Add("Part")
  Set PartFactory = MyDocument.part.ShapeFactory  ' Retrieve the Part Factory.
  Set MyBody1 = MyDocument.part.Bodies.Item("PartBody")
  CATIA.ActiveDocument.part.InWorkObject = MyBody1 ' Activate "PartDesign"
  
' Creating the Shaft
  Set ReferencePlane1 = MyDocument.part.CreateReferenceFromGeometry(MyDocument.part.OriginElements.PlaneYZ)
  
  ' Create the sketch1 on ReferencePlane1
  Set Sketch1 = MyBody1.Sketches.Add(ReferencePlane1)
  Set MyFactory1 = Sketch1.OpenEdition() ' Define the sketch


  
  h1 = Range("E6").Value ' height of the bolt
  h2 = Range("E7").Value ' total height
  r1 = Range("E8").Value ' external radius
  r2 = Range("E9").Value ' Internal radius
  s1 = Range("E10").Value ' Size of the chamfer
  
  Set l101 = MyFactory1.CreateLine(0, 0, r1 - 20, 0)
  Set l102 = MyFactory1.CreateLine(r1 - 20, 0, r1, -20)
  Set l103 = MyFactory1.CreateLine(r1, -20, r1, -h1 + 20)
  Set l104 = MyFactory1.CreateLine(r1, -h1 + 20, r1 - 20, -h1)
  Set l105 = MyFactory1.CreateLine(r1 - 20, -h1, r2, -h1)
  Set l106 = MyFactory1.CreateLine(r2, -h1, r2, -h2 + s1)
  Set l107 = MyFactory1.CreateLine(r2, -h2 + s1, r2 - s1, -h2)
  Set l108 = MyFactory1.CreateLine(r2 - s1, -h2, 0, -h2)
  Set l109 = MyFactory1.CreateLine(0, -h2, 0, 0)
  Sketch1.CenterLine = l109
  
  Sketch1.CloseEdition
  Set AxisPad1 = PartFactory.AddNewShaft(Sketch1)
  
' Creating the Pocket
  Set ReferencePlane2 = MyDocument.part.CreateReferenceFromGeometry(MyDocument.part.OriginElements.PlaneXY)
    
  ' Create the sketch2 on ReferencePlane2
  Set Sketch2 = MyBody1.Sketches.Add(ReferencePlane2)
  Set MyFactory2 = Sketch2.OpenEdition() ' Define the sketch
  D = 1 / 0.866
  
  Set l201 = MyFactory2.CreateLine(D * 100, 0, D * 50, D * 86.6)
  Set l202 = MyFactory2.CreateLine(D * 50, D * 86.6, D * -50, D * 86.6)
  Set l203 = MyFactory2.CreateLine(D * -50, D * 86.6, D * -100, 0)
  Set l204 = MyFactory2.CreateLine(D * -100, 0, D * -50, D * -86.6)
  Set l205 = MyFactory2.CreateLine(D * -50, D * -86.6, D * 50, D * -86.6)
  Set l206 = MyFactory2.CreateLine(D * 50, D * -86.6, D * 100, 0)

  ' Create a big circle around the form to get a Hole
  Set c2 = MyFactory2.CreateClosedCircle(0, 0, 300)
  
  Sketch2.CloseEdition
  Set AxisHole2 = PartFactory.AddNewPocket(Sketch2, h1)
  
  MyDocument.part.Update


End Sub

https://www.dropbox.com/s/rjuadpmsso8fe1p/20160423_2208_36.avi?dl=0



来源:https://stackoverflow.com/questions/36205323/design-a-part-in-catia-by-clicking-an-excel-button

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!