| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
 | HPE ProLiant Summer Academy 2025 in Linz, eine Veranstaltung am 11.09.2025
|
Autor
|
Thema: oberstes Teil prüfen (2041 mal gelesen)
|
Greskamp Mitglied Ingenieur
  
 Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 25. Nov. 2013 12:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich möchte prüfen ob das oberste Teil ":all_at_top" ein Einzelteil oder eine Baugruppe ist, jedoch ohne das jeweilige Teil vorher auswählen zu müssen. Die Befehle sd-inq-part-p oder sd-inq-assembly-p kenne ich, nur wie komme ich an das Teil ran, wenn ich es nicht wählen möchte. Der Versuch (sd-inq-assembly-p :all_at_top) wäre wohl zu leicht gewesen. Vielleicht hat jemand eine Tipp. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
     

 Beiträge: 2166 Registriert: 12.12.2000
|
erstellt am: 25. Nov. 2013 12:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
|
Walter Geppert Moderator Frank und Frei
     

 Beiträge: 2166 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 25. Nov. 2013 13:00 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Ausserdem glaube ich, dass <:all_at_top> eigentlich nur ein Keyword im save_package-Dialog ist, und sonst gar nicht funktioniert. Was jedenfalls geht ist: Code: (setf objectsintoplist (sd-inq-obj-children (sd-pathname-to-obj "/")))
------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
 Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
  
 Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 25. Nov. 2013 13:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo Walter, bekomme ich da dann eine Liste mit allen Teilen unter dem "/" oder nur das oberste? Und würde dann der Befehl (sd-inq-part-p objectsintoplist) heißen? ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
     

 Beiträge: 2166 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 25. Nov. 2013 14:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Wie schon gesagt, CED (oder wie es je nach Version auch immer heissen mag  ) sieht da keine eindeutige Struktur vor, es können beliebige Objekte "nebeneinander" in der obersten Ebene existieren, siehe Anhang. Deshalb ist die von mir beispielhaft objectsintoplist bezeichnete Variable immer von der Type LIST, in den meisten Fällen halt mit nur einem Element. Wenn du dir da warum auch immer sicher bist, dass bei euch immer nur eine eindeutige Struktur existiert, wäre denkbar Code: (setf mytopobjekt (first objectsintoplist))
und dann weiter Code: (setf topobjispart (sd-inq-part-p mytopobject)
Da braucht aber nur wer eine Arbeitsebene "vergessen" (liegt ja meist im Top) und dein Code liefert u.U. Mist ------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
 Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
  
 Beiträge: 659 Registriert: 20.11.2006
|
erstellt am: 25. Nov. 2013 15:25 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Die Frage wäre wohl, ob die Ansicht der Strukturliste immer der Reihenfolge der wiedergegebenen Liste von objectsintoplist entspricht. Hab ich nie ausprobiert, ob da gewisse Sortierungen oder Filter einen Einfluss besitzen. ------------------ Patrick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
  
 Beiträge: 523 Registriert: 12.03.2003 MS: Windows 10 64bit OSD: 20.1 M020 ModelManager: 20.1 M020 NX 1899 TC 12.3
|
erstellt am: 26. Nov. 2013 11:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Walter, es scheint mein Programm zu laufen. Danke für die Hilfe. Habe noch eine kleine Prüfung eingebaut, ob es mehr als ein Teil im Top gibt. (setf MYSECONDOBJEKT (second OBJECTSINTOPLIST)) (WHEN (AND (sd-inq-assembly-p MYTOPOBJEKT) (NOT(setf MYSECONDOBJEKT (second OBJECTSINTOPLIST)))) Somit ist gewährleistet das es nur ein Teil im Top gibt wenn ich das ausführe. Aber ohne Hilfe, keine Chance. Punkte sind auf dem Weg. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
     

 Beiträge: 2166 Registriert: 12.12.2000
|
erstellt am: 26. Nov. 2013 14:58 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
|
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 26. Nov. 2013 18:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
|
Greskamp Mitglied Ingenieur
  
 Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 26. Nov. 2013 18:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo Walter, Hallo Clausb, bin immer für solche Tipps zu haben. Den Vorschlag von Walter kann ich ja nach noch nachvollziehen. Clausb: Auch ohne "When". Wie sage ich denn dem Programm dann das "when" zu ende ist.. Oder macht das Programm dann alles was zwischen der Klammer vor dem AND steht und der Klammer die das Programm beendet? Aber gerne lese ich solche Verbesserungsvorschläge. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 26. Nov. 2013 21:37 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Stellen wir mal "komplette" Beispiele nebeneinander, dann wird es vielleicht klarer. Bei Walters Vorschlag läuft es in etwa auf dieses hinaus: Code:
(WHEN (AND (sd-inq-assembly-p MYTOPOBJEKT) (= 1 (length OBJECTSINTOPLIST))) (tu-was-mit MYTOPOBJEKT))
Das "WHEN" ist also "zu Ende", wenn sich die korrespondierende Klammer schließt (wie Du ja auch vermutet hast). Wie das in Lisp halt eigentlich immer so ist. Das ganze jetzt ohne "WHEN":
Code:
(and (sd-inq-assembly-p MYTOPOBJEKT) (= 1 (length OBJECTSINTOPLIST)) (tu-was-mit MYTOPOBJEKT))
Das ist praktisch das gleiche, nur dass ich mir das (when) gespart habe. Das "when" wegzulassen, ist zugebenermassen Geschmackssache. Für erfahrene Lisp-Programmierer ist "meine" Variante angemessen, während Einsteiger vielleicht das "when" vermissen. Wie auch immer. Jetzt vereinfachen wir noch den Test auf eine ein-elementige Liste:
Code:
(and (sd-inq-assembly-p MYTOPOBJEKT) (not (rest OBJECTSINTOPLIST)) (tu-was-mit MYTOPOBJEKT))
Diese kleine Vereinfachung kann man natürlich auch in der Variante mit "when" anwenden. Sieht erst mal so aus, als wäre es egal, welche Variante man wählt, aber bei einer langen Liste ist (not (rest ...)) viel schneller als (=1 (length ...)). Code:
(let ((l (loop for i from 0 to 10000000 collecting i))) (time (= 1 (length l))) (time (not (rest l))))
SBCL (eine sehr schnelle Lisp-Implementierung) braucht für (not (rest l)) braucht in diesem Beispiel gerade mal 248 CPU-Zyklen für (not (rest l)) - aber mehr als 46 Millionen CPU-Zyklen für die Variante (=1 (length l))! Peter, wenn Du jetzt noch Fragezeichen in den Augen hast, nimm einfach die Variante von Walter, denn sie ist erstens schon sehr gut und zweitens offenbar für Dich gut lesbar, und das ist auch viel wert. ------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ [Diese Nachricht wurde von clausb am 30. Nov. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2296 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.5737 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.0.0.1@job ● Taschenrechner ● Stift+Zettel V8.42
|
erstellt am: 13. Dez. 2013 20:43 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Zitat: Original erstellt von clausb: ...SBCL ... braucht in diesem Beispiel gerade mal 248 CPU-Zyklen für (not (rest l)) - aber mehr als 46 Millionen CPU-Zyklen für die Variante (=1 (length l))!
Gigantische Zahlen, ja. Aber das wuerde im gegebenen Anwendungsfall heissen, das DU 10000000 Objekte im Modeling unterhalb von "/" haengen hast. Ich denke in dem Fall gaebe es mindestens noch ein 2. oder 3. Performance Problem zu dem von Dir genannten. Also: (realistischere Zahlen, mein Gutster! ) wieviele CPU Zyklen kommen bei einer Liste mit 20 und mit 10 Elementen raus? ------------------ ● Seamonkey Firefox ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
     
 Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 13. Dez. 2013 22:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Wolfgang, die Zahlen sind absolut realistisch, weil auf einem real existierenden System gemessen! Aber es ging mir sowieso nicht um einzelne Zyklen, sondern vor allem um den Unterschied zwischen einem Algorithmus der Komplexität O(1) und einem mit Komplexität O(n). Zitat: Original erstellt von der_Wolfgang:
Gigantische Zahlen, ja. Aber das wuerde im gegebenen Anwendungsfall heissen, das DU 10000000 Objekte im Modeling unterhalb von "/" haengen hast. Ich denke in dem Fall gaebe es mindestens noch ein 2. oder 3. Performance Problem zu dem von Dir genannten. Also: (realistischere Zahlen, mein Gutster! ) wieviele CPU Zyklen kommen bei einer Liste mit 20 und mit 10 Elementen raus?
------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
     

 Beiträge: 2166 Registriert: 12.12.2000
|
erstellt am: 16. Dez. 2013 16:27 <-- editieren / zitieren --> Unities abgeben:          Nur für Greskamp
Bei der Programmierung meines HP-41C hab ich mir auch noch Gedanken über jedes Byte und jeden Rechenschritt gemacht  , die heutzutage gerade verschwenderischen Ressourcen lassen solche Überlegungen -leider- in den Hintergrund treten. Wenn man dann mal wieder ein kleines  Windows-Update von ein paar 100Mb runterlädt, wünscht man sich in der Tat, dass eine saubere, kompakte Programmierung wieder wichtiger würde. Was heute ein einziger Druckertreiber verbraucht, ging vor 20 Jahren auf keine Festplatte ------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
 Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |