Thread Pro/Engineer VB API und Perl-Script (12 answers)
Opened by Zulu at 2011-10-29 13:09

Zulu
 2011-10-29 13:09
#153664 #153664
User since
2011-10-29
8 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

auf dieser Seite gibt es einige Beispiele für die Steuerung des CAD-Programmes Pro/Engineer durch den "ProE API" mit VB, VBA, über ein Javascript und Perl.

Ich möchte als unerfahrener Programierer mit MATLAB eine Verbindung über die ActiveX Schnittstelle zu ProE zu herstellen und als Beispiel die Masse eines 3D-Bauteils auslesen. Mit MATLAB kann ich eine Verbindung zu ProE herstellen, aber ich bekomme die Fehlermeldung "no apropriate method, property or field session for class Interface.IUnknown". Daher der Versuch über perl zu gehen, zu der es in der oben genannten Seite einen Beispiel gibt (lieber wäre mir die Lösung in MATLAB). Zu dem Thema habe ich auf der MATLAB Newsletter Seite bereits einen Thread fortgesetzt, ohne eine Antwort erhalten zu haben. Auf CAD.de habe ich das Problem ebenfalls gepostet.

In dem API Users Guide von ProE gibt es ein VBA-Beispiel für das Auslesen der Masse eines Bautiels mit einem Excel Script (siehe Seite 178, Kapitel "Mass Properties"). Hier der Auszug:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Code:Imports pfcls
Public Class pfcSolidExamples
Public Sub printMassProperties(ByRef session As IpfcBaseSession)
Dim model As IpfcModel
Dim solid As IpfcSolid
Dim solidProperties As IpfcMassProperty
Dim gravityCentre As New CpfcPoint3D
Try
'======================================================================
'Get the current solid
'======================================================================
model = session.CurrentModel
If model Is Nothing Then
Throw New Exception("Model not present")
End If
If (Not model.Type = EpfcModelType.EpfcMDL_PART) And
_(Not model.Type = EpfcModelType.EpfcMDL_ASSEMBLY) Then
Throw New Exception("Model is not a solid")
End If
solid = CType(model, IpfcSolid)
'======================================================================
'Get the solid properties. Optional argument in this method is the name
'of the coordinate system to use. If null, uses default
'======================================================================
solidProperties = solid.GetMassProperty(Nothing)
gravityCentre = solidProperties.GravityCenter
MsgBox("The solid mass is: " + solidProperties.Mass.ToString + Chr(13).ToString + _"The solid volume is: " +
solidProperties.Volume.ToString + Chr(13).ToString + _"The Centre of Gravity is at: " + Chr(13).ToString + _"X : " +
gravityCentre.Item(0).ToString + Chr(13).ToString + _"Y : " + gravityCentre.Item(1).ToString +
Chr(13).ToString + _"Z : " + gravityCentre.Item(2).ToString +
Chr(13).ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString + Chr(13) + ex.StackTrace.ToString)
Exit Sub
End Try
End Sub
End Class


Prinzipiell funktionert der Aufruf von ProE aus Perl aus, aber ich kann in dem Excel Beispiel folgende Zeilen mangels Verständnis für Perl und das VB-Skript nicht nach Perl übersetzen:

solid = CType(model, IpfcSolid)
solidProperties = solid.GetMassProperty(Nothing)


Kann mir jemand erklären, wie die beiden Zeilen in Perl programmiert werden müssen?

Mein Kode sieht bisher so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
$asynconn = Win32::OLE->new("pfcls.pfcAsyncConnection");
$conn = $asynconn->Connect( "", "", ".", 5 );
#$session = $conn->Session;
#$mdlName = $session->CurrentModel->FileName;
$solidProperties = $session->CurrentModel->GetMassProperty(Nothing);
$Mass = $solidProperties->Mass;
#print "mdlName: $mdlName", "\n";
print "Mass: $Mass", "\n";

Die Antwort ist:
Can't call method "GetMassProperty" on an undefined value at Line 5.


Danke und Grüße
Zulu
Last edited: 2011-10-30 20:35:44 +0100 (CET)

View full thread Pro/Engineer VB API und Perl-Script