Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Programmierung
  Browserelement Ausgrauen

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

Anzeige:

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 PTC CREO
Autor Thema:  Browserelement Ausgrauen (303 / mal gelesen)
MiBr
Mitglied
Konstrukteur


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

Beiträge: 568
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 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

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


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

Beiträge: 568
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 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

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
Ehrenmitglied V.I.P. h.c.
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: 2162
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build10.0.19045.4046
● Drafting V17~V20.6
● Modeling V17~V20.6
● Windchill 12.1.2.6
● UWGM Client 13.0.0.1

erstellt am: 29. Feb. 2024 20:17    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 Nur für MiBr 10 Unities + Antwort hilfreich

spendiere bitte ein
Code:
(let ((obj (sd-pathname-to-obj (BrowserNode-objPath obj))))
und nutze das obj - Danke

------------------
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

der_Wolfgang
Ehrenmitglied V.I.P. h.c.
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: 2162
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build10.0.19045.4046
● Drafting V17~V20.6
● Modeling V17~V20.6
● Windchill 12.1.2.6
● UWGM Client 13.0.0.1

erstellt am: 29. Feb. 2024 20:26    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 Nur für MiBr 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von MiBr:
bekommt man mit '(BrowserNode-objPath obj)' nur das zuletzt gewählte 'Obj(Teil/Path)'

Njein .

Du bekommst den browser node AUF DEM du den rechts klick machst.

selektiere T1 + T2 + T3 ..  nund bewege den cursor wieder auf T1 und mache dann den RMB-click. So ist es schon richtig!

Und du möchtest in Deine Funktion noch ein

Code:
(and (= 1 (sd-query-browser name :NUMBER-OF-SELECTED-OBJECTS)) ...)
einstreuseln. 😉

------------------
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

MiBr
Mitglied
Konstrukteur


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

Beiträge: 568
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 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

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
Ehrenmitglied V.I.P. h.c.
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: 2162
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build10.0.19045.4046
● Drafting V17~V20.6
● Modeling V17~V20.6
● Windchill 12.1.2.6
● UWGM Client 13.0.0.1

erstellt am: 01. Mrz. 2024 21:43    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 Nur für MiBr 10 Unities + Antwort hilfreich

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 ESRJava 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


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

Beiträge: 568
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 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

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

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 | CAD.de-Newsletter

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

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

(c)2024 CAD.de | Impressum | Datenschutz