2016-03-24 3 views
0

Я уже написал несколько макросов в Catia V5, встроенных в редактор макросов, но я не могу понять, как получить доступ к командам Catia из Excel.Создайте деталь в Catia, нажав кнопку Excel

Я хотел бы знать, как я могу создать, например, простой прямой цилиндр, только имея в радиусе и длине цилиндра Excel.

Я хочу сделать различные сосуды под давлением в Катие, введя их диаметр и высоту в Excel и после нажатия на кнопку на этом листе превосходного сосуда должен появиться в Catia. У меня нет проблем, если мне уже нужно иметь открытую пустую часть в Catia, но было бы лучше всего, чтобы Catia Opened ничего не загрузил в нее.

Если у меня есть начало и посмотреть, как я могу получить доступ к Catia Методы из Excel Я думаю, что я могу понять, методы отдыха, необходимые для завершения судна, как шея, шапка и т.д.

Спасибо.

Редактировать: Мне удалось проверить некоторые вещи, я застрял в одной проблеме, я не знаю, как настроить ограничения в Excel vba. Я переместил код из Catia vb в Visual Express и смог заставить его работать там, но в excel я не нашел ссылку о том, как использовать измерение вождения.

Вот мой код:

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 

На этой комментировал линии я получаю сообщение об ошибке 438: Объект не поддерживает это свойство или метод.

Код работает без этой строки, но геометрические элементы не ограничены, вместо этого они кажутся фиксированными, и я не хочу этого.

Этот код отлично работает в Visual Express и устанавливает все ограничения, в которых они должны быть.

Может ли кто-нибудь сказать мне, как связать эту команду Catia с преимуществом vb.

Это из документации автоматизации v5:

перечисление CatConstraintMode { catCstModeDrivingDimension, catCstModeDrivenDimension }

Кроме того, любая обратная связь на мой код ценится.

спасибо.

excel sheet

Edit: Только ссылки я, кажется, предоставляемое импорта являются следующие: references

Если я выбираю другие я получаю сообщение об ошибке: Ошибка при загрузке DLL. Catia установлен на сервере, но я могу указать на него с помощью Browse ... все еще я не уверен, что выбрать там, потому что есть много файлов.

+0

Вы должны добавить справочные библиотеки CATIA. См. Http://catiav5automation.blogspot.com/2013/05/introduction-to-catia-v5-automation.html около половины страницы (пункт 2b) – OpiesDad

+0

Благодарим вас за ответ, у вас интересный блог, так плохо что он не отображается в поиске Google. –

+0

Это не мой блог; Я нашел его в поиске Google ... Я даже не знаю, что такое CATIA, чтобы быть честным. – OpiesDad

ответ

2

Описание Вот код для создания болта. Вставьте код в модуль в Excel и назначьте кнопку макросу.

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

enter image description here

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

+0

Благодарим за код ferdo. Я попытаюсь посмотреть, как добавить ограничения для каждого элемента. –

+1

Мне действительно не нравится On Error Resume Next проверяет, особенно когда есть решение без него! в этом случае: если GetObject ("winmgmts:" & "{impersonationLevel = impersonate}! \\. \ root \ cimv2"). ExecQuery ("SELECT * FROM Win32_Process Где имя LIKE" CNEXT% '") Затем существует – tsolina

+0

Согласен с ты цолина. Даже для проверки, если у вас открыто более одного сеанса, предупредите об этом пользователя. – ferdo

Смежные вопросы