| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Aussenmasse eines Teiles ausgeben (1979 mal gelesen)
|
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 18. Mrz. 2004 14:32 <-- editieren / zitieren --> Unities abgeben:
Hallo ! Hat schon jemand mal ein LISP geschrieben, welches die Aussenmasse eines Teiles ueber SD-INQ-EXACT-BOX ausgibt ? Als Ausgabe sollte dann z.B.: 100x50x20 ausgegeben werden - abgestuft vom groessten zum kleinsten Mass. Nach Moeglichkeit bei einer Welle das ganze so: ø20x100 - zuerst den Durchmesser und dann die Laenge. Bin gerade selbst dabei sowas zu "basteln", komme aber nicht so recht weiter ! Danke im Voraus... Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klaus Lörincz Mitglied Consultant
Beiträge: 533 Registriert: 06.08.2003 OSD M = aktuell OSD D = aktuell OS M = aktuell auf WIN und HP-UX
|
erstellt am: 19. Mrz. 2004 07:53 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Rainer, Ich habe nun keine Ahnung mit welcher Funktionalität du in oli::sd-inq-exact-box nicht klar kommst?? Mit dem Resultat ?? Mit der Eingabe ?? Nun ein Beispiel: Eine Teil "/T1" - Maße (setf result (sd-inq-exact-box Teil als Objekt in die Anfrage (sd-pathname-to-obj "/T1") Die X-Richtung 0,0,1 Die Y-Richtung 1,0,0 Wo wird gemessen :source-space :global Wohn wird das Ergebniss geschrieben :dest-space :global) ) PS: wenn mann an einem Teil operiert kann mann ja auch (sd-inq-exact-box Teil als Objekt in die Anfrage (sd-pathname-to-obj "/T1") Die X-Richtung 0,0,1 Die Y-Richtung 1,0,0 Wo wird gemessen :source-space (sd-pathname-to-obj "/T1") Wohn wird das Ergebniss geschrieben :dest-space (sd-pathname-to-obj "/T1") ) verwenden.
Abfrage von unten Links und oben Rechts (Abmasse der Box) (sd-box-points unten Links (first result) oben Rechts (second result) Die X-Richtung 0,0,1 Die Y-Richtung 1,0,0)
Die kann mann nun in eine Ausgabe verwandeln. Die X und Y Richtungen kann mann am Besten am Teil festlegen in dem mann einen Dialog aufbaut (braucht mann ja für die Ausgabe der Werte und die Ermittlung des Sel_Items). Happy doing
------------------ Klaus Lörincz 0174 3439 428 Sindelfingen Germany Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 19. Mrz. 2004 08:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, erstmal vielen Dank fuer deine ausfuehrliche Erklaerung! (Klar komme ich schon mit beiden Funktionalitaten) Das Problem liegt vielmehr darin, wie abfragen kann ob es sich um einen Wuerfel oder eine Welle handelt. Werde dann mal das LISP hier reinstellen - komme leider heute nicht mehr dazu. Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klaus Lörincz Mitglied Consultant
Beiträge: 533 Registriert: 06.08.2003 OSD M = aktuell OSD D = aktuell OS M = aktuell auf WIN und HP-UX
|
erstellt am: 19. Mrz. 2004 08:22 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Rainer, Die "exacte-box" einer Welle ist auch ein Rechteck. Daher muss mann die Flächen abfragen. Die Eigenschaften der Flächen können dan die Auskunft über Eben/Zylinder usw an diene Funktion liefern. Grüße ------------------ Klaus Lörincz 0174 3439 428 Sindelfingen Germany Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 19. Mrz. 2004 08:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus! So hatte ich es auch vor, dass ich zuerst abfrage ob 2 Werte die selben sind. Wenn ja, dann noch noch pruefen ob der groesste Zylinderdurchmesser des Teiles auch so ist. So in der Richtung muesste man das herausfinden koennen. Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
netvista Mitglied Konstrukteur Sondermaschinen
Beiträge: 440 Registriert: 20.11.2003 WIN 7 Prof x64 HP Z230 Xeon-E3-1240 3.40 GHz 32 GB Ram NVidia Quadro CCM 19.x MM 19.x SolidPower
|
erstellt am: 19. Mrz. 2004 10:37 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Klaus! Ich kenne diese funktion. Es ist nur sehr umständlich wenn man z.B. eine Schweißkonstruktion aus lauter Blechen hat. Man muß bei jedem teil x und y Richtung definieren. Kann man das Makro nicht so erweitern das es von jedem teil den kleinstmöglichen "Würfel" ermittelt und die Seitenlängen des "Würfels" ausgibt. Wenn ich jetzt keinen Denkfehler habe müßten sich damit sogut wie alle "Bleche" mit deren Rohmaßen in Stückliste übertragen lassen. Grüße Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 19. Mrz. 2004 10:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Fred, endlich hat noch jemand Interesse, Aussenmasse eines Teiles automatisch ermitteln zu koennen. Ich habe schon geglaubt, dass ich der einzige bin der sowas haben moechte. Soweit habe ich es mal auf die schnelle programmiert: ;; LISP - Anfang (in-package :examples) (use-package :oli) (sd-defdialog 'fertigmasse-anzeigen :toolbox-button nil :dialog-control :sequential :ok-action '(progn (setf z-dir 0,0,1) (setf x-dir 1,0,0) (setf Ausgangspunkte (nth 0 (sd-inq-exact-box (oli::sd-inq-curr-part) z-dir x-dir :source-space :local :dest-space :local))) (setf Endpunkte (nth 1 (sd-inq-exact-box (oli::sd-inq-curr-part) z-dir x-dir :source-space :local :dest-space :local))) (setf Fertigmasse (sd-vec-subtract Endpunkte Ausgangspunkte)) ;;(display Fertigmasse) (setf Fertigmasse (sd-string-split (format nil "~s" Fertigmasse) ",")) ;;(display Fertigmasse) (setf Laenge (nth 0 Fertigmasse)) (setf Breite (nth 1 Fertigmasse)) (setf Hoehe (nth 2 Fertigmasse)) (setf Fertigmasse (format nil "~ax~ax~a" Laenge Breite Hoehe)) (display (format nil "Fertigmass: ~a" Fertigmasse)) ) ) ;; LISP - Ende Ich bekomme dann im Displayfenster manchmal sowas raus: Fertigmass: 39.999999999964089x80.0x42.0 Wie man die Werte dann auf 2 Stellen runden und die Null weglassen kann, dass es dann so aussieht weiss ich leider auch nicht !! Fertigmass: 40x80x42 Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
netvista Mitglied Konstrukteur Sondermaschinen
Beiträge: 440 Registriert: 20.11.2003 WIN 7 Prof x64 HP Z230 Xeon-E3-1240 3.40 GHz 32 GB Ram NVidia Quadro CCM 19.x MM 19.x SolidPower
|
erstellt am: 19. Mrz. 2004 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Rainer! Ich habe großes Interesse daran, da ich dann endlich eine fix fertige Stückliste haben würde. Zur Zeit muß ich bei Blechen die Rohmaße noch manuel eingeben. Ich kann dir aber leider bei deinem Lisp nicht helfen da ich keine erfahrung mit Lisp habe. Ich bin nur Anwender :-) Was hältst du von meinem Vorschlag das die Abmaße ohne angabe von x und y Richtung ermittelt werden? Grüße Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 19. Mrz. 2004 11:20 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von netvista:
Was hältst du von meinem Vorschlag das die Abmaße ohne angabe von x und y Richtung ermittelt werden?
Hallo Fred, ich habe mir schon ueberlegt, dass man beim zu ermittelnden Teil eine Laengsflaeche angeben muss. Ueber diese konnte man zum einen dann abfragen, ob es sich um eine Welle oder einen Wuerfel handelt und man auch zugleich die Achsenausrichtung setzen. Ich bin wie du auch nur Anwender und programmiere LISP nur so nebenbei wenn ich mal Zeit habe. Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Klaus Lörincz Mitglied Consultant
Beiträge: 533 Registriert: 06.08.2003 OSD M = aktuell OSD D = aktuell OS M = aktuell auf WIN und HP-UX
|
erstellt am: 19. Mrz. 2004 11:59 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
zzzzzzz, Wenn ich Zhelen aus Longfloat in einen "format" String einbinde und mich dann darüber aufrege das ich alle Kommawerte in die Anzeige bekomme - kann daas doch nur an limitierten LISP KnowHow liegen - oder ??
z.B.: format nil "~,1Fx~,1Fx~,1F" Zahl1 Zahl2 Zahl3 Damit kann die Augabe auf eine Zahl hinter dem Komma reduziert werden und gleichzeitig wird gerundet <0.5> Grüßle
------------------ Klaus Lörincz 0174 3439 428 Sindelfingen Germany Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 19. Mrz. 2004 12:05 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Klaus Lörincz: ... und mich dann darüber aufrege ... kann daas doch nur an limitierten LISP KnowHow liegen - oder ??
Hallo Klaus !! 1.) Habe ich mich NICHT aufgeregt und 2.) habe ich geschrieben, dass ich LISP nur so nebenbei programmiere ! Trotzdem Danke fuer deine geschaetze Antwort !! Gruss RainerH.
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. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 19. Mrz. 2004 23:46 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Ihr, ich bin in diesem Forum schon oefter ueber verbesserungswuerdige LISP Kenntnisse gestossen. Und mir ist (ebenso wie Klaus) das eine oder andere aufgestossen. Aber egal.. 'Ihr' koennt dafuer in der Mehrheit bestimmt viel besser konstruieren als ich. Richtig gestolpert bin ich, wie hier ein Vector 3D zerlegt wurde. Das war nun wirklich nicht so das Gelbe vom Ei. -> <osddir>help/Common/documentation/integration_kit/reference/util_vec.html#gpnt3d Ich habe dies zum Anlass genommen den oben geposteten Dialog mal LISP maessig ins reine zu bringen. Funktionsaenderung gibt es nur die, das ich nicht das current part nehme. Hintenraus habe ich dann mal verschieden Moeglichkeiten der Ausgabe genutzt.
Beispiel: Fertigmasse von /a1/empty_anim Version A Fertigmass: 2000.0x2161.4159265358981x480.0 Version B Fertigmass: 2000.0x2161.415926535898x480.0 Version C Fertigmass: 2000.000x2161.416x 480.000 Version D Fertigmass: 2000x2161.42x480 mm^3 Version E Fertigmass: 200x216.141593x48 (CM 1.0)^3 Version D ist stark zu empfehlen. Wer wenig Nachkommastellen will, nutzt den optionalen Parameter von sd-num-to-string, wie hier auch. Version E ist eine weitere gute Alternative. Der deutlichkeit halber habe ich die aktuelle Einheit auch mit ausgegeben (das koente man noch huebscher machen.. aber sei's drum). zum einfachen diskutieren und lesen:
Code:
(in-package :examples) (use-package :oli)(sd-defdialog 'fertigmasse-anzeigen :toolbox-button T ; oder nil.. das ist geschmacksache. ;-) :dialog-control :sequential :variables '( (the-part :value-type :part :prompt-text (sd-multi-lang-string "Specify the part to get the measurement of." :german "Teil selektieren um die Fertigmasse anzuzeigen") :modifies nil ) ) ;; end variables :ok-action '(let (the-box z-dir x-dir ausgangs-punkt end-punkt fertig-masse Laenge Breite Hoehe ) (setf z-dir 0,0,1) (setf x-dir 1,0,0) (setf the-box (sd-inq-exact-box the-part z-dir x-dir :source-space :local :dest-space :local)) (setf ausgangs-punkt (nth 0 the-box)) (setf end-punkt (nth 1 the-box)) (setf fertig-masse (sd-vec-subtract end-punkt ausgangs-punkt)) ;; fertig masse ist ein 3D vector, den zerlegt man wie folgt: (setf Laenge (gpnt3d_x fertig-masse)) (setf Breite (gpnt3d_y fertig-masse)) (setf Hoehe (gpnt3d_z fertig-masse)) ;; nun gibt es mehrere alternative (display (format nil "~%~%Fertigmasse von ~A" (sd-inq-obj-pathname the-part))) (display (format nil "Version A Fertigmass: ~ax~ax~a" Laenge Breite Hoehe)) (display (format nil "Version B Fertigmass: ~Fx~Fx~F" Laenge Breite Hoehe)) (display (format nil "Version C Fertigmass: ~6,2Fx~6,2Fx~6,2F" Laenge Breite Hoehe)) (display (format nil "Version D Fertigmass: ~Ax~Ax~A mm^3" (sd-num-to-string Laenge 2) (sd-num-to-string Breite 2) (sd-num-to-string Hoehe 2))) (display (format nil "Version E Fertigmass: ~Ax~Ax~A ~A^3" (sd-num-to-string (sd-sys-to-user-units :length Laenge)) (sd-num-to-string (sd-sys-to-user-units :length Breite)) (sd-num-to-string (sd-sys-to-user-units :length Hoehe )) (sd-inq-length-units))) ) ;; end let / ok-action ) ;; end dialog
und fuer den download.. als attachment..
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. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 20. Mrz. 2004 00:02 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Nachschlag: um von den Massen her eine Welle zu erkennen wuerde ich folgenden Ansatz wahlen: von den 3 Massen laenge,breite,hoehe, muessen 2 gleich (oder annaehernd gleich) sein und das dritte Mass muss um einen Faktor X groesser sein als die anderen beiden. Um nun ein quadratisches Vierkantrohr nicht als Welle zu klassifiezieren koennte man alle Faces abfragen und gucken ob die Anzahl der zylindrischen Flaechen ueberwiegt (?). Ansonsten muesste man wirklich uber deren Achsen gehen und gucken ob sie alle auf einer Achse liegen. Der "Masse"-Ansatz funktioniert aber nur wenn die welle auch ortogonal in der zur Abfrage der Box gesetzen :X :Y richtungen liegt. Das ist eh ein offener Punkt.
PS: in der Vorschau war das source code listing (s.o.) noch huebsch mit einrueckungen formatiert...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 22. Mrz. 2004 13:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang ! Um das ganze jetzt noch zu vervollstaendigen, dass noch eine Welle erkannt wird, reichen meine LISP-Kenntnisse (wie ja festgestellt wurde) bei weitem nicht aus. Jedenfalls kann ich nun einen Vektor richtig zerlegen - DANKE (man lernt halt immer was dazu !!) Vielen Dank nochmals... Gruss RainerH.
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. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 23. Mrz. 2004 00:04 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Hallo Rainer, wenn einer was gelernt hat sich mein Posting doch schon gelohnt. Ich hoffe Du kannst von den vorhanden Moeglichkeiten nun was nutzen und schon mal Fertigmasse 'anzeigen'. Welle hin oder her.. Ich koennte noch ein bischen was erweiteren.. aber mir wuerde (mangels eigener Anwendung) etwas die Hingabe zum ordentlichen Testen fehlen. Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
friedhelm at work Mitglied Techniker Aluminium Profile
Beiträge: 882 Registriert: 01.04.2003
|
erstellt am: 23. Mrz. 2004 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für RainerH
Um das direkt klar zu stellen. Ich bin total Lisp unkundig. (Beginner) Die Funktion finde ich super. Unbescheidene Frage. Kann man die Sache noch weiter ausbauen damit sie auch noch Baugruppen ausmessen kann? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |