| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| INNEO Solutions erneut von PTC ausgezeichnet, eine Pressemitteilung
|
Autor
|
Thema: Browserelement Ausgrauen (474 / mal gelesen)
|
MiBr Mitglied Konstrukteur
Beiträge: 575 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 28. Feb. 2024 10:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mir mit 'sd-browser-add-popup-entry' einen Befehl ins Rechtsklick Menü der Strukturliste gebastelt. Jetzt möchte ich das dieser nur gewählt werden kann wenn EIN Teil oder EINE Baugruppe gewählt ist und ansonsten soll es ausgegraut sein. Habe schon mit Listp , ... und versucht bekomme es leider nicht hin! Mein letzter Ansatz war:
Code: (defun is-applicable-mibr (obj name) (if (or (sd-inq-part-p (sd-pathname-to-obj (BrowserNode-objPath obj))) (sd-inq-assembly-p (sd-pathname-to-obj (BrowserNode-objPath obj))) ) t ; menu entry should be visible if selected over on object nil) ; don't show menu if not over an object )(sd-browser-add-popup-entry "parcel-gbrowser" :label "DB-Modell" :entry-type :Push :menu-action 'my-ndm_showeditor :is-entry-applicable 'is-applicable-mibr :menu-action 'menu-action )
Aber alles was ich Versuche alles scheitert, hat da jemand ne Idee Gruß Michael [Diese Nachricht wurde von MiBr am 28. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MiBr Mitglied Konstrukteur
Beiträge: 575 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 28. Feb. 2024 17:52 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe jetzt eine Lösung gefunden die für mich passt.
Code: ;Auswahl nur wenn Teile/BG (defun is-applicable-mibr (obj name) (if (and (sd-pathname-to-obj (BrowserNode-objPath obj)) (or (sd-inq-part-p (sd-pathname-to-obj (BrowserNode-objPath obj))) (sd-inq-assembly-p (sd-pathname-to-obj (BrowserNode-objPath obj))) ) ) t ; menu entry should be visible if selected over on object nil) ; don't show menu if not over an object )
Mit '(sd-pathname-to-obj (BrowserNode-objPath obj))' schließe ich aus, dass es sich um eine Schnittebene, ein Formelement oder so handelt. Und mit (sd-inq-part-p ...) und (sd-inq-assembly-p ...) gehe ich sicher das es sich um ein Teil oder eine BG handelt. Was etwas schade ist! Wenn ich mehrere Teile/Baugruppen wähle, bekommt man mit '(BrowserNode-objPath obj)' nur das zuletzt gewählte 'Obj(Teil/Path)'. Somit bekomme ich für das Kriterium 'Mehrfachauswahl nicht erlaubt' keine Abfrage hin. Aber das ist nicht sooo schlimm, dann nimmt er für die Funktion halt immer den letzten Klick. Gruß Michael [Diese Nachricht wurde von MiBr am 28. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 29. Feb. 2024 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für MiBr
|
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 29. Feb. 2024 20:26 <-- editieren / zitieren --> Unities abgeben: Nur für MiBr
|
MiBr Mitglied Konstrukteur
Beiträge: 575 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 01. Mrz. 2024 10:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, das klappt mal wieder super! Habe allerdings eine Verständnisfrage! Hinzugekommen zur Funktion ist noch die Abfrage ob überhaupt ein 'obj' vorhanden ist, da er sonst bei Pseudo Ordnern mit der Fehlermeldung 'Lisp:Fehler: Nil is not a strukture' kommt. So funktioniert es:
Code: (defun is-visible-mibr (obj name) (if (and obj (let ((set_objpath (sd-pathname-to-obj (browsernode-objpath obj)))) set_objpath (or (sd-inq-part-p set_objpath) (sd-inq-assembly-p set_objpath) ) ) (= 1 (sd-query-browser "parcel-gbrowser" :number-of-selected-objects)) ) t ; menu entry should be visible if selected over on object nil ; don't show menu if not over an object ) )
Und so nicht, da erhalte ich wieder die oben genannte Fehlermeldung! Code: (defun is-visible-mibr (obj name) (let ((set_objpath (sd-pathname-to-obj (browsernode-objpath obj)))) (if (and obj set_objpath (or (sd-inq-part-p set_objpath) (sd-inq-assembly-p set_objpath) ) (= 1 (sd-query-browser "parcel-gbrowser" :number-of-selected-objects)) ) t ; menu entry should be visible if selected over on object nil ; don't show menu if not over an object ) ) )
Also einmal die LET um die If- und einmal in der IF-Bedingung! Warum ist das so? Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 01. Mrz. 2024 21:43 <-- editieren / zitieren --> Unities abgeben: Nur für MiBr
Zitat: Original erstellt von MiBr: das klappt mal wieder super! Habe allerdings eine Verständnisfrage!So funktioniert es:
Na, dann ist doch alles gut. Jetzt noch ein bischen Klein-Kruscht:
- Die Funktion wird mit 2 objekten auf gerufen
ein browser-Node und der Name des Browsers.
- also - umbenannt: parameter 1
obj --> node ( ein obj ist bei uns doch immer ein sel-item, ein Dingens-im-Modell)
- also - umbenannt: parameter 2
name --> brw-name .. und das ist genau DER Name, den du für sd-query-browser brauchst.
- so ein NODE kommt da immer rein, also bracht man den nicht im (and ..)
- ohne sinn ist der set_objpath zwischen dem anfang vom let und dem OR. Also Zeile 4 in deinem Code schnipsel
- Verwirrend ist in deinem Code die Variable 'set_objpath' .. denn, was du da rein stopfst, ist ein sel-item (oder eben nil). also - umbenannt:
set_objpath --> object
- den (= 1 ...) habe ich nach oben ins AND geschoben, weil der ist 'billig' und 'schnell' . Ja. HIER bringt der nicht wirklich viel, aber wenn man sich diese Überlegungen aneignet, macht man das an anderen Stellen eben auch automatisch und vermeidet das eine oder andere Performance Problem von vorn herein.
- Was ist das Entscheidungskriterium für den if ? eine boolesche Antwort. Also ja oder nein. Aber genau so eine Antwort, 0/1 T/nil 👍👎 , soll ja auch die Funktion zurück liefern. Also reicht es den (and ..) zu nutzen, ganz ohne if
Ja das ist alles nur klein-kram, aber das wird manchmal das üble Salz in der Suppe. So sähe es dann aus:
Code: (defun is-visible-mibr (node brw-name) (and (= 1 (sd-query-browser brw-name :number-of-selected-objects)) (let ((object (sd-pathname-to-obj (browsernode-objpath node)))) (when object ;; das when hat noch gefehlt um shiietkram auszuschliessen (or (sd-inq-part-p object) (sd-inq-assembly-p object) ) ) ;; das when hat noch gefehlt ) ) )
Ja, du kannst deinen code auch so lassen wir er ist! 😉 Ich habs aber nie laufen lassen .. 😅 [edit]noch ein when ergänzt wie Michael im nächsten Posting korrekt angemerkt hat.[/edit] ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 05. Mrz. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MiBr Mitglied Konstrukteur
Beiträge: 575 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 04. Mrz. 2024 08:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang, mal wieder besten Dank für deine Ausführungen! Leider gibt es mit meiner und mit deiner Version immer noch die Fehlermeldung 'Lisp:Fehler: Nil is not a strukture' wenn man ein Rechts-Click auf Schnittelement oder Formelement geht.
Und diesen Fehler bekomme ich nicht gewuppt, (ganz trauriger Smile mit vielen Tränen) Habe dann gedacht es könnte damit gehe: (sd-inq-part-p (sd-query-browser "parcel-gbrowser" :get-selected-objects)) Aber auch da kein Erfolg, hast du ncoh einen Profitip? Gruß Michael Ich hab nee Lösung gefunden:
Code: (defun is-visible-mibr (node brw-name) (and (= 1 (sd-query-browser brw-name :number-of-selected-objects)) ;nur ein Objekt (when (sd-pathname-to-obj (browsernode-objpath node)) (let ((object (sd-pathname-to-obj (browsernode-objpath node)))) (or (sd-inq-part-p object) ;Teil (sd-inq-assembly-p object) ;Bg ) ) ) ) )
Gruß Michael [Diese Nachricht wurde von MiBr am 04. Mrz. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |