| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| | |
 | BOM Assistant für Stücklistenerstellung , eine App
|
|
Autor
|
Thema: Funktion in Pro/E 2001i (1258 mal gelesen)
|
unbekannt verzogen Mitglied

 Beiträge: 92 Registriert: 19.04.2006 PrÖ WF4 M120 OS: WinXP Pro, SP2 GraKa: NVIDIA Quadro FX 3400/4400 Prozessor: Arbeit: P4 3,4 GHz RAM: 2 GB
|
erstellt am: 19. Apr. 2006 09:40 <-- editieren / zitieren --> Unities abgeben:         
Hallo, gibt es die Möglichkeit, in den Beziehungen eine Funktion zu erstellen? "WERT" ist eine Gleitkommazahl und soll nun auf eine bestimmte Anzahl Nachkommastellen gerundet werden. Dazu wird momentan aufwendig für jede Variable eine Routine durchlaufen, die der Anzahl der Variablen entspricht. Das sieht dann so aus: WERTNEU=itos(floor(WERT))+"."+itos((WERT-floor(WERT))*10) Für einen weiteren Wert muß dies kopiert und geändert werden. Ihr seht, daß dies bereits bei wenigen Werten recht aufwendig und fehlerträchtig wird. Der Faktor 10 gibt an, daß es sich um eine Nachkommastelle handelt, bei 100 sind es zwei, bei 1000 drei usw. Nun stelle ich mir eine Funktion vor, die ich in den Beziehungen einmal definiere und dann nur noch mit den Parametern aufrufe: WERTNEU=Runden(WERT, NACHKOMMASTELLEN) Die Funktion "Runden(WERT, NACHKOMMASTELLEN)" stelle ich mir so vor (in Anlehnung an Pascal versuche ich es mal): FUNCTION Runden(WERT, NACHKOMMASTELLEN): String BEGIN RESULT=itos(floor(WERT))+"."+itos((WERT-floor(WERT))*10^NACHKOMMASTELLE) END; Das RESULT weist man dann der neuen Variablen (WERTNEU, ein Text) zu. Der Parameter NACHKOMMASTELLE steuert, wieviele Nachkommastellen angezeigt werden. Der weitere Charme wäre eine einfache Wartbarkeit der Funktion im Hinblick auf eine Erweiterung und Fehlersuche. Der Aufruf soll bspw. dann wie folgt lauten: LAENGE=Runden(123.4567, 2) und gibt für LAENGE dann einen Wert von 123.46 wieder. Ist so etwas möglich oder ist die momentane Lösung die einzige? Unbekannt verzogen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Michael 18111968 Moderator F&E & CAD
       

 Beiträge: 4893 Registriert: 25.07.2002 Wildfire 4 M220 (+SUT 2012) PDMLink 9.1 M050 NVIDIA Quadro FX 1700 Intel DualCore E8400 / 8GB WinXP 64 Prof. SP2
|
erstellt am: 19. Apr. 2006 09:57 <-- editieren / zitieren --> Unities abgeben:          Nur für unbekannt verzogen
|
unbekannt verzogen Mitglied

 Beiträge: 92 Registriert: 19.04.2006
|
erstellt am: 19. Apr. 2006 10:13 <-- editieren / zitieren --> Unities abgeben:         
|
j.sailer Mitglied Diplom-Ingenieur (FH)
   
 Beiträge: 1040 Registriert: 29.05.2001 Dienstleister, immer was der Kunde einsetzt. Z. Z. WF 3.0 M080 + Intrlaink 3.4
|
erstellt am: 19. Apr. 2006 11:51 <-- editieren / zitieren --> Unities abgeben:          Nur für unbekannt verzogen
Ich frage mal wofür Du das brauchst? Geht es um die Darstellung in Notizen, Tabellen, von Bemassungswerten etc. oder möchtest Du mit dem gerundeten Wert weiterrechnen. Für alle Darstellungssachen von Werten, kann man Pro/E angeben wieviel Nachkommastellen angezeit werden und dann rundet das System automatisch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
unbekannt verzogen Mitglied

 Beiträge: 92 Registriert: 19.04.2006
|
erstellt am: 19. Apr. 2006 12:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo, es geht um die Darstellung im Zeichnungskopf. Die Werte sollen entsprechend gerundet und dann als Text im Zeichnungskopf ausgegeben werden. wie im Link angegeben, ist itos() nicht wirklich brauchbar, da es alle Nachkommastellen bei der Wandlung von Zahl in Text abschneidet. Die Erweiterung mit dem Paramter .[1] in einer Notiz halte ich für nicht machbar, da nicht immer Werte gerundet werden müssen und dann somit im Text eventuell 1.0000 steht. Ferner ist auch die Angabe unterschiedlich, also es sind nicht immer zwei Nachkommastellen erforderlich, mal können es drei oder auch nur eine sein. Schade ist, daß Pro/E weder eine vernünftige Funktion zum Runden bereitstellt (vergleichbar den round() aus Pascal) noch eine vernünftige Methode um Zahlen, so wie sie sind, in einen Text zu wandeln. Unbekannt verzogen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Moderator CAD-Admin / manchmal Konstrukteur
       

 Beiträge: 10679 Registriert: 14.11.2001 CREO 8.0.6.0 (+Geniustool für Creo 10.0.1) PDMLink 12.0.2.8 NTSI Contender E64 SC8 mit NVIDIA Quadro P4000 Intel Core i7-10700KF / 3,80 GHz 64GB DDR4-RAM / 2933 MHz Win 10 Prof. 64Bit
|
erstellt am: 19. Apr. 2006 12:45 <-- editieren / zitieren --> Unities abgeben:          Nur für unbekannt verzogen
Zitat: Original erstellt von unbekannt verzogen: Die Erweiterung mit dem Paramter .[1] in einer Notiz halte ich für nicht machbar, da nicht immer Werte gerundet werden müssen und dann somit im Text eventuell 1.0000 steht. Ferner ist auch die Angabe unterschiedlich, also es sind nicht immer zwei Nachkommastellen erforderlich, mal können es drei oder auch nur eine sein.
Schwachfug!!! Klar ist es im Schriftfeld und in Notizen anwendbar. Diese Eigenschaft ist nämlich auch im Nachgang noch änderbar. Wenn also die Stellen nicht ausreichen oder zu viel sind, dann einfach die Anzahl ändern und alles wird schön. ------------------ Gruß Udo Keine Panik, Du arbeitest mit Pro/E! Und Du hast cad.de gefunden! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
j.sailer Mitglied Diplom-Ingenieur (FH)
   
 Beiträge: 1040 Registriert: 29.05.2001 Dienstleister, immer was der Kunde einsetzt. Z. Z. WF 3.0 M080 + Intrlaink 3.4
|
erstellt am: 19. Apr. 2006 13:09 <-- editieren / zitieren --> Unities abgeben:          Nur für unbekannt verzogen
Also eigentlich ist das mit den eckigen Klammern genau die Funktion die Du suchst. Denn man kann das für jeden Parameter unterschiedlich machen und wie U.Suess sagt, jederzeit änderbar. Wenn das Klammern eingeben stört geht des auch über Format->Dezimalstellen im Menü, da kann man dann mehrere Parameter auswählen und Pro/E schreibt die Klammern mit den Werten selber hin. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
unbekannt verzogen Mitglied

 Beiträge: 92 Registriert: 19.04.2006
|
erstellt am: 25. Apr. 2006 22:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte nochmal etwas genau auf mein Problem mit all seinen Randbedingungen eingehen. In den Beziehungen werden Variabeln angelegt, die Gleitkommazahlen enthalten können: LAENGE=20.746, BREITE=12.354 Dann wird diese Variabel einem Maß zugewiesen: d13=LAENGE, d14=BREITE Nun wird eine Variabel angelegt, die das PLM-System auswertet und in eine Stückliste überträgt: STUECKLISTE=itos(LAENGE)+"x"+itos(BREITE) Die Textvariabel STUECKLISTE wird also sowohl auf der StüLi als auch im Textfeld auf der Zng. angezeigt. Ansonsten hätte man ja u.U. abweichende Angaben zwischen StüLi und Zng., auch kann der Wert für STUECKLISTE völlig anders aussehen. itos() rundet nicht, sondern hackt die Stellen ab, so daß man im o.g. Fall eine Angabe von 20x12 und nicht 20.75x12.35, wie es bei einer Angabe mit zwei Nachkommastellen korrekt wäre. Es bleibt also nur der aufwendige Weg über ceil() und floor(), so wird es z.Zt. auch gemacht. Nun suche ich nach einer Möglichkeit, um eine Funktion - wie im Ursprungsbeitrag beschrieben - zu erstellen. Eine andere Möglichkeit wäre eine Funktion, die Zahlen unabhängig ihres Typs in einen Text wandelt. Leider scheint keine der beiden Lösungen vorhanden und man muß für jede Variabel den aufwendigen Konstrukt in den Beziehungen eintragen, was bei vielen Zahlen doch fehlerbehaftet ist. unbekannt verzogen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stahl Mitglied unbeschreiblich
   
 Beiträge: 1475 Registriert: 30.01.2001 Proe 18 bis Creo 3 Intralink 1 bis 3.4 Windchill PDMLink 8.0 bis 10.2
|
erstellt am: 25. Apr. 2006 22:55 <-- editieren / zitieren --> Unities abgeben:          Nur für unbekannt verzogen
Ich hätte zwei bisher unausgesprochene Senfkörner zu diesem Thema übrig. 1.) In ProE 2001 (2001i gibts nicht) schneidet itos() nur die Nachkommastellen ab, das meine ich mich ebenfalls erinnern zu können. In Wildfire 2 wird stattdessen gerundet! 2.) Wenn ich eine Zahl in einer Beziehung runden will, brauche ich nur diese Zahl plus 0.5 abrunden. laenge = floor(d57 + 0.5) Natürlich darf man auch schreiben: laenge = ceil(d57 - 0.5) Wenn ich auf eine Nachkommastelle runden will: laenge = floor(d57 + 0.05, 1) ------------------ Stahl.
P.S.: Ja, eine Funktion analog zu itos nur für Fließkommazahlen wäre toll. Dies ist keine Signatur. Es gibt hier nichts zu sehen. Bitte lesen Sie weiter.
[Diese Nachricht wurde von Stahl am 25. Apr. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |