Skip to content

ProEngineer Webschnittstelle (Teil 4)

So heute gibts nur einen Kurzeintrag zur Ausweisung von Parametern um diese z.B. mit externen Programmen auslesbar zu machen.
Das ganze ist wirklich simpel, nachdem die Verbindung zur ProEngineer Sitzung bereits hergestellt ist (davon gehe ich einfach mal aus ;-))

Ruft ihr entweder pwlParameterDesignationAdd oder pwlParameterDesignationRemove auf übergebt den Dateinamen,
einer Datei die sich in der aktiven Sitzung befindet und den Parameter der ausgewiesen oder die Ausweisung entfernt werden soll.

Das ganze könnte in einer kleinen Funktion etwa so aussehen:
function Designation ( Dateiname , Parameter , Mode )
{
        if ( Mode == "add" )
        {
                document.pwl.pwlParameterDesignationAdd ( Dateiname , Parameter );
        }
        else
        {
                document.pwl.pwlParameterDesignationRemove ( Dateiname , Parameter );
        }
}


Designation ( 'test.prt' , 'Benennung', 'add');
Designation ( 'test.prt' , 'Werkstoff', '');

Das Beispiel würde z.B. den Parameter Benennung lesbar in der Modelldatei stehen, der Werkstoff würde nicht mehr auftauchen.
Alle Parameter die nicht genannt werden, bleiben unverändert, d.h. ihr müsst für jeden Parameter die Funktion aufrufen, wenn ihr alle ändern möchtet.

So das war's für heute, ich versuche zum Wochenende mal die Bibliothek zum Auslesen der ProEngineer Dateien aufzuarbeiten,
damit könntet ihr dann die Parameter, welche ausgewiesen sind auslesen. Allerdings befindet sich die Bibliothek in einer frühen Alphaphase,
d.h. es könnte bei bestimmten Parametern und Wertkombinationen zu Fehlern kommen.
Die ProEngineer Daten sind natürlich nicht dazu da von externen Programmen ausgelesen zu werden, sonst wäre die Software unbrauchbar ^^

ProEngineer Webschnittstelle (Teil 3)

Naja, da diese Funktion in etwa der ähnelt für die Erzeugung eines Parameters,
werde ich nur noch die Änderung angeben, da die ersten Zeilen bei den Parameterfunktionen eigentlich weitestgehend identisch sind.

Wir verwenden nur statt document.pwl.pwlParameterValueCreate eine andere Funktion
        document.pwl.pwlParameterValueSet (
        Dateiname,
        ItemType,
        featureID,
        Parameter, ValueType,
        IntValue, FloatValue, StringValue, BoolValue);


Diese Änderung und es wird der entsprechende Parameter geupdatet, wenn der Parameter nicht existiert wird kein Fehler ausgegeben,
aber auch kein Parameter erzeugt, weswegen ich in meiner Toolsammlung meist so vorgegangen bin:
Zuerst hab ich Funktion für die Parameter Erzeugung aufgerufen und direkt danach diese Funktion hier. Es ist eigentlich ganz einfach erklärt,
wieso es keine Probleme gemacht hat, die Funktion zum Erzeugen ändert den Parameter nicht wenn dieser bereits existiert.
Die Vorteile dieser zwei Funktionen sind gleichzeitig ihre Schwachstellen, sie geben bei vorhanden bzw. nicht vorhanden Parametern keine Fehler aus,
dies müsste über zwei weitere Funktionen geprüft werden, erstens Abfrage der vorhandenen Parameter und zweitens überprüfen, ob der Parameter existiert. "ProEngineer Webschnittstelle (Teil 3)" vollständig lesen

ProEngineer Webschnittstelle (Teil 2)

So wie bereits erwähnt gibts heute den Auszug aus der Toolbox zum Erzeugen eines Parameter in ProEngineer mit Hilfe der Webschnittstelle.

Die ersten Zeilen haben wie beim Auslesen die Funktion die Berechtigungen zu Prüfen, dies ist bei allen Funktionen immer gleich.
function ParameterCreate(Dateiname,Parameter,Wert)
{
if (!pfcIsWindows())
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");


Es werden wieder die benötigten Variablen für die Funktion festgelegt, in diesem Fall ist es eh etwas seltsam,
die Funktion benötigt nicht nur den gewünschten Parameter (z.B. als String), sondern auch den Parameter in Float, Integer, Boolean,
erst über ValueType wird schließlich der Parametertyp hier String festgelegt.
    var ItemType;
    var StringValue = Wert;
    var FloatValue = parseFloat(Wert);
    var IntValue = parseInt(Wert);
    var BoolValue = (Wert.toLowerCase() == "true") ?
                    true : false;
    var ValueType = document.pwl.eval('PWL_VALUE_STRING');



    ItemType = document.pwl.eval('PWL_MODEL');
        featureID = -1;

Hier ist es wieder so wie bei der Funktion zum Auslesen, ItemType legt den Modelltyp fest (hier PWL_MODEL),
d.h. der Parameter wird in einem Bauteil (prt) oder Baugruppe (asm) erzeugt.

                document.pwl.pwlParameterCreate (
                        Dateiname,
                        ItemType,
                        featureID,
                        Parameter, ValueType,
                        IntValue, FloatValue, StringValue, BoolValue);

Diese Funktion ist das vorhin erwähnte seltsame, bevor ich einen String anlegen kann muss ich einen Integer und Float Wert festlegen,
welcher überhaupt nicht benötigt wird, aber diese Funktion ist allerdings nur ausgelegt um String in ProEngineer auch Zeichenketten festzulegen,
da es zum Zeitpunkt der Entwicklung nur für Text benötigt wurde und sich bis zur Einstellung der Entwicklung nicht geändert hat.

So das war die ganze Funktion, nachdem Aufruf von document.pwl.pwlParameterCreate wird versucht den Parameter zu erzeugen.

Das ganze Snippet erhaltet ihr gleich danach, so bis zum nächsten Mal



"ProEngineer Webschnittstelle (Teil 2)" vollständig lesen

ProEngineer Webschnittstelle (Teil 1)

So nun folgt der erste Teil der ProEngineer Webschnittstelle auch genannt Pro/Web.Link,
viele der zusätzlichen Tools, welche Händler mit liefern oder verkaufen, basieren darauf,
daneben existieren noch eine Schnittstelle für Java und eine für C.

Die Javascript/ActiveX Schnittstelle und die Java-Erweiterung werden kostenfrei mitgeliefert,
die Schnittstelle für C benötigt eine Extralizenz, welche sich die meisten wohl nicht anschaffen können,
werden oder wollen.

So nun kommen wir zur Funktion ParameterGet welche die vorhanden Parameter
aus einer aktiven Sitzung ausliest, es wird benötigt das sich das abzufragende Modell im Sitzungsspeicher befindet.

Wie bei allen Schnittstellen benötigen wir ist einmal eine Verbindung zum Programm, diese liefert ProEngineer
mit der Dokumentation bereits mit die benötigten Dateien werde ich in einem späteren Beitrag erwähnen.

Nun gut, die ersten zwei Zeilen haben folgenden Sinn, diese Fragen nach wird die Seite über den Programm internen
Webbrowser aufgerufen oder nicht, es wird versucht die benötigten Berechtigungen zu erhalten.

function ParameterGet(Dateiname)
{
   if (!pfcIsWindows())
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");



Als nächstes legen wir die verschiedenen Parameter an.

    var ret;
    var ItemType;
        var FeatureID;
        var Daten = new Object();
        Daten['Daten'] = new Object();
        Daten['Parameter'] = new Array();



    if (Dateiname == "")
    {
        return ;
    }

Mit if (Dateiname == "") kann der Browser davor bewahrt werden eine Fehlermeldung
auszuspucken, weil die Datei nicht gefunden oder die Daten nicht geladen werden konnten.


    ItemType = document.pwl.eval('PWL_MODEL');
                FeatureID = -1;
        ret = document.pwl.pwlMdlParametersGet(Dateiname);

Diese drei Zeilen legen folgendes fest:
ItemType ist ein Modell, d.h. eine Baugruppe oder ein Bauteil.
FeatureID wird in diesem Fall ignoriert, da wir kein besonderes Konstruktionselement wählen wollen, sondern die Baugruppe bzw. -teil.
pwlMdlParametersGet liest nun alle verfügbaren Parameter des Modells aus.


Der nächste Abschnitt liest die Daten von ret in ein Array Daten,
da ProEngineer aber zwischen verschiedenen Parametertypen unterscheiden müssen diese Daten korrekt ausgelesen werden,
da es sonst zu Fehlermeldungen der Schnittstelle kommt.

ProEngineer unterscheiden zwischen Double, String, Integer und Boolean Parameter,
diese werden entsprechend ausgelesen, damit Javascript mit diesen Daten korrekt umgeht.

    for (i = 0; i < ret.NumParams; i++)
    {
        var val_ret = document.pwl.pwlParameterValueGet(
                          Dateiname,
                          parseInt(ItemType),
                          FeatureID,
                          ret.ParamNames.Item(i));
                                         
        var answer = "";
                var parameter = "";
        if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_DOUBLE))
        {
            answer = val_ret.ParamDoubleVal;
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_STRING))
        {
            answer = val_ret.ParamStringVal;
                        if(answer == ""){ answer = "&nbsp;"; }
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_INTEGER))
        {
            answer = val_ret.ParamIntVal;
        }
        else if (val_ret.ParamType == parseInt(document.pwlc.PWL_VALUE_BOOLEAN))
        {
            answer = (val_ret.ParamBooleanVal) ? "true" : "false";
                }
                parameter = ret.ParamNames.Item(i);
               
                Daten['Daten']['' + parameter.toLowerCase() + ''] = '' + answer + '';
                Daten['Parameter'] = '' + parameter.toLowerCase() + '';
       


Ich hoffe, ich konnte es wenigstens einigermaßen verständlich rüberbringen, da ich vor weit über einem Jahr,
mit dieser Schnittstelle aufgehört habe und die Dokumentation leider nicht parat habe, kann ich natürlich auch
nicht alle Funktionen mehr 100%ig nachvollziehen. Eins werde ich noch versuchen, die entsprechenden Dokumentationseinträge
der benutzen Funktionen etwas zu erklären, soweit es mit der leider ziemlich undurchsichtigen Dokumentation funktioniert.
Als diese Toolsammlung geschrieben wurde war es mehr ein Learning-by-doing mit Test und Fehlerfaktor ;-)


"ProEngineer Webschnittstelle (Teil 1)" vollständig lesen

Neue alte Tutorials

Vor etwa 3 Jahren hatte ich begonnen eine kleine Tool-Sammlung für ProEngineer zu schreiben.
Im März/April 2011 hatte ich die Entwicklung eingestellt, diese Tool-Sammlung sollte mir und meinen
Arbeitskollegen eine Erleichterung darstellen, da ich aber den Betrieb gewechselt habe, konnte und wollte
ich die Tool-Sammlung nicht mehr weiterentwickeln.
Aber was mich freut, die Tool-Sammlung ist bis heute im Einsatz und funktioniert ohne größere Probleme.

Ich werde Teile meiner Entwicklung in den nächsten Tutorials veröffentlichen, da aber der Quelltext
überprüft werden muss, bezüglich den in der Tool-Sammlung verwendeten Fremdbibliotheken
(besonders im Bezug auf die Pro/Web.Link-Schnittstelle) wird die Veröffentlichung etwas dauern
und nur in Teilen stattfinden.

Ein weiteres Problem wäre sowieso direkte Einsetzbarkeit der Tool-Sammlung, da es speziell auf eine
Netzwerkstruktur angepasst wurde, welche bereits vorhanden war.

So nun das war es für heute, ich werde mich in den nächsten Tagen dran machen den Quellcode
zu überprüfen und die ersten Auszüge der Tool-Sammlung zu veröffentlichen.

Natürlich werde ich meine Eigenentwicklungen wie immer unter die GPL oder LGPL stellen, je nachdem.

ProEngineer Sammelkiste (Teil 3)

Dies ist der dritteTeil einer kleinen Sammlung mit Befehlen, Problemlösungen und Tricks,
die ich über die Jahre mit dem Umgang von ProEngineer mir angeeignet habe.

Anmerkung
Es lassen sich natürlich nicht alle Befehle und Anweisungen auf allen Versionen oder
Systemkonfigurationen benutzen, dazu ist die Software zu komplex.
Außerdem geht einiges in den normalen Tagesablauf über ohne das ich noch etwas
davon mitbekomme wieso ich den Befehl so ausführen muss.
Die meisten administrativen Einträge habe ich extra weggelassen, da es wie oben schon
geschrieben zu sehr auf die Systemkonfiguration drauf ankommt.



Gewichtsberechnung
Diese Beziehungen müssen hinzugefügt werden, eventuell müssen noch die Einheiten neu definiert und/oder der Werkstoff neu zugewiesen werden.
Der Wert *1000 hinter pro_mp_mass muss natürlich entsprechend auf die genutzten Einheiten angepasst werden, hier wurden Tonnen in Kilogramm umgerechnet.

GEWICHT = pro_mp_mass*1000
WERKSTOFF = material_param("CONDITION")


Diese Werte können natürlich beliebig genannt und entsprechend über den Namen in einer Zeichnung genutzt werden.




Granite Kernel
Ja es geht es ist möglich mit Wildfire 3 eine Wildfire 5 Datei zu öffnen, natürlich ist eine Bearbeitung dortiger KEs nicht möglich,
aber für einen besseren Datenaustausch auf jedenfall sinnvoller als z.B. Step oder Iges zu nutzen, dort ist ein gewisser Verlust vorprogrammiert.

Den Granite Kernel kann von der PTC-Homepage heruntergeladen werden.

Die readnewermodels.dll muss nur noch in euere ProE Installation kopiert werden in <ProE_Verzeichnis>/i486_nt/obj/

Eine genaue Anleitung erhalten ihr ebenfalls auf der Herstellerseite




Verschmelzungen
Informationen
- Nur möglich bei Einzelteilen und Volumenmodellen
- Modelle benötigen die gleiche Genauigkeit
- Import-KE verursachen beim Verschmelzen Probleme, da diese Elemente von sich aus nicht geändert werden können, sollte das Importteil einfach kopiert werden.
- Undefinierte Bohrungen in Baugruppen verhindern das Verschmelzen dieser

Vorgehensweise
=> Editieren => Komponentenoperationen => Verschmelzen => Element(e) wählen in die verschmolzen werden soll
=> Element(e) wählen die verschmolzen werden sollen (nur Einzelteile) => Art der Verschmelzung Referenz, in Einzelfällen könnte auch Kopieren nötig sein
=> Mit Bezügen verschmelzen (Ebenen, Achsen, Punkte werden übernommen)

Probleme
Genauigkeit aneinander angleichen
=> Editieren => Einstellungen => Genauigkeit => Absolut => Wert 0,001 => Regenerieren Ja
Alternativ geht auch über Modell

Unvollständige Platzierungsreferenzen
- Teile dürfen sich nicht drehen oder bewegen können
- Abhilfe schafft das Fixieren des betroffenen Einzelteils / Baugruppe




Modell reparieren
Modell schließen
Import-KE editieren => Geometrie => Geometrie heilen => manuell => Spalt schließen => Autom. ausw. => Spalt schließen => Akzeptieren
Eventuell muss noch mit der Spaltgröße gespielt werden

Sollte dies nicht funktionieren, gibt es noch:
Flächen ersetzen
Import-KE editieren, die entsprechenden Flächen löschen, danach über Berandungsverbindungstool neue Flächen erzeugen.
Dann wieder mit Import-KE editieren im Menü Geometrie => Geometrie verkleinern und die gewünschten Flächen auswählen.

Wenn keine offenen Kanten mehr vorhanden sind, kann darauch über Menü Editieren => KE-Eigenschaften => Volumenkörper versucht werden ein Volumen zu erstellen.

Anmerkung
Das Ersetzen von fehlerhaften Stellen nimmt sehr viel Zeit in Anspruch und
leider funktioniert es nicht immer, es sollte also vorher eine Kosten-Nutzen-Rechnung
aufgestellt werden, ob die Reparatur wirklich lohnt.

ProEngineer Sammelkiste (Teil 2)

Dies ist der zweite Teil einer kleinen Sammlung mit Befehlen, Problemlösungen und Tricks,
die ich über die Jahre mit dem Umgang von ProEngineer mir angeeignet habe.

Anmerkung
Es lassen sich natürlich nicht alle Befehle und Anweisungen auf allen Versionen oder
Systemkonfigurationen benutzen, dazu ist die Software zu komplex.
Außerdem geht einiges in den normalen Tagesablauf über ohne das ich noch etwas
davon mitbekomme wieso ich den Befehl so ausführen muss.
Die meisten administrativen Einträge habe ich extra weggelassen, da es wie oben schon
geschrieben zu sehr auf die Systemkonfiguration drauf ankommt.



Zahlen in eine Zeichenkette umwandeln

LAENGE_001 = LAENGE 100 - FLOOR ( LAENEGE ) 100
IF FLOOR ( LAENGE ) == 0
LAENGE_002 = "0"
ELSE
LAENGE_002 = ITOS ( FLOOR ( LAENGE ) )
ENDIF

IF LAENGE_001 == 0
LAENGE_003 = "0"
ELSE
LAENGE_003 = ITOS ( LAENGE_001 )
ENDIF

LAENGE_004 = LAENGE_002 + "," + LAENGE_003


Die Bezeichnungen LAENGE durch den gewünschten Begriff ersetzen, in den Textstring den Wert LAENGE_004 einsetzen.

Für mehr Nachkommastellen die beiden Positionen (Zeile 1) *100 in den beliebigen Wert ändern
*10 => 1 Kommastelle
*100 => 2 Kommastellen
*1000 => 3 Kommastellen




Bauteile im Schnitt nicht schneiden
Die Schraffur anklicken und solange auf nächster Querschnitt klicken bis die gewüschte Komponente aktiv dargestellt wird (rot hinterlegt); Ausschließen,
schließt das KE von der Schnittdarstellung aus und stellt es voll dar. Die Ansicht muss danach neu berechnet werden.




Zeichnung vereinfacht darstellen
nur sichtbare Kanten darstellen lassen (Ansichtseigenschaften => Ansichtsdarstellung => Darstellungsstil Ansicht => Zeichnungsanzeige => Kantendarstellung => gewünschte Funktion auswählen)
Vereinfachte Darstellungen sind nicht für Zeichnungen gedacht, die Stücklisten enthalten sollen, da Schrauben und ähnliches ausgeblendet werden können,
wäre die Stückliste nicht korrekt und ProEngineer zeigt deswegen auch keine Stücklistenballons auf diesen Ansichten an.

Ansichtsmanager => Vereinf. Darst. => Neu => Namen vergeben => Umdefinieren und KE's wählen.
In der Baugruppe das selbe Prinzip, nur das dort dann neben den KE's auch die Ansichten der Bauteile ersetzt werden müssen.

Anmerkung
Sollen große Baugruppen vereinfacht dargestellt werden, ist die Verwendung von sogennannten Skeletten zu empfehlen,
da diese speziell auf diese Art ausgelegt sind, dafür ist allerdings ein zusätzliches Modul nötig.





Maßtexte manipulieren
Standard
@D parametrisches Maß wird als Text angezeigt, davor und dahinter darf beliebiger Text angehängt werden.

Maßtext überschreiben
@O damit wird der Maßtext überschrieben, es kann kein @D verwendet werden.\\
Der gewünschte Text wird einfach dahinter gesetzt, ohne Leerzeichen.

Hochgestellter Text
@+ damit wird der nachfolgende hochgestellt (Text)

Tiefgestellter Text
@- damit wird der nachfolgende tiefgestellt dargestellt (Text)

Rahmen um Text
@[ erzeugt einen Rahmen für jede Zeile im Textfeld

ProEngineer Sammelkiste (Teil 1)

Dies ist der erste Teil einer kleinen Sammlung mit Befehlen, Problemlösungen und Tricks,
die ich über die Jahre mit dem Umgang von ProEngineer mir angeeignet habe.

Anmerkung
Es lassen sich natürlich nicht alle Befehle und Anweisungen auf allen Versionen oder
Systemkonfigurationen benutzen, dazu ist die Software zu komplex.
Außerdem geht einiges in den normalen Tagesablauf über ohne das ich noch etwas
davon mitbekomme wieso ich den Befehl so ausführen muss.
Die meisten administrativen Einträge habe ich extra weggelassen, da es wie oben schon
geschrieben zu sehr auf die Systemkonfiguration drauf ankommt.



Bibliothek defekt
Dateien (asm, prt, ...) können nicht eingebaut werden, weil nach Speichern und Cache leeren und neuladen der Baugruppe, diese Datei(en) nicht mehr von Pro/ENGINEER gefunden werden können, das Problem besteht nicht nur bei Einzelteilen, sondern auch bei Teilen aus der Bibliothek.
Die Bibliotheksdatei bibliothek.ctg.* ist fehlerhaft (z.B. durch unzureichende Schreibrechte) dadurch werden die Einzelteile aus der Bibliothek nicht mehr gefunden.
Lösung: Gesicherte bibliotheken.ctg.* zurücksichern bzw. mit genügend Schreibrechten neuerstellen lassen.




Symbol kopieren funktioniert nicht

Sollte so ein Fehler auftreten, muss der Englische Begriff gewählt werden, statt K für Kopieren, muss C für Copy genommen werden.
Die anderen zwei Werte müssten mit der englischen Abkürzung identisch sein.




Wiederholbereich Filter
Nach Einzelelementen filtern
# Tabelle
# WiederhBereich
# Filter
# Bereich wählen
# Nach Element
# Element(e) auswählen
# mit OK bestätigen

Filterfunktion im Wiederholbereich
Aufbau von Filtern
Variable Operator Wert

zum Beispiel
&asm.mbr.parametername != Wert




Bruchansicht
Querschnitt => Schnitt => lokal
Querschnitt vorher in der Baugruppe bzw. im Teil erzeugen.
Zeichnungsmodus => Zeichnungsansicht => Schnitte => 2D-Querschnitt => + => Schnitt wählen => Schnittbereich "lokal" => Referenz (muss im Schnitt liegen) => Spline zeichnen und zuweisen bzw. OK drücken
Die Referenz soll die Wirkung haben, wenn die geschnittene Komponente sich bewegt wird der Ausbruch mitgezogen, ist aber nur solange sichtbar, wie es der Querschnitt ermöglicht.




Gewicht in Zeichnung verwenden
Es ist möglich ein Gewicht in der Zeichnung zu verwenden, hier zu bedarf es nur einer normalen Notiz mit dem Wert &GEWICHT schon wird dieser Wert über die Notiz ausgegeben.
Beispiel mit Änderung der Kommastellen
Gewicht ca. &GEWICHT[.1] kg

=> ergibt z.B. Gewicht ca. 11,2 kg

Der Parameter kann natürlich auch beliebig anders heißen,

soll es international sein könnte auch WEIGHT,MASS oder ähnliches genutzt werden.
Wer möchte kann auch direkt auf die ermittelten Werte zugreifen, diese sind allerdings nicht immer in der gewünschten Einheit,
weswegen meist der Wert vorher über eine Beziehung umgerechnet werden muss.

Version einer DWG oder DXF Datei ermitteln

Um die Version einer DWG oder DXF Datei zu ermitteln (falls ihr diese nicht öffnen könnt), existiert ein ganz simpler Weg:
Öffnet die Datei mit einem Texteditor!

Am Anfang der DWG befindet sich eine 6 Zeichen lange Identifiktation (gilt nicht für die ersten 2 Versionen,
dort waren es nur 5 Zeichen ;-) ), bei DXF Dateien sieht es etwas anders aus, dort steht der Wert nach $ACADVER.

Hier nun die Liste der Versionen, diese gehen nach der AutoCAD Versionen:
- AC1024 = Release 2010
- AC1021 = Release 2007 bis 2009
- AC1018 - Release 2004 bis 2006
- AC1015 = Release 2000,2000i und 2002
- AC1014 = Release 14
- AC1012 = Release 13
- AC1009 = Release 11 und 12
- AC1006 = Release 10
- AC1004 = Release 9

Darunter exitsierien noch AC1003, AC1002, AC1001, AC1.2 bis AC2.22 und MC0.0

In der Regel wird die Release 12 oder Release 2000 verwendet,
mit diesen Versionen existieren die geringsten Probleme, da nicht jedes CAD System die neuen Dateien lesen kann bzw.
alle Befehle versteht.