PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
3D: Modeling, Texturen, Licht, Animation, Rendern
Cinema 4D
C4D - XPresso, Thinking Particles, C.O.F.F.E.E. un
Python Script wird laufend aufgerufen
Beitrag
<blockquote data-quote="Drachen" data-source="post: 2434878" data-attributes="member: 113914"><p>Hallo an Alle</p><p>In Sachen Pythonprogrammierung bin ich absulter Anfänger, darum ist es für mich unverstänlich wie ich C4D dazu veranlassen kann mein Script nur einmal auf zurufen.</p><p>Aber von ganz vorne, worum es eigentlich geht.</p><p>Ich habe vor mir eine 3D-Datenbank auf zubauen für Legostein. Ja ich weis es gibt genügend Legoprogramme die auch sehr Gut sind in ihre Arbeit. Aber nicht jedes Programm hat alle Legoteile. Ich habe mir immer so geholfen, die Teile die ich brauche habe ich aus den jeweiligen Legoprogramm exportiert und dann in C4D eingefügt, damit ich das Modell dann bauen konnte. Das hat mich mit der Zeit ziemlich genervt. Ich habe mir überlegt ob ich vielleicht die 3D-Daten aus machnen Legoprogramme verwenden kann um so die Steine zu bekommen. Leider war das ein Schuss in den Ofen. Die Legoprogramme behandeln die 3D-Daten anderes als C4D. Also habe ich weider überlegt wie ich an die 3D-Daten rankomme. Habe mir als mal einen Stein in C4D geholt um nach zu schauen wie Maxon die Daten behandelt. Irgend wann ist mir eingefallen das ja C4D die Punkt-Daten, sowie die Polygon-Daten als Text-Datei abspeichern kann. Also brauche ich ja nur eine Routine um die Text-Datei wieder einzulesen. Also habe ich mich im Netzt schlau gemacht wie ich das unter Python machen kann. Habe nach langen Suchen dann eine Routine entdeckt.</p><p>so sieht sie aus. Ich habe Sie noch ein wenig angepasst.</p><p></p><p>[code]</p><p>import c4d</p><p>#Welcome to the world of Python</p><p></p><p>#</p><p># lese eine Ascii-File und erzeuge ein Objekt</p><p>#</p><p></p><p>def main():</p><p> </p><p> legoNamen = "Brick 1x1"</p><p> FehlerDaten = "Leider konnte ich den Legostein nicht konstruieren, \nda mir die Datei mit den Daten fehlen!"</p><p> </p><p> pointFile = "d:\Temp\Test\Brick1x1_Punkte.txt"</p><p> polysFile = "d:\Temp\Test\Brick1x1_Polygone.txt"</p><p> </p><p> try:</p><p> fpoints = open(pointFile)</p><p> fpolys = open(polysFile) </p><p> except IOError:</p><p> c4d.gui.MessageDialog(FehlerDaten)</p><p> return</p><p></p><p> #teile die Datei in eine Linen-Liste</p><p> lines = fpoints.readlines()</p><p> linesPolys = fpolys.readlines()</p><p> #wieviele Linien? pro Punkt und Polygone</p><p> nrPoints = len(lines)</p><p> nrPolys = len(linesPolys)</p><p> #-1 for erste Linie</p><p> print "Nr. points-polys: ", nrPoints-1, nrPolys-1</p><p> </p><p> #erzeuge eine Polygon Objekt mit Punktezähler der Linien</p><p> rebrick = c4d.BaseObject(c4d.Opolygon)</p><p> rebrick.ResizeObject(nrPoints-1, nrPolys-1)</p><p> </p><p> #Punkte</p><p> for i, line in enumerate(lines):</p><p> #teile die Linien in Komponente</p><p> coord = line.split(",")</p><p> #ignoriere korrupte csv Linie</p><p> if len(coord)<4 : continue</p><p> </p><p> try:</p><p> nr = int(coord[0])</p><p> x = float(coord[1])</p><p> y = float(coord[2])</p><p> z = float(coord[3])</p><p> except ValueError:</p><p> continue </p><p> </p><p> rebrick.SetPoint(i-1,c4d.Vector(x,y,z))</p><p> print "Punkt eingefügt: ", i-1,x,y,z</p><p> </p><p> #Polygone</p><p> for i, line in enumerate (linesPolys):</p><p> #teile die Linien in Komponente</p><p> coord = line.split(",")</p><p> #ignoriere korrupte csv Linie</p><p> if len(coord)<4 : continue</p><p> </p><p> try:</p><p> nr = int(coord[0])</p><p> p1 = int(coord[1])</p><p> p2 = int(coord[2])</p><p> p3 = int(coord[3])</p><p> except ValueError:</p><p> continue </p><p> </p><p> rebrick.SetPolygon(nr,c4d.CPolygon(p1,p2,p3))</p><p> print "Polygon eingefügt: ", nr,p1, p2, p3</p><p></p><p> doc.InsertObject(rebrick)</p><p> rebrick.Message (c4d.MSG_UPDATE)</p><p> c4d.EventAdd()</p><p> </p><p>if __name__=='__main__':</p><p> main()</p><p></p><p>[/code]</p><p></p><p>(Formatierung ist nicht korrekt)</p><p></p><p>Jetzt habe ich aber das Problem, wenn ich den Python Genarator verwende, das er nach einer gewissen Zeit immer wieder einen Legostein erzeugt. Was muss ich machen, damit er das nur einmal macht.</p><p>Wie man einen Plug-In programmiert weis ich leider auch nicht. Das muss ich mir erst noch an eignen.</p><p></p><p>Habe aber noch mehr Fragen:</p><p>Gibt es ein Gutes Buch über Python in C4D. Mit der Python SDK HTML 2014 komme ich nicht ganz zu recht. Es wird zwar jeder Befehl aufgelistet, aber es fehlen für mich immer ein paar Beispiele wie man so ein Befehl anwendet.</p><p>Noch eine Frage.</p><p>Kann man den Code etwas kürzen, oder anders ausgedrückt effizienter gestalten.</p><p>So das war es erst mal. Hoffe ihr könnt mir ein paar Tipps zu kommen lassen</p><p></p><p>Gruss Drachen</p></blockquote><p></p>
[QUOTE="Drachen, post: 2434878, member: 113914"] Hallo an Alle In Sachen Pythonprogrammierung bin ich absulter Anfänger, darum ist es für mich unverstänlich wie ich C4D dazu veranlassen kann mein Script nur einmal auf zurufen. Aber von ganz vorne, worum es eigentlich geht. Ich habe vor mir eine 3D-Datenbank auf zubauen für Legostein. Ja ich weis es gibt genügend Legoprogramme die auch sehr Gut sind in ihre Arbeit. Aber nicht jedes Programm hat alle Legoteile. Ich habe mir immer so geholfen, die Teile die ich brauche habe ich aus den jeweiligen Legoprogramm exportiert und dann in C4D eingefügt, damit ich das Modell dann bauen konnte. Das hat mich mit der Zeit ziemlich genervt. Ich habe mir überlegt ob ich vielleicht die 3D-Daten aus machnen Legoprogramme verwenden kann um so die Steine zu bekommen. Leider war das ein Schuss in den Ofen. Die Legoprogramme behandeln die 3D-Daten anderes als C4D. Also habe ich weider überlegt wie ich an die 3D-Daten rankomme. Habe mir als mal einen Stein in C4D geholt um nach zu schauen wie Maxon die Daten behandelt. Irgend wann ist mir eingefallen das ja C4D die Punkt-Daten, sowie die Polygon-Daten als Text-Datei abspeichern kann. Also brauche ich ja nur eine Routine um die Text-Datei wieder einzulesen. Also habe ich mich im Netzt schlau gemacht wie ich das unter Python machen kann. Habe nach langen Suchen dann eine Routine entdeckt. so sieht sie aus. Ich habe Sie noch ein wenig angepasst. [code] import c4d #Welcome to the world of Python # # lese eine Ascii-File und erzeuge ein Objekt # def main(): legoNamen = "Brick 1x1" FehlerDaten = "Leider konnte ich den Legostein nicht konstruieren, \nda mir die Datei mit den Daten fehlen!" pointFile = "d:\Temp\Test\Brick1x1_Punkte.txt" polysFile = "d:\Temp\Test\Brick1x1_Polygone.txt" try: fpoints = open(pointFile) fpolys = open(polysFile) except IOError: c4d.gui.MessageDialog(FehlerDaten) return #teile die Datei in eine Linen-Liste lines = fpoints.readlines() linesPolys = fpolys.readlines() #wieviele Linien? pro Punkt und Polygone nrPoints = len(lines) nrPolys = len(linesPolys) #-1 for erste Linie print "Nr. points-polys: ", nrPoints-1, nrPolys-1 #erzeuge eine Polygon Objekt mit Punktezähler der Linien rebrick = c4d.BaseObject(c4d.Opolygon) rebrick.ResizeObject(nrPoints-1, nrPolys-1) #Punkte for i, line in enumerate(lines): #teile die Linien in Komponente coord = line.split(",") #ignoriere korrupte csv Linie if len(coord)<4 : continue try: nr = int(coord[0]) x = float(coord[1]) y = float(coord[2]) z = float(coord[3]) except ValueError: continue rebrick.SetPoint(i-1,c4d.Vector(x,y,z)) print "Punkt eingefügt: ", i-1,x,y,z #Polygone for i, line in enumerate (linesPolys): #teile die Linien in Komponente coord = line.split(",") #ignoriere korrupte csv Linie if len(coord)<4 : continue try: nr = int(coord[0]) p1 = int(coord[1]) p2 = int(coord[2]) p3 = int(coord[3]) except ValueError: continue rebrick.SetPolygon(nr,c4d.CPolygon(p1,p2,p3)) print "Polygon eingefügt: ", nr,p1, p2, p3 doc.InsertObject(rebrick) rebrick.Message (c4d.MSG_UPDATE) c4d.EventAdd() if __name__=='__main__': main() [/code] (Formatierung ist nicht korrekt) Jetzt habe ich aber das Problem, wenn ich den Python Genarator verwende, das er nach einer gewissen Zeit immer wieder einen Legostein erzeugt. Was muss ich machen, damit er das nur einmal macht. Wie man einen Plug-In programmiert weis ich leider auch nicht. Das muss ich mir erst noch an eignen. Habe aber noch mehr Fragen: Gibt es ein Gutes Buch über Python in C4D. Mit der Python SDK HTML 2014 komme ich nicht ganz zu recht. Es wird zwar jeder Befehl aufgelistet, aber es fehlen für mich immer ein paar Beispiele wie man so ein Befehl anwendet. Noch eine Frage. Kann man den Code etwas kürzen, oder anders ausgedrückt effizienter gestalten. So das war es erst mal. Hoffe ihr könnt mir ein paar Tipps zu kommen lassen Gruss Drachen [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Der grüne Frosch hüpft über die Hügel an den Bäumen vorbei in die Höhle. Bitte nenne das fünfte Wort!
Antworten
Start
Forum
3D: Modeling, Texturen, Licht, Animation, Rendern
Cinema 4D
C4D - XPresso, Thinking Particles, C.O.F.F.E.E. un
Python Script wird laufend aufgerufen
Oben