Hi, ich hab ein kleines Problem mit einem Makro von mir.
Erstmal vorweg ich bin noch relativ am Anfang was die Makroprogramierung angeht, deshalb ist vielleicht noch nicht alles optimal.
Ich habe jetzt ein Makro geschrieben welches in einem ersten Schritt den Radius von einem Rohr bestimmen soll. Die Unterscheidung mit der If-Else-Anweisung ist mMn. notwendig um auch "dumme" Geometrien vermessen zu können, da greift leider nicht die .Radius Funktion.
Nun tritt bei der Zeile "Messen=MyMeasure..." im Unterprogramm der Fehler auf: "Source: Laufzeitfehler in Microsoft VBScript; Description: Typen unverträglich"
Das kuriose ist nur das ich genau das gleiche Unterprogramm schonmal in einem anderen Makro genutzt habe und dort funktioniert alles problemlos. Habe es 1 zu 1 übernommen.
Ich hoffe ihr könnt mir bei der Sache helfen, ich probiere jetzt schon seit Dezember rum und komme nicht weiter. Maximal das ich andere Fehlermeldungen erzeuge
Vielen Dank schonmal.
hier noch der Quelltext:
Attribute VB_Name = "xxx"
Dim version, macroname
Sub CATMain()
version = "1.0"
macroname = "xxx"
'#################################################
Set partDocument1 = CATIA.ActiveDocument
'#################################################
'Körper auswählen--------------------------------------------------
'#################################################
Dim MyType(0)
MyType(0) = "Body"
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
sel.Clear
Dim G As String
G = sel.SelectElement2(MyType, "Body auswählen [ESC=Abbrechen]", False)
If (G = "Normal") Then
Set body1 = sel.Item(1).Value
Else
Exit Sub
End If
Set part1 = body1.Parent.Parent
'#################################################
'Deklaration--------------------------------------------------------
'#################################################
Set hybridShapeFactory1 = part1.HybridShapeFactory
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Add()
Set bodies1 = part1.Bodies
'#################################################
'Aussenfläche einlesen-----------------------------------------------
'#################################################
part1.InWorkObject = body1
Dim Was(0)
Was(0) = "Face"
Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
selection1.Clear
Dim E As String
E = selection1.SelectElement2(Was, "Außenfläche auswählen [ESC=Abbrechen]", True)
If (E = "Normal") Then
Dim Aussenflaeche
Aussenflaeche = selection1.Selection.Item(1).Value.Name
Aussenflaeche = Replace(Aussenflaeche, "Selection_", "")
Dim i2
i2 = InStrRev(Aussenflaeche, "));")
Aussenflaeche = Left(Aussenflaeche, i2)
Aussenflaeche = Aussenflaeche + ");WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)"
Set reference1 = part1.CreateReferenceFromBRepName(Aussenflaeche, body1)
Else
Exit Sub
End If
'#################################################
'Extract von Außenfläche erzeugen----------------------------------
'#################################################
Set hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(reference1)
hybridShapeExtract1.PropagationType = 3
hybridShapeExtract1.ComplementaryExtract = False
hybridShapeExtract1.IsFederated = False
hybridBody1.AppendHybridShape hybridShapeExtract1
part1.InWorkObject = hybridShapeExtract1
'#################################################
'Achse von Außenfläche erzeugen----------------------------------
'#################################################
Set hybridShapeAxisLine1 = hybridShapeFactory1.AddNewAxisLine(reference1)
hybridShapeAxisLine1.AxisLineType = 1
hybridBody1.AppendHybridShape hybridShapeAxisLine1
part1.InWorkObject = hybridShapeAxisLine1
'#################################################
'Messen des Durchmessers-----------------------------------------
'#################################################
Dim dm As Double
dm = Abs(Messen(reference1, Achse))
If dm = 0 Then
Set MySPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Set MyMeasure1 = MySPAWorkbench.GetMeasurable(reference1)
dm = MyMeasure1.Radius
End If
...
End Sub
Function Messen (MyFirst As Object, MySecond As Object) As Double
Dim MySPAWorkbench As SPAWorkbench
Dim MyMeasure As Measurable
Set MySPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Set MyMeasure = MySPAWorkbench.GetMeasurable(MyFirst)
Messen = MyMeasure.GetMinimumDistance(MySecond)
End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP