| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Dichte unabhängig von den Systemeinheiten setzen (1440 mal gelesen)
|
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 10:08 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen! Wir haben folgendes Problem beobachtet: Bei uns sind die Systemvorgaben für die Masse = g und für die Länge = mm. Nun verwenden wir ein Makro um die Dichte und Farbe für Teile zu setzen. Soweit so gut! Allerdings passt das Ganze nicht mehr wenn ein Anwender temporär die Systemvorgaben ändert (häufig auf Kilogramm und Meter) und dann das Makro ausführt. Es werden dann statt 0.00785 g/mm3 entsprechend 0.00785 kg/m3 gesetzt. Beim zurücksetzen oder beim Neustart (g und mm) hat das Teil dann eine Dichte von 0.0000000078 g/mm3?? Frage: Gibt es eine Möglichkeit beim setzen der Dichte die entsprechenden Einheiten (g/mm3) mitzugeben???
Hier die Funktion welche die PartProps setzt:
(defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (if (sd-inq-obj-parent-contents-read-only-p Teil) ;; wenn Besitzer schreibgeschützt ;;Then... (progn (part_prop :the_part Teil :base_color Teilefarbe :done :BASE_EDGE_COLOR 0 :done :base_trans Teiletransparenz :base_density Teiledichte );;part_prop );;progn ;;Else.... (progn (part_prop :the_part Teil :base_color Teilefarbe :done :COLOR :OFF ;:done ;; Exemplarfarbe :OFF = KEINE >> setzt auch Exemplarkantenfarbe zurück!! :BASE_EDGE_COLOR 0 :done :base_trans Teiletransparenz :trans :none :base_density Teiledichte :density :OFF );;part_prop );;progn );;if );;SetPartProps
------------------ ...viele Grüße Stephan
[Diese Nachricht wurde von StephanWörz am 05. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
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. Okt. 2017 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz:Code: (defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (if (sd-inq-obj-parent-contents-read-only-p Teil) ;; wenn Besitzer schreibgeschützt .... );;SetPartProps
Woher soll deine funktion denn wissen, welche unit verwendet wird? part_prop ist eine action routine. Also gehe ich davon aus, das Du diese Funktion aus einem anderem Dialog aufrufst, evtl. sogar mir einem sd-call-cmds gekapselt? Wie sieht der Aufruf aus, und wo kommt die zu setzende Dichte her? Fuer lenght und angle gibt es ja entsprechende variable types, die im dialog generator definiert sind. Diese zeigen im UI dann das "richtige" an (also user units), intern haben sie aber immer den value in system units. Fuer Dichte gibt es so etwas nicht (also nehme ich mal an es ist einfach eine :Positive-number in deinem Dialog) Ich vermute nun arg, das du zwischen dieser dialog variable und dem Aufruf deiner Funktion noch ein (sd-user-to-sys-units unit-type value), spendieren muesstest. mit :density als unit-type, weil dein Eingabe wert ja UNIT behaftet ist. Aber nun habe ich schon zu viele Annahmen getroffen. Mit der Funktion alleine kann man deine Frage schlecht beanworten. Da ist das drum rum doch etwas erforderlich. ------------------- vielleicht simulierst Du Dir mal eine :Positive-length variable mit hilfe einer :number variable + check funktion + unit conversion. HTH - - - - - - - - - - - - - - - - - - - - - - - - - - PS: fuer Sourcecode gibt es den UBB-Code : [ code ] ... [/ code ] ------------------ ● Firefox ESR ● Java 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
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. Okt. 2017 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
eigentlich muesste das Thema sein: Dichte unabhängig von den Benutzereinheiten (user units) setzen -- oder? so in etwa:
Code: :variables ..... (dichte :value-type :Positive-number :initial-value (sd-sys-to-user-units :Density 0.00785) ;proposals auto-add-proposals usw :Prompt-text "Alles noch ganz dicht, hoffentlich" :after-input (setq densityNew (sd-user-to-sys-units :Density dichte)) ) (densityNew :initial-value 0.00785) ;; hart wir Kruppstahl ....:Ok-action '(sd-call-cmds (SetPartProps myPart colorNew densityNew transparancyNew)) ....
just coded and 100% untested[edit]Aenderungen hervorgehoben[/edit] [Diese Nachricht wurde von der_Wolfgang am 06. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 07:10 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen! Also aufgerufen wird das Ganze so: Code: (sd-defdialog 'SD_SetPartProp_Baustahl :Dialog-control :sequential :toolbox-button nil :variables '( (prt :value-type :Part :multiple-items t :modifies nil :Prompt-text "STAHL - Teil(e) angeben" :next-variable 'prt ); end prt ); end variables :Ok-action '(dolist (Teil prt) ;; SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (BASICTOOLS::SetPartProps Teil (sd-rgb-to-color 0.7,0.9,1) 0.00785 0) );;dolist ) ;; sd-defdialog
Die aufgerufene Funktion wird bei Start von Modeling geladen (in-package :BASICTOOLS).
------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 06. Okt. 2017 08:07 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Hallo Stephan, ich hätte auch noch mal ne kurze Frage. Weist ihr immer Stahl zu, weil sonst kann man das ja auch grundsätzlich festsetzen unabhängig von den Einheiten. Oder habt ihr dieses Programm mehrmals für verschiedene Materialien? ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 09:11 <-- editieren / zitieren --> Unities abgeben:
...wir weisen jedem Bauteil die dem Material entsprechende Dichte und eine von uns definierte Farbe zu! Mit den Buttons in der Menuleiste wird die o.g. Funktion bedient. Wir haben dann auch noch das LISP im Anhang im Einsatz. ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 09:26 <-- editieren / zitieren --> Unities abgeben:
...die Funktionalität hinter den Buttons wird in der SD_SetPartProperties.lsp definiert. ...die Funktion SetPartProbs wird in der 01_BasicTools.lsp definiert (und noch viel mehr ) Die Buttons werden in der sd_avail_cmds.cmd definiert
Code: ("SD_SetPartProp_Baustahl" :title "Baustahl" :action "SD_SetPartProp_Baustahl" :Description "... setzt Teileigenschaften fÏr Baustahl" :image (format nil "~a/SD_Stahl.bmp" (MEI::GETENV "SCHILLERICONDIR")) :ui-behavior :DEFAULT)
Wir starten mit einer Batchdatei CadStart.bat . Hier werden Verzeichnisse gesetzt (SCHILLERICONDIR, ...), z.T. Useranpassungen gelöscht und das Modeling gestartet. Vielleicht interessiert sich ja jemand dafür.
------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 06. Okt. 2017 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
so, habe da mal was eingebaut, wenn ihr bei den Einheiten jetzt nur KG und Gramm habt, bei Pounds oder sowas muss noch mehr gemacht werden. sind die beiden when Funktionen im "SetPartProps" Ich habe es getestet, bei mir klappt es... Code:
(defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (when (eq :KG (first (sd-inq-mass-units))) ;; hinzu gekommen (setq Teiledichte (* 0.001 Teiledichte) ) ;; hinzu gekommen ) ;; hinzu gekommen (when (eq :G (first (sd-inq-mass-units))) ;; hinzu gekommen (setq Teiledichte (* 1 Teiledichte) ) ;; hinzu gekommen ) (if (sd-inq-obj-parent-contents-read-only-p Teil) ;; wenn Besitzer schreibgeschützt ;;Then... (progn (part_prop
------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
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. Okt. 2017 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Stephan, vielen Dank fuer die Offenlegung! _____________________________________________________ ein mehrfaches (when .. ) ist eher ein case oder eine cond-ition. Zudem beruecksichtigst du (Peter) doch noch nur die Massen-Einheit und nicht die Laengen-Einheit. Aber beide sind wichtig. Ich wuerde alle defun's immer so schreiben das diese in system units arbeiten. Dann braucht man sich nicht drum zu kuemmern und kann Funktionen von hier und da aufrufen. Der Aufrufer (oft ein sd-defdialog) moege sich dann um unit spezifische Dinge kuemmern. Aber, gut, wenns denn so sein soll, warum dann nicht: Code: (defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (setq Teiledichte (sd-user-to-sys-units :Density Teiledichte)) ;; ++ (if (sd-inq-obj-parent-contents-read-only-p Teil) ;;Then... (progn (part_prop
Wobei ich das Veraendern von Eingabeparameter (hier : Teiledichte) nicht sehr mag. Aber das ist persoenlicher Programmierstil. Mit
Code: (setq faktor (/ 1 (sd-user-to-sys-units :mass 1)))
wuerde man direkt an den Umrechnungsfaktor fuer die Masse kommen. Aber warum den Faktor bestimmen, wenn die oli-funktion die ganze Rechnung macht? ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 06. Okt. 2017 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Hallo Wolfgang, ich würde mich programmiertechnisch auch nicht auf eine Stufe mit dir stellen und mit Sicherheit ist mein Befehl verbesserungsfähig. Die Länge spielt natürlich auch eine Rolle, aber mir hat es gereicht das ich das Gewicht erst mal hinbekommen habe. Ich sehe mich als Programmieranfänger und freue mich wenn ich eine Lösung gefunden habe. ------------------ Gruß Peter [Diese Nachricht wurde von Greskamp am 06. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 12:04 <-- editieren / zitieren --> Unities abgeben:
|
StephanWörz Mitglied Maschinenbautechniker
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: 11. Okt. 2017 14:33 <-- editieren / zitieren --> Unities abgeben:
Hallo!
Code:
(sd-user-to-sys-units unit-type value)
Description:Converts a value from user units, to the current internal system units (mm, rad, g). Frage: Sind die internen Systemeinheiten immer mm, rad, g ?? Code: (defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) (setq Teiledichte (sd-user-to-sys-units :Density Teiledichte)) ;; ++ (if (sd-inq-obj-parent-contents-read-only-p Teil) ;;Then... (progn (part_prop
Hat bei mir nicht funktioniert! beim wechseln der Einheiten ändert sich auch der Wert bei Teileigenschaften>>Material ??? Oder zeigen die Teileeigenschaften immer in Benutzereinheiten an?? Ist es nicht so dass ein Code: (setq Teiledichte (sd-user-to-sys-units :Density 0.0079))
Auf jeden Fall dann einen Wert mit der Einheit g/mm3 liefern sollte?? ...irgendwie bin ich noch nicht durch. ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
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: 11. Okt. 2017 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz: Frage: Sind die internen Systemeinheiten immer mm, rad, g ??
ja - man koennte sich ja sonst gar nimmer nie auf nix drauf verlassen. Zitat: ... zeigen die Teileeigenschaften immer in Benutzereinheiten an??
ja - das ist USER Interface und da werden die unit behafteten Werte mit den user units angezeigt (bzw. wenn nicht (beispielsweise Ausgabe in die Displaybox) sollte die Unit mit ausgegeben werden) Zeige dir die Teileeigenschaften immer wieder an und wechsel die Einheiten. Kannst ja auch mal 0.5mm als Laengen Einheit verwenden. Zitat: Ist es nicht so dass ein
Code: (setq Teiledichte (sd-user-to-sys-units :Density 0.0079))
Auf jeden Fall dann einen Wert mit der Einheit g/mm3 liefern sollte??
spendiere ein (pprint Teiledichte) davor und dahinter und spiele dann im UI an den einheiten rum. Beachte aber, das Du bei dem Aufruf auch wirklich user units hineinstopfst! Ein Code: (pprint (oli:sd-user-to-sys-units :Density (oli:sd-user-to-sys-units :Density 0.0079)))
liefert nur in einem Fall was G'scheits (nemmlich wenn die user units genau die system units sind). Zitat: ...irgendwie bin ich noch nicht durch.
Schulterklopf, du schaffst das schon, heute is doch sowieso der schoenste Mittwoch der Woche! ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 10:11 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, mit der ganzen EinheitenHinUndHerSchieberei bin ich nicht klar gekommen. ich habe das jetzt dahingehend gelöst dass ich mir die aktuellen UserUnits merke, auf SysUnits umstelle und dann die UserUnits wieder herstelle... Code: (defun SetPartProps (Teil Teilefarbe Teiledichte Teiletransparenz) ;Aktuelle Einheiten auslesen (setq LenghtUnit (first (sd-inq-length-units))) (setq LenghtScale (SECOND(sd-inq-length-units))) (setq MassUnit (first (sd-inq-mass-units ))) (setq MassScale (SECOND(sd-inq-mass-units ))) (setq AngleUnit (first (sd-inq-angle-units ))) (setq AngleScale (SECOND(sd-inq-angle-units ))) ;Auf Systemeinheiten stellen (units 1.0 :MM ) (units 1.0 :G ) (units 1.0 :DEG) (if (sd-inq-obj-parent-contents-read-only-p Teil) ;; wenn Besitzer schreibgeschützt ;;Then... (progn (part_prop :the_part Teil :base_color Teilefarbe :DONE :BASE_EDGE_COLOR 0 :DONE :base_trans Teiletransparenz :base_density Teiledichte );;part_prop );;progn ;;Else.... (progn (part_prop :the_part Teil :base_color Teilefarbe :DONE :COLOR :OFF :BASE_EDGE_COLOR 0 :DONE :base_trans Teiletransparenz :trans :none :base_density Teiledichte :Density :OFF );;part_prop );;progn );;if ;Auf Benutzereinheiten zurückstellen (units LenghtScale LenghtUnit) (units MassScale MassUnit ) (units AngleScale Angleunit ) );;SetPartProps
Das hat auch den Vorteil dass ich mich nicht auch noch um den BrowserView kümmern muss. Danke für Eure Unterstützung! ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
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. Okt. 2017 13:40 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz: mit der ganzen EinheitenHinUndHerSchieberei bin ich nicht klar gekommen.
Das ist aber jetzt echt schade. Zitat: Das hat auch den Vorteil dass ich mich nicht auch noch um den BrowserView kümmern muss.
Na wenn diese Spalte eine Darstellung in FIXER Einheit sein soll, dann muss die entsprechende Interrogator Funktion die Umrechnung von sys-units auf diese Einheit mit einem fixen Faktor durchfuehren. Das ABFRAGEN sollte aber vollkommen unabhaengig vom SETZEN sein!! ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Werkstudententätigkeit im Bereich Elektrik/Elektronik Systemintegration & -steuerung MB.OS ab Juni 2024 | Life is always about becoming? Im Leben geht es darum, sich auf eine Reise zu begeben, um die beste Version unseres zukünftigen Selbst zu werden. Während wir Neues entdecken, stellen wir uns Herausforderungen, meistern sie und wachsen über uns hinaus.
Bewerben Sie sich bei Mercedes-Benz und finden Sie den Aufgabenbereich, in dem Sie Ihre Talente individuell entfalten können. Dabei werden Sie von visionären Kolleginnen und Kollegen unterstützt, die Ihren Pioniergeist teilen.... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
StephanWörz Mitglied Maschinenbautechniker
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. Okt. 2017 14:17 <-- editieren / zitieren --> Unities abgeben:
...das abfragen ist unabhängig vom setzen und sieht so aus: Code:
(defun browser-display-contents-density (node) (let ((node-item (sd-pathname-to-obj (BrowserNode-objPath node)))) (if (sd-inq-part-p node-item) ;;Then... (progn (oli:sd-num-to-string (* 1000 (oli::sd-sys-to-user-units :Density (sd-inq-part-density node-item :contents)))) );;progn ;;Else... "n/a" );;if );let );;defun
Im Anhang die Komplette Definition der Browserviews. Es wird zwar auf spezielle Attribute zugegriffen, aber vielleicht interessiert sich ja jemand dafür... Wir haben hier auch die Möglichkeit Browserteile einzufärben. ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |