Hot News:
   

Mit Unterstützung durch:

  Foren auf CAD.de
  Creo Elements/Direct
  Modeling Objekte zaehlen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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:  Modeling Objekte zaehlen (134 mal gelesen)
der_Wolfgang
Moderator
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 2371
Registriert: 3.20.

● PE60+80+90@home
● W10 Pro Build19045.6332
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.1.0.1@job
● Taschenrechner
● brain 6.3
● Stift+Zettel V8.42

erstellt am: 09. Okt. 2025 22:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So ihr lieben, ich wärme mal diesen 3 Jahre alten Thread indirekt auf, da ich darauf aufbaue.

Es ging darum wieviele Teile / Baugruppen etc. im Modeling geladen sind, bzw. in einer Baugruppe vorhanden sind. Es gab damals Zaehlen.lsp und bisschen später von mir noch ein Zaehlen_20.lsp.

TEIL 1 : technische Erklärung

Stephan hatte seinerzeit zu Recht angemerkt, das er keine Perfomance-Verbesseung sieht in der Zaehlen_20.lsp Variante, sondern eher im Gegenteil (bei großen Baugruppen).
Nun ja...  mir kam da schon vor vielen Monaten (18 oder mehr) der Geistesblitz warum das so ist!!!

Die schnelle Umsetzung scheiterte an meinen Erweiterungsideen, die ich im Hinterkopf hatte/habe. Aber auch aus anderen Gründen. So hat es etwas gedauert.

Erklärung:

Das folgende Konstrukt fand' ich damals recht elegant, um zu bestimmen wie viele (assemblies) in der Liste sind:

Code:
(count-if #'sd-inq-assembly-p all-obj)
Deswegen habe ich davon intensive Gebrauch gemacht, wie man in Zaehlen_20.lsp sehen kann.

Aber genau DAS war der Fehler. Denn was macht diese Funktion: sie ruft für alle Elemente der Liste die Funktion sd-inq-assembly-p.

Wenn man nun mehrere solcher count-if's nutzt.....  dannn ...  hmmm 

Code:
(setq ubgr  (count-if #'sd-inq-assembly-p all-obj)
(setq dteil (count-if #'sd-inq-wire-part-p all-obj)
(setq fteil (count-if #'sd-inq-face-part-p all-obj)
(setq eteil (count-if #'sd-inq-empty-part-p all-obj)

Wenn meine all-obj Liste nun 1000 Elemente enthält, wird 1000 mal sd-inq-assembly-p gerufen und 1000 mal sd-inq-wire-part-p und 1000 mal sd-inq-face-part-p und 1000 mal sd-inq-empty-part-p.

Ja aber, wenn ich in 'Zeile 2' doch schon weiss, das es ein wire-part ist, warum sollte ich dann noch gucken ob das part ein face part oder empty ist???? Oder wenn es ein Assembly ist: warum prüfe ich auf wire/face/empty part???

Letzteres alleine sind 3000 Prüfungen für die Katz. 🐈

Ich habe mich vom hübschen count-if verleiten lassen und habe dies dann 16 mal auf 2 unterschiedliche Listen losgelassen. Und damit die Funktionaliät verschlimmbessert 😣


Kurz gesagt: Code elegant. 😎  Funktion lahm. 😖  - blöd g'loffe! 😬


Aber wie gesagt, der Geistes Blitz 💡 war da, geisterte lange Zeit nur im Hirn herum, aber nicht im lisp-code: eine gute alte dolist Schleife verwendet 👍, die ganzen Typprüfungen in einer Condition gemacht 👍, diese dann auch noch nach Häufigkeit geschickt sortiert 👍 (es gibt deutlich mehr Parts als Assemblies als Viewsets etc).

Code:
;; gekürzt:
(dolist (object all-objects)
   (cond ;; on object type count
     ((sd-inq-part-p object)
       (cond
         ((sd-inq-empty-part-p object) (incf cnt-part-empty))
         ((sd-inq-face-part-p object)  (incf cnt-part-face))
         ((sd-inq-wire-part-p object)  (incf cnt-part-wire))
         (T #| :OTHERWISE |#           (incf cnt-part-solid))
       )) ; end cond-parts
     ((sd-inq-container-p object)    (incf cnt-container))
     ((sd-inq-assembly-p object)     (incf cnt-assemply))
     ;; usw...
     ) ; end cond
   ) ;; end loop

Die allermeisten Objekte werden jetzt also nur 1 bis 2 mal auf ihren objekt type geprüft und fertig.
Die Reduzierung auf die uniq-contents Objekte habe ich mit Hilfe von (sau-schnellen) hash tables umgesetzt. Da braucht es nun nicht mal mehr eine zweite Schleife/Liste. 🙂


Ich hatte noch 2 Ideen um noch Performance rauszukitzeln: a) den objekt type nur einmal erfragen b) den equal test für die Hashtables ersetzen.

Aber jetzt musste ich das ganze erste mal mit einem fetten Assembly und im "großen Modeling" testen und messen. Das geht zu Hause nicht mit der PE90.

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Anzeige:Infos zum Werbeplatz >>

GeoVisual Civil Engineer CAD APP für 3D, Tiefbau, AEC - Architektur-, Ingenieur- und Bauwesen

Die benutzerfreundliche Softwarelösung zur Visualisierung von Infrastrukturplanungen

der_Wolfgang
Moderator
Tastenhauer


Sehen Sie sich das Profil von der_Wolfgang an!   Senden Sie eine Private Message an der_Wolfgang  Schreiben Sie einen Gästebucheintrag für der_Wolfgang

Beiträge: 2371
Registriert: 3.20.

● PE60+80+90@home
● W10 Pro Build19045.6332
● Drafting V17~V20.7@job
● Modeling V17~V20.7@job
● Windchill 12.1.2.6@job
● UWGM Client 13.1.0.1@job
● Taschenrechner
● brain 6.3
● Stift+Zettel V8.42

erstellt am: 09. Okt. 2025 22:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

TEIL 2 : Anwendung

Nun denke ich, das mein neues Zähltool reif für die Veröffentlichung ist.

Verglichen mit den anderen Zähltools in o.g. Thread werden nun 13 ObjekteTypen unterschieden, und es erfolgt eine Reduktion auf die Anzahl der Contents-Objekte, was im Datenbank Kontext immer interessant ist. In der Summe sind das also 26 Einzelergebnisse.

  • Bei 4063 Instance -Objekten mass ich 0.28s
  • Bei 55705 Instance -Objekten mass ich 1.3s
  • Bei 97332 Instance -Objekten mass ich 2.9s
  • Bei 158988 Instance -Objekten mass ich 4.2s

Bei einer Baugruppe mit 159k  Instance -Objekten habe ich folgende Zeiten erhalten

  • 4.57 sec bei compiliertem LSP code und ohne eigene Zähler
  • 6.94 sec bei interpretiertem LSP code und ohne eigene Zähler

Es gibt eine zusätzliche Anpassung, bei der man bis zu 3 optionale eigene Zähler definieren kann. Diese sind aber einfach gestrickt und rufen die zugehörige Funktion einfach für jedes Objekt einmal auf. Das geht dann doch etwas in die Performance (bei meinem 158.000 Objekte Beispiel)

Das selbe Assembly mit 3 eigenen Zählern (sd-inq-obj-contents-read-only-p + sd-inq-inseparable-p + sd-inq-obj-selective-instance-p)

  • 5.46 sec bei compiliertem LSP code und 3 eigenen Zählern
    -- also ~1 sec länger als ohne
  • 8.35 sec bei interpretiertem LSP code und 3 eigenen Zählern
    -- also ~1.4 sec länger als ohne

Halbe Sekunde rum oder 'num. Egal: bei der hohen Anzahl an Objekten war der Vorteil von compiliertem Lisp Code deutlich messbar.

Und Aussehen tut es so (hier in English):

Screenshots mit deutsch-sprachiger Bedienoberfläche sind im PDF enthalten.

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen .... | Nach anderen Beiträgen suchen

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz