Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Programmierung
  Markieren gewählter Browserelemente

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 Creo
Autor Thema:  Markieren gewählter Browserelemente (3265 mal gelesen)
StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 03. Mai. 2011 11:02    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


Seitenverkleidung.pkg.txt


SD_Schiller_Browserviews.lsp.txt

 
Hallo!

Ich komme hier nicht alleine weiter.

Mein Chef wünscht sich folgende Funktionalität.


Rechtsklick auf Element im Browser, dann Befehl "Markieren" wählen (das hab ich schon).
Gewähltes Element soll jetzt farbig hinterlegt werden (das hab ich auch) - aber nur dieses (das klappt nicht), die Funktion soll jetzt abgeschlossen sein.
Entsprechenden Befehl um die Markierung eines gewählten Objektes wieder aufzuheben (Standardanzeige).

Kann/möchte mir hier jemand weiterhelfen?

So stelle ich den Befehl zum markieren im Browser zur Verfügung:

Code:
(sd-browser-add-popup-entry
      "parcel-gbrowser"
      :entry-type  :Push
      :label "Marker ROT"
      :is-entry-visible    'IsVisible_ShowDirect
      :menu-action        'MenuAction_MarkRed
      :new-group t     
);;sd-browser-add-popup-entry

...und hier die menu-action dazu:

Code:
(defun MenuAction_MarkRed (node name)
  (sd-browser-add-interrogator "parcel-gbrowser"
    :interrogator-type :border-color
    :interrogator-func 'border-color-red
  );;
);;defun MenuAction_MarkRed

(defun border-color-red (node name)
  "#ff0000"
);;defun border-color-red


Im Moment verhält sich das ganze so, dass wenn ein Eintrag markiert wurde alle weiteren "besuchten" Elemente im Browser ebenfalls markiert werden...

Das komplette LISP im Anhang wertet viele Attribute aus. Als Beispiel mal eine kleine Baugruppe dazu (V16.00).

Gruß

Stephan

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 03. Mai. 2011 21:37    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 StephanWörz 10 Unities + Antwort hilfreich

Hallo Stephan,

Ok, ich versuchts mal zu reklären was Du zusammen programmiert hast.

Zur Erinnerung:
Ein browser interrogator liefert für ein Object eine Eigenschaft/ eine Information zurück.

Für den browser interrogator "Anzeige Name" sollte so ein interrogator (also eine List function= idealer weise den Teile/Baugruppen/was-auch-immer- NAME zurück lieferen.

!!! und zwar für JEDES element das im Browser tree hängt.

------------
Stepan Du hast eine Menu action eingegügt die eine Funktion aufruft. So weit so gut.

Diese funktion hängt nun in den Browser eine interrogator definition hinein. ABER: Dieser (Wie jeder andere) interrogator /und damit die dahinterliegende Funktion gilt ja FÜR JEDES object das im Browser dargestellt wird!

Der effekt ist: nach dem ersten Klick (ganz egal auf welches Element im Browser) ist diese interrogator definition aktive und liefert brav, fuer jeden Aufruf die Farbe 'ROT' zurück.. und schwubs sind alle eintrage imBrowser ROT.

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 03. Mai. 2011 22:02    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 StephanWörz 10 Unities + Antwort hilfreich

Code:
(sd-display-warning "Der folgende Beitrag ist fur LISP Anfänger unter 4.3 Jahren Erfahrung nicht geeignet")

Stephan, Du möchstest doch eigentlich Individuell füer X-beliebige Einträge in Deinem Browser eine Einfärung haben. Dann must DU aber auch dieses "welcher Eintrag soll rot werden" selbst verwalten.

Ich erweitere mal: Du möchtest für den EIntrag X die Markierungsfarbe Y festlegen; also etwas flexibler als "rot oder default".


a) Verwaltung
1) nimm eine Hashtable: der Key ist eine SysID, der value die Farbe
2) schreib einen Dialog, der ein Object (des Browsers) entgegennimmt und dem eine Farbe zuordnet
- Das ist dann ein neuer Eintrag in der hashtable (in der OK-action)
- Ein "Clear-All-Button" in dem Dialog wäre hilfreich
3) der dialog sollte noch ein [ ] aktive - check box haben zum ein/ausschalten
  speicher in globale variable, die sagt "markierungsfarbe ist aktiv"
4) diesen Dialog hängst Du als Aktion ins Browser menu

b) Ausführung
das Hinzufügen der Interrogator Funktion machst Du direkt beim reinladen vom LISP

Die funktion sagt nun nich einfach 'rot' sondern etwa wie folgt:
(defun definable-color (obj name)
1) vom Obj den objname besorgen
2) mit dem object name das object (sd-pathname-to-obj) (achtung kann ja auch NIL sein)
3) vom object die sys-id erfragen
3a) contents or
3b) instance sysid je nach geschmack
4) mit der sysid in die Hashmap gucken, die Farbe bestimmen
5) den Farbwert (oder ggf. NIL) zurücklieferen

das ganz nur wenn die globale variable sagt "markierungsfarbe ist aktiv"

c) session übergreifend (erweiterung)
1) im sd-exit-event fügst Du eine funktion hinzu, die die Hashmap in ein LISP file dumpt (im sd-customize verzeichnis am besten)
2) in der sd_customize LÄDST du diese LISP datei um den Inhalt der Hashmap zu restaurieren

ab und an muss man einen cleanup der hashtable machen..


---> auch nach einem SD -restart und dem laden des Models von gestern wäre Deine Browser Markierungsfarbe wieder da. 

----------------------------------------------------------------------

Ufff..

und das um diese Uhrzeit.


Gruss
Wolfgang

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 03. Mai. 2011 22:04    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
Code:
(defun border-color-red (node name)


Trace die funktion mal! Aber nicht erschrecken!!! 

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 04. Mai. 2011 08:12    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

Guten morgen Wolfgang!

Herzlichen Dank für die aufgebrachte Mühe und die umfassenden Erklärungen/Hinweise.

Zitat:
!!! und zwar für JEDES element das im Browser tree hängt.

...zu was gibt man dann eigentlich neben dem Browser auch den node an??

Zitat:
(sd-display-warning "Der folgende Beitrag ist fur LISP Anfänger unter 4.3 Jahren Erfahrung nicht geeignet")

...ich glaube hier fehlen mir noch ein paar Tage ;)


Zitat:
Trace die funktion mal! Aber nicht erschrecken!!!

...erschreckend was hier abgeht. Da bekomm ich ja ein schlechtes Gewissen 


Zusammenfassend: PUUUUH     

Mal sehen was ich draus machen kann 

Als Gelegenheits LISPler fang ich halt häufig nicht gerade bei Null aber dennoch immer wieder von vorne an...
Das kann etwas dauern - ich halt Euch aber auf dem laufenden.

Gruß

Stephan


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

clausb
Ehrenmitglied V.I.P. h.c.



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

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: 04. Mai. 2011 09:21    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
...zu was gibt man dann eigentlich neben dem Browser auch den node an??

Wenn ich das richtig sehe, gibst Du beim Aufruf von sd-browser-add-interrogator nur den Browsernamen an, keinen Node:

Code:

(sd-browser-add-interrogator "parcel-gbrowser"
    :interrogator-type :border-color
    :interrogator-func 'border-color-red
  );;


------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 04. Mai. 2011 19:45    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
Guten morgen Wolfgang!
Moin moin,
Zitat:

Herzlichen Dank für die aufgebrachte Mühe und die umfassenden Erklärungen/Hinweise.

büdde büdde.
Zitat:
...ich glaube hier fehlen mir noch ein paar Tage ;)

ach.. 
Zitat:
[QUOTE]Trace die funktion mal! Aber nicht erschrecken!!!

...erschreckend was hier abgeht. Da bekomm ich ja ein schlechtes Gewissen  
[/quote]Nun weisst Du endlich warum wir beim 'browser-interrogator' immer gleich "Performance" in die Waagschale werden. Man sollte einfach wissen was man hier tut sonst 'schnarchts'

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 04. Mai. 2011 19:55    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 StephanWörz 10 Unities + Antwort hilfreich

   
Zitat:
Original erstellt von clausb:
Wenn ich das richtig sehe, gibst Du beim Aufruf von sd-browser-add-interrogator nur den Browsernamen an, keinen Node:
Code:

(sd-browser-add-interrogator "parcel-gbrowser"
    :interrogator-type :border-color
    :interrogator-func 'border-color-red
  );;



Stephan ging es wohl eher um die Parameter der Funktion border-color-xxx

IKIT documentation sagt   

Zitat:
supplied function will be passed two parameters, and must accept both.
  • The first parameter is the BrowserNode struct of the object for which the interrogator is to operate on.
  • The second is the name of the browser calling the interrogator.

In der Regel nutzt man den ersten Parameter und leitet hiervon einiges ab (was man halt so braucht) siehe die ersten Zeilen in der Interrogator funtkion  zb. in cvs-print-tree

Code:
(defun cvs-print-tree (node name)
  (declare (ignore name))
  (let* ((objname (BrowserNode-objPname node))
        (path (BrowserNode-objPath node)) 
        (obj (oli:sd-pathname-to-obj path))
        ).... usw...
Den zweiten Parameter ignoriert man geflissentlich.. weil man sehr selten EINEN interrogator fuer 2 Browser verwendet.

In der genannten Funktion sieht man auch das diese mit jedem type von Obj klarkommen muss das als BrowserNode-Struktur herein gereicht wird. In diesem Beispiel unterscheidet man 3 Faelle:
 * 'root'  macht ne Ueberschrift
 * wenn man ein Modeling Object in die Hand bekommt, kann man was rausschreiben
 * ansonsten..  anders

[Diese Nachricht wurde von der_Wolfgang am 04. Mai. 2011 editiert.]

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 05. Mai. 2011 13:37    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


SD_Schiller_Browserviews.lsp.txt


SD_Test_3.lsp.txt

 
Hallo!

Zitat:
Stephan ging es wohl eher um die Parameter der Funktion border-color-xxx

...genau!

Ich habe nun mal begonnen mich mit der Sache auseinander zu setzen.

Ich habe einen Dialog gebaut:

Code:
;*********************************************************************************************
; Dateiname : SD_TEST_3.lsp
; Autor        : Stephan Wörz
; Erstellt      : 04.05.2011
; geändert    :
;*********************************************************************************************


(in-package :Teo)
(use-package :OLI)

;(sd-hide-console-window)                 
;(sd-show-console-window)               
(setf si::*enter-break-handler* nil) 

;;HashTable erzeugen
(setq BrowserObjectColorTable (make-hash-table))

(sd-defdialog 'SD_TEST_3
  :Dialog-title "BrowserMark"
  :toolbox-button t
  :after-initialization (setf HashTableEntryCounter (hash-table-count BrowserObjectColorTable))
 
  :variables
  '(
    (BrowserObject
      :selection  *sd-object-seltype*
      :initial-value nil
      :modifies nil
      :title (sd-multi-lang-string "OBJECT"
                            :german "OBJEKT")
      :multiple-items nil
      :after-input  (progn

                    );;progn
    );;BrowserObject

    (BrowserObjectColor
        :value-type :rgb-color
        :title (sd-multi-lang-string "Color" :german "Farbe")
        :initial-value 16711680
    );;BrowserObjectColor   

(ClearAll 
:toggle-type :wide-toggle
:Push-action
    (progn
(clrhash BrowserObjectColorTable)
    );;progn           
:title (sd-multi-lang-string "CLEAR ALL" :german "ZURÛCKSETZEN")
);;ClearAll

("Optionen")

    (ShowMark
            :title (sd-multi-lang-string "show marks" :german "zeige markierte")
          :toggle-type :wide-toggle
          :value-type :boolean
          :initial-value t
          :after-input
        (progn
           
);progn
 
  );;ShowMark

    (HashTableEntryCounter
            :title (sd-multi-lang-string "table entries" :german "Tabellenelemente")
:value-type :Display-only  
  );;HashTableEntryCounter

  );;variables

:local-functions
'(

);;local-functions

  :Ok-action '(progn
          (setf BrowserObjectSysID  (sd-inq-obj-sysid (sd-pathname-to-obj (sd-inq-obj-pathname BrowserObject))))
          (setf (gethash 'BrowserObjectSysID BrowserObjectColorTable) 'red) 
              );;progn


  :help-action '(sd-display-message HelpText
  :title "Create Thumbnails - Kurzanleitung"
  :Push  "OK!"

  );;sd-display-message

) ;; end defdialog


Eine Frage zu der Hash-Table:
Wo bringe ich die unter? erzeuge ich die in der Datei SD_Schiller_Browserviews.lsp oder im Dialog? Das befüllen der Tabelle tut wohl im moment des Ablaufs, bei erneutem Aufruf gibt mmir die Variable HashTableEntryCounter aber nix zurück??

Die Variable ClearAll soll mir die Hash-Table leerputzen, passt das so??

Code:
(ClearAll 
:toggle-type :wide-toggle
:Push-action
    (progn
(clrhash BrowserObjectColorTable)
    );;progn           
:title (sd-multi-lang-string "CLEAR ALL" :german "ZURÛCKSETZEN")
);;ClearAll


Ich baue den Browserbefehl so auf:

Code:
(sd-browser-add-popup-entry
      "parcel-gbrowser"
      :entry-type  :Push
      :label "Marker"
      :is-entry-visible    'IsVisible_ShowDirect
      :menu-action        'MenuAction_MarkObject
      :new-group t     
);;sd-browser-add-popup-entry

...und hier die :menu-action:

Code:
(defun MenuAction_MarkObject (obj name)
  (declare (ignore name))
  (sd-put-buffer (format nil "Teo::Call_SD_Test_3 :selection ~S complete"(BrowserNode-objPath obj)))
);;defun

...bekomme ich den Dialog auch anders als mit sd-put-buffer aufgerufen?

Zitat:
Wolfgang:
3) der dialog sollte noch ein [ ] aktive - check box haben zum ein/ausschalten

Das möchte ich mit der Variable ShowMark realisieren

...da hab ich noch keinen Ansatz / verstanden was gemeint ist!?!
Ich habee versucht eine Variable mit defVar zu definieren aber dieser Wert steht mir dann nicht mehr zu Verfügung???

Zitat:
Wolfgang:
b) Ausführung
das Hinzufügen der Interrogator Funktion machst Du direkt beim reinladen vom LISP

...beim laden von welchem LISP (Browserfunktionen oder Dialog)??
An welcher Stelle rufe ich diese Funktion auf??

Und dann ist es doch wieder ein Interrogator. Wirkt der dann (warum?) nur auf das gewählte Objekt?

Wie Ihr seht noch jede Menge Fragen...

Ich hoffe Ihr unterstützt mich noch mal.

gruß

Stephan

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

clausb
Ehrenmitglied V.I.P. h.c.



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

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: 05. Mai. 2011 17:57    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 StephanWörz 10 Unities + Antwort hilfreich

Immer langsam mit den jungen Pferden.

Wenn ich den Code richtig interpretiere, willst Du in einer Hashtable die Abbildungen von SysID zu gewünschter Farbe speichern, und der Testdialog dient zum Manipulieren dieser Hashtable. Stimmt das so? Wenn ja, ist auch klar, wie die Lebenszeit der Hashtable ist und wo sie initial angelegt werden muss, nämlich ausserhalb des Testdialogs. (Übrigens heisst das NICHT, dass die Hashtable global sein muss oder auch nur sein sollte. Aber dazu vielleicht später.)

Ich vermute weiterhin, dass Du den Inhalt der Hashtable dann in der Interrogator-Funktion benutzen willst, um die richtige Farbe pro Eintrag herauszufinden:

Code:

(sd-browser-add-interrogator "parcel-gbrowser"
    :interrogator-type :border-color
    :interrogator-func 'border-color-fnc)

(defun node-to-sysid(node)
  ;; weiss ich nicht auswendig, Wolfgang hilf :-)
  )

(let ((default-color "#424242")
  (defun border-color-fnc (node name)
    (gethash (node-to-sysid node) BrowserObjectColorTable default-color)))


Diesen Code kannst Du in der gleichen Datei verwenden, in der die Hashtable bekannt ist.

[Diese Nachricht wurde von clausb am 05. Mai. 2011 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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 05. Mai. 2011 21:10    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
Wie Ihr seht noch jede Menge Fragen...

Ich hoffe Ihr unterstützt mich noch mal.


nööööööööö  :D

Heute nur 'ausmkopf' und theoretisch, und entschuldigt mal die größere anzahl an tip fehlern.

Ist doch schon wunderbar was Du da zusammen gehämmerst hast. Wenn man erstmal 'nen Plan hat und ein paar knackpunkte ueberwunden..

***** ÄrklärBär=an *****

Wir fangen mal hinten an..   bei der farbe des eintrags im Browser.

1) Woher weist der Browser in welcher Farbe er den jeweiligen Eintrage anzeigen soll?

2) Er hat ein browser object in der hand und befragt damit eine eingehängte interrogator funktion: gib mir mal die Farbe für dieses Object. Hier hast Du das Object und ich, BrowserName frage Dich, Funktion X.

3) die Interrogator funktion bekommt ein Browser Object. Nun stellen wir uns mal dumm:

Code:
(defun get-color-for-browser (node name) ;; Karneval-Version
  (declare (ignore name))
  (declare (ignore node)) ;; !!!! in diesem fall
  ;;return
  (format nil "#~6,'0X" (random 16777216))
  )

damit gäbe es einen zufälligen Farbwert.

Mit diesen 3 schritten würde es im browser schon ziemlich bunt werden! Aber in sich ist dies bereits schlüssig und komplett.


4)
Nun wollen wir aber für bestimmte objekte bestimmte Farben anwenden. Deswegen die Hashmap.
Also muss sich get-color-for-browser über den Browser-node aus der Hashtable den Farbwert raussuchen. Ok- auch kein echtes Problem.

5) wie kommt der Farbwert für eine sysid nun in die Hashtable? Das geht nicht ohne Hilfe.
Dafür haben wir einen dialog. Ganz schnöde, grade runter programmiert. Der muss ja schon fast funktionieren.

Ganz dumm hängt dieser (erstmal) in der toolbox. Dort kann er aufgerufen werden, man selektiert ein ~Part und eine Farbe und OK.  Damit ist ein neuer eintrag in der Hashtable.

6) Damits komfortaber wird hängen wir den dialog ins context menu des Browser.. weil , dann können wir direkt das selektierte Object (ÜBER)nehmen. Das ist aber ein optionaler punkt.... es geht auch aus der Toolbox.


Die hashtable definition lassen wir mal im moment 'global' in deinem Package hängen. Wir haben noch genug andere Problem, bzw. DU ;)

***** ÄrklärBär=aus *****

_______________________________________________________________

nun ein paar dinge, die mir aufgefallen sind:

Code:
(setf (gethash 'BrowserObjectSysID BrowserObjectColorTable) 'red)

Warum quotest Du hier? BrowserObjectSysID ist ein String.. und damit der Key fuer die Hashtable. ROT...   und da nehmen wir doch lieber die dafür vorgesehene Farbe: BrowserObjectColor; das ist eine farbe und damit gut. Damit's beim Auswerten performanter wirde sollten wir die farbe eine String verwandeln mit 6 hexziffern also "#FF0000" für rot, "00FF00" fuer grün..  (formal nil "#~6,'0X" (sd-color-to-sd ....)))) in etwa
Code:
(setf (gethash BrowserObjectSysID BrowserObjectColorTable)(formal nil "#~6,'0X" (sd-color-to-sd BrowserObjectColor)))

Fein..   ob die farbe tatsächlich RGB-triple ist oder ein INT wert im dialog habe ich nicht im Kopf.

Der Put-buffer:

Code:
(defun MenuAction_MarkObject (obj name)
  (declare (ignore name))
  (sd-put-buffer (format nil "Teo::Call_SD_Test_3 :selection ~S complete"(BrowserNode-objPath obj)))
);;defun

a) wann imer Du eine aktion im browser rufen willst: sd-put-buffer , denn dann wird es recorded.

b) schlecht is das "complete" in dem ge-put-buffered. Denn das schliest ja deine dialog direkt wieder.
b1) ok.... wenn man NUR eine farbe haben will passt das
b2) man kann aber auch den dialog interaktive werden lassen, Das object ist schon selktier, man wählt (nur) noch eine farbe aus und OK


die dialog variable 'ShowMark' muesste in after-input noch eine 'globale' variable setzen (setq *show-browser-entries-with-defined-color* ShowMark).  Die interrogator-funktion  wuerde diesen zum globalen on-off abfragen.

eigentlich fehlt nicht mehr viel!!!

[Diese Nachricht wurde von der_Wolfgang am 05. Mai. 2011 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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 05. Mai. 2011 21: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 StephanWörz 10 Unities + Antwort hilfreich

WO WELCHER CODE -- ud wie ist die Reihenfolge.

vorschlag : alles mal in eine Datei.. denn alles hat miteinander verbindung. Du kannt eher aus 'schiller.lsp' heraus noch mal nen (load "BrowserObjectColor.lsp") aufrufen.

BrowserObjectColor.lsp:

Code:

;; globale definitionen
;;  die hashtable
(defvar *show-browser-entries-with-defined-color* T) ;später NIL.. aber zum testen T
....

;; fuellen der Hashtable:
(sd-def-dialog..)
;; dialog vom browser aufrufen:
(defun MenuAction_MarkObject (obj name) ....
(sd-browser-add-popup-entry .....
;;; -->>> hint definiere erst die funktion DANN den popup-entry aufruf

;; lesen der Hashtable
(defun border-color-fnc (node name)
(unless *show-browser-entries-with-defined-color*
    (let ((....
        ;; get color from HT
        )))
  ))
;; einhaengen    !!!! HIER MUSS DIE FUNCTION DEFINIERT SEIN!!!
(sd-browser-add-interrogator "parcel-gbrowser"
    :interrogator-type :border-color
    :interrogator-func 'border-color-fnc)



;; that's it!

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 05. Mai. 2011 21: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 Nur für StephanWörz 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von clausb:
Immer langsam mit den jungen Pferden.
Claus, wir sind nicht mehr jung   :( 
Zitat:
Code:
(defun node-to-sysid(node)

wolfgang-hilf is unbound

Na, wie das geht schrieb ich doch schon oben... siehe "cvs-print-tree"   

[Diese Nachricht wurde von der_Wolfgang am 05. Mai. 2011 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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 05. Mai. 2011 21:38    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 StephanWörz 10 Unities + Antwort hilfreich

Code:
(defun border-color-fnc (node name)
  (declare (ignore name))
  (when *show-browser-entries-with-defined-color*
   (let* ((obj (oli:sd-pathname-to-obj (BrowserNode-objPath node)))
          (sysid)
          )
     (when obj
       (progn
         (setq sysid (sd-inq-obj-sysid obj))
         ;; (when sysid    ware paranoija ;-)
         (gethash sysid BrowserObjectColorTable)
         )))
   ;; in case of nothing found function returns NIL ->  browser choose the DEFAULT color     
   ))
nur geschrieben, net getestet.

[Diese Nachricht wurde von der_Wolfgang am 05. Mai. 2011 editiert.]

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 06. Mai. 2011 11:03    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


SD_Schiller_Browserviews.lsp.txt

 
und nochmals Danke für die umfassende Hilfe 

Folgendes habe ich gemacht, ist mir noch nicht klar:

Ich habe ALLES in das eine LISP gepackt.

Zitat:
6) Damits komfortaber wird hängen wir den dialog ins context menu des Browser.. weil , dann können wir direkt das selektierte Object (ÜBER)nehmen. Das ist aber ein optionaler punkt.... es geht auch aus der Toolbox.


Das bekomme ich nicht gebacken - der node WIRD NICHT übernommen???

Code:
  (sd-put-buffer (format nil "BrowserMark :selection ~S "(BrowserNode-objPath obj)))

Zitat:
b2) man kann aber auch den dialog interaktive werden lassen, Das object ist schon selktier, man wählt (nur) noch eine farbe aus und OK

...wie geht denn das??

Dann passt vermutlich mit der hashtable was nicht! Wenn ich im Dialog eine Farbe wähle, wird diese in die table geschrieben. Die Farbe steht in der border-color-fnc dann aber nicht mehr zur Verfügung??

Zitat:
clausb:
Wenn ich den Code richtig interpretiere, willst Du in einer Hashtable die Abbildungen von SysID zu gewünschter Farbe speichern, und der Testdialog dient zum Manipulieren dieser Hashtable. Stimmt das so? Wenn ja, ist auch klar, wie die Lebenszeit der Hashtable ist und wo sie initial angelegt werden muss, nämlich ausserhalb des Testdialogs. (Übrigens heisst das NICHT, dass die Hashtable global sein muss oder auch nur sein sollte. Aber dazu vielleicht später.)

...hab ich ausserhalb von "sd-defdialog" ???

Zitat:
Fein..  ob die farbe tatsächlich RGB-triple ist oder ein INT wert im dialog habe ich nicht im Kopf.

Zitat:
IKit: By default the selection of a color generates an integer.

...schreibe ich so in die Hashtable:

Code:
(setf (gethash BrowserObjectSysID BrowserObjectColorTable)(format nil "#~6,'0X" BrowserObjectColor))

Verstehen tu ich die Formatanweisung aber nicht 

Zitat:
IKit sagt: Interrogator-type: :border-color
Interrogator-func: function which accepts two parameters and returns a "#rrggbb" Color name {STRING}

...passt das zusammen?

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

clausb
Ehrenmitglied V.I.P. h.c.



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

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: 06. Mai. 2011 11:21    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 StephanWörz 10 Unities + Antwort hilfreich

Mir ist nicht ganz klar, ob hinter BrowserObjectSysID letztlich ein String steckt. Wenn ja, musst Du die Hashtable mit einer entsprechenden Vergleichsfunktion anlegen, die auf Strings passt, beispielsweise:

Code:

(setq BrowserObjectColorTable (make-hash-table :test 'equal))

Allgemein gesprochen würde ich Dir empfehlen, statt aller losen Enden gleichzeitig erst einmal Teilprobleme anzugehen. Ich habe den Eindruck, Du verwirrst Dich gerade selbst :-)

[Diese Nachricht wurde von clausb am 06. Mai. 2011 editiert.]

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

clausb
Ehrenmitglied V.I.P. h.c.



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

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: 06. Mai. 2011 13:08    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 StephanWörz 10 Unities + Antwort hilfreich

Noch ein Nachtrag. Deine border-color-fnc sieht wohl gerade so aus:

Code:

(defun border-color-fnc (node name)
(declare (ignore name))
(progn 
  (when *show-browser-entries-with-defined-color*
  (let* ( (obj (oli:sd-pathname-to-obj (BrowserNode-objPath node)))
          (BrowserObjectSysID)
          )          
    (when obj
      (progn
        (setq BrowserObjectSysID (sd-inq-obj-sysid obj))        
        (gethash BrowserObjectSysID BrowserObjectColorTable)
        (display (format nil "Farbwert in Hashtable [border-color-fnc] ~40T: ~A~%" (gethash BrowserObjectSysID BrowserObjectColorTable))) 
      );;progn
    );;when obj
  );;let*
  ;; in case of nothing found function returns NIL ->  browser choose the DEFAULT color     
);;when
);;progn
);;defun border-color-fnc

Vor lauter redundanten progns, lets, Klammern et cetera hast Du vielleicht übersehen, dass die Funktion keinen ordentlichen Rueckgabewert hat - sondern immer das zurückliefert, was (display) zurückgibt (vermutlich immer NIL).

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 06. Mai. 2011 20:37    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von clausb:
Noch ein Nachtrag. Deine border-color-fnc sieht wohl gerade so aus:
Code:

(defun border-color-fnc (node name)
...
);;defun border-color-fnc


Vor lauter redundanten progns, lets, Klammern et cetera hast Du vielleicht übersehen, dass die Funktion keinen ordentlichen Rueckgabewert hat - sondern immer das zurückliefert, was (display) zurückgibt (vermutlich immer NIL).

keinen ordentlichen rückgabe wert MEHR hat.. ja der display ist hier sehr kontraproduktiv.

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 12. Mai. 2011 14:58    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


Marker.png


SD_Schiller_Browserviews.lsp.txt

 
Hallo miteinander!

...das ganze läuft jetzt soweit     

Ich habe den Dialog jetzt doch weggelassen und setzte die Markierungen ohne Farbauswahlmögichkeit direkt. Es lässt sich nun eine gewählte Markierung wieder wegnehmen. Auch das wegnehmen ALLER Markierungen ist möglich.

So hat sich der Boss das vorgestellt.

Ein Problem ist jetzt beim testen aber aufgetaucht:

Wird eine Baugruppe markiert, welche in Ihrer Struktur Pseudoordner hat, werden diese mitmarkiert   

Pseudoordner haben doch keine SysID??? Wie kann ich mich davor schützen???

Herzlichen Dank nochmals für die Unterstützung bis hierher!+

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 12. Mai. 2011 21:42    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 StephanWörz 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von StephanWörz:
...das ganze läuft jetzt soweit           

Ein Problem ist jetzt beim testen aber aufgetaucht:

Wird eine Baugruppe markiert, welche in Ihrer Struktur Pseudoordner hat, werden diese mitmarkiert       

Herzlichen Dank nochmals für die Unterstützung bis hierher!+


bitte, gerne.
....

Code:
       :is-entry-visible    'IsVisible_ShowDirect ;; -> nur wenn Objekt ein Teil oder eine Baugruppe ist
hmmm.. wie FÄNDE diese funktion heraus ob es ein pseudo Ordner ist.. aber oder, so ganz aus dem kopf.. verstehe ich es nicht. ..

Na wenn die keine sysid haben dann darfst Du auch keinen eintrage in der Hashtable machen..

dann kannst Du es zumindest bei der Darstellung vermeiden:

also

Code:
(when BrowserObjectSysID
  (setf (gethash BrowserObjectSysID BrowserObjectColorTable).. ratata
  )
ich würde MenuAction_MarkObject_BLUE/YELLOW/RED auf eine funktion mappen die sich um die details kümmert.:
Code:
(defun MenuAction_MarkObject_BLUE (obj name) (MenuAction_MarkObject_COLOR obj "#4276F0"))
(defun MenuAction_MarkObject_RED (obj name) (MenuAction_MarkObject_COLOR obj "#FF0000"))
(defun MenuAction_MarkObject_YELLOW (obj name) (MenuAction_MarkObject_COLOR obj "#FFFF00"))

(defun MenuAction_MarkObject_color (obj color)
  object-sys-id
  (when .. object-sys-id
  ....  object-sys-id   color.. ))
  )


und wenn du schon HARDCODIERTE farben nimmst.. dann vermeide das format nil an der Stelle (performance!!)
----------------------------------------------------------------
edit-13-mai-2011:

Ah.. sorry..    das ist ja die interaktive MARKIER funktion das ist der Hinweis auf performance natuerlich nicht noetig. Performance ist in der Interrogator funktion gefragt. Aber das hast du ja mittlerweile eine speed-version vom Claus (siehe nextes Posting)

[Diese Nachricht wurde von der_Wolfgang am 13. Mai. 2011 editiert.]

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

clausb
Ehrenmitglied V.I.P. h.c.



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

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: 12. Mai. 2011 23:12    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 StephanWörz 10 Unities + Antwort hilfreich

Glückwunsch! :-D

Kompaktere und leicht schnellere Version von border-color-fnc:

Code:

  (defun border-color-fnc (node name)
    (when *show-browser-entries-with-defined-color*  
      (let ((obj (oli:sd-pathname-to-obj (BrowserNode-objPath node))))
        (when obj
          (gethash (sd-inq-obj-sysid obj) BrowserObjectColorTable)))))

Erläuterungen:


  • "(declare (ignore name))" bringt nur was, wenn Du Deinen Code durch den Lisp-Compiler jagst.
  • (when) impliziert ohnehin ein (progn) - selbst ein (progn) einzufügen, ist also redundant.
  • Gute alte Lisp-Regel: "Treat setf (and setq) as if there were a tax on its use" (http://www.cs.gmu.edu/~sean/lisp/LispTutorial.html) - (setq) und (setf) in Lisp-Code sind oft ein Hinweis auf Verbesserungsmöglichkeiten.

[Diese Nachricht wurde von clausb am 13. Mai. 2011 editiert.]

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 16. Mai. 2011 08:09    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


SD_Schiller_Browserviews.lsp.txt

 
Zitat:
Kompaktere und leicht schnellere Version von border-color-fnc:

Code:
--------------------------------------------------------------------------------

  (defun border-color-fnc (node name)
    (when *show-browser-entries-with-defined-color* 
      (let ((obj (oli:sd-pathname-to-obj (BrowserNode-objPath node))))
        (when obj
          (gethash (sd-inq-obj-sysid obj) BrowserObjectColorTable)))))

--------------------------------------------------------------------------------


...hab ich direkt so übernommen. Hat auf Anhieb funktioniert :D  - Danke!

Zitat:
Code:
--------------------------------------------------------------------------------
      :is-entry-visible    'IsVisible_ShowDirect ;; -> nur wenn Objekt ein Teil oder eine Baugruppe ist
--------------------------------------------------------------------------------

hmmm.. wie FÄNDE diese funktion heraus ob es ein pseudo Ordner ist.. aber oder, so ganz aus dem kopf.. verstehe ich es nicht. ..
Na wenn die keine sysid haben dann darfst Du auch keinen eintrage in der Hashtable machen..

dann kannst Du es zumindest bei der Darstellung vermeiden:

also

Code:
--------------------------------------------------------------------------------
(when BrowserObjectSysID
  (setf (gethash BrowserObjectSysID BrowserObjectColorTable).. ratata
  )
--------------------------------------------------------------------------------


...da komm ich immer noch nicht mit. Ich hab die Abfrage mal eingebaut. Aber bei der Auswahl eines Pseudoordners ist der Menueintrag ja gar nicht sichtbar?! Wird ein Teil oder eine Bgr. markiert, dann bekommen ALLE Pseudordner UNTER dem gewählten Objekt immer noch die gleiche Markierung   

Wie kommt die Browserabfrage dazu meine Pseudoordner farbig zu markieren - eine Frechheit ist das 
In der Hashtable dürfte doch für die Pseudoordner kein Eintrag zu finden sen... 

Code:
;;  Funktion zum auslesen der Hashtable in abhängikeit von  *show-browser-entries-with-defined-color*
  (defun border-color-fnc (node name)
    (when *show-browser-entries-with-defined-color* 
      (let ((obj (oli:sd-pathname-to-obj (BrowserNode-objPath node))))
        (when obj
          (gethash (sd-inq-obj-sysid obj) BrowserObjectColorTable)
          );;when
        );;let
      );;when
    );;defun

;;***************************************************************************
;;    BROWSERABFRAGE !!! wird permanent ausgeführt!!!                      *
;;***************************************************************************

(sd-browser-add-interrogator "parcel-gbrowser"
:interrogator-type :border-color
:interrogator-func 'border-color-fnc
);;sd-browser-add-interrogator


Und noch eine Frage:

Wenn ich (alle Markierungen lösche) muss ich den Browser einmal zu-  und wieder aufklappen damit er aktualisiert wird. Kann ich das im Programm auslösen??
Ich hab  da mal getrickst indem ich die Detailansicht aktiviere und gleich wieder deaktiviere - das tut soweit, geht aber bestimmt eleganter...

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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 17. Mai. 2011 22:39    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
Wie kommt die Browserabfrage dazu meine Pseudoordner farbig zu markieren - eine Frechheit ist das  
In der Hashtable dürfte doch für die Pseudoordner kein Eintrag zu finden sen...  

Guck dir mal den objpath an wenn da so ein peudoorder dabei ist. vielleicht wird da 'einfach' ein (erstes) element des Pseudo ordners geliefert?

Kontrolliere:
2 assemblles, 2 parts, 1 pseudo order -> wie lang ist die hashtable? wenn 5, dann: wie ist der inhalt?

wenn länge = 4: welches obj geht 2 mal rein um die Farbe zurueckzuliefern.

Wenn du die assemblies grün und die parts blau färbst: welche farbe hat dann der Pseudoordner?

Zitat:
wenn ich (alle Markierungen lösche) muss ich den Browser einmal zu-  und wieder aufklappen damit er aktualisiert wird. Kann ich das im Programm auslösen??
ich meine der browser hat auch ein refresh event. das muesstes dann wohl mal feuern..  oder aber: (sd-browser-exec-cmd '..' :REFRESH-TREE) -> Force a redraw of the browser tree. This will cause all interrogators to be executed ----- sollte passen 

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

StephanWörz
Mitglied
Maschinenbautechniker


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

Beiträge: 770
Registriert: 11.10.2000

Xenon 3.2GHz
24GB Ram
nVidia Quadro 4000
OSDM 17M050 & 18.1
SWX 2008
PHOENIX V10

erstellt am: 18. Mai. 2011 06:49    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


Markieren.PNG

 
Guten morgen!

 

Zitat:
Wenn du die assemblies grün und die parts blau färbst: welche farbe hat dann der Pseudoordner?


...der Pseudoordner wird immer in der Farbe des Besitzers der im Pseudordner zusammengefassten Objekte gezeigt!

Wenn die "Testbaugruppe" markiert wird, werden die Pseudoordner auch markiert! --> Die Hashtable hat dann 1 Eintrag!

Wenn die Pseudoordner deaktiviert werden funktioniert alles tadellos (möchte aber meine Pseudoordner   )

[Diese Nachricht wurde von StephanWörz am 18. Mai. 2011 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: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 19. Mai. 2011 21:40    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 StephanWörz 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StephanWörz:
...der Pseudoordner wird immer in der Farbe des Besitzers der im Pseudordner zusammengefassten Objekte gezeigt!

bau mal in der interrogator func (vorüberrgehend!) eine pprint des objpath ein, und trace dat dingens..  Wenn Du dann root zu und AUF klappst.. muessen wir sehen was da als Objpath verwendet wird um eine sysid zu verwenden.

------------------
Seamonkey Firefox Thunderbird ● OSD Hilfeseite (de) / help page (en)NotePad++

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

holt
Mitglied
Systembetreuer CAD


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

Beiträge: 713
Registriert: 07.08.2003

Corei7 3770K, Win7-64, 16GB
PNY Quadro 2000K
CoCreate Modeling 18.10
CoCreate Drafting 18.10
CoCreate ModelManager 18.10

erstellt am: 21. Jun. 2011 15:40    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 StephanWörz 10 Unities + Antwort hilfreich

Hallo,

Zitat:
Original erstellt von clausb:
  • Gute alte Lisp-Regel: "Treat setf (and setq) as if there were a tax on its use" (http://www.cs.gmu.edu/~sean/lisp/LispTutorial.html) - (setq) und (setf) in Lisp-Code sind oft ein Hinweis auf Verbesserungsmöglichkeiten.

Habe ich das richtig verstanden:
Lieber in einem

Code:
(let ((var-a (irgendwas)) (var-b (etwasanderes)))
...
)

als

Code:
(setq var-a (irgendwas))
(setq var-b (etwasanderes))
Oder liege ich falsch mit meiner Interpretation?

------------------
Gruß aus dem Salzkammergut

Thomas

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)2023 CAD.de | Impressum | Datenschutz