/******************************************************************** Moebius Band Plugin für Cinema 4D Version 5 (c) Jürgen Meier (www.3d-meier.de) Version : 1.01 11.02.2004 *********************************************************************/ Function(doc) { // Variablen deklarieren var i,j, // Indizes für die Schleifen zz, // Zähler dw, // Segmentbreite Breite dt, // Segmentbreite Länge s, // Parameter für die Fläche t, // Parameter für die Fläche x, // x Koordinate eines Punktes y, // y Koordinate eines Punktes z, // z Koordinate eines Punktes SP, // Anzahl Punkte des Polygonobjektes SL, // Anzahl Linien des Polygonobjektes SQ, // Anzahl Quadrate des Polygonobjektes P1,P2,P3,P4; // Punkte für ein Quadrat // Eingabe der Variablen var d = new(SimpleDialog); d->SetTitle("Möbius Band"); d->SetData(0,"Radius R",FIELD_METER,0,100000,200); d->SetData(1,"Halbe Breite w",FIELD_METER,0,1000,30); d->SetData(2,"Nw",FIELD_INTEGER,0,100,5); d->SetData(3,"Nt",FIELD_INTEGER,0,100,50); if (!d->DoDialog()) return FALSE; var R=(d->GetData(0)); // Radius var w=(d->GetData(1)); // Halbe Breite var Nw=(d->GetData(2)); // Anzahl Unterteilungen der halben Breite var Nt=(d->GetData(3)); // Anzahl Unterteilungen der Länge // Segmentbreiten berechnen dw=w/Nw; dt=2.0/Nt; // Parameter des Polygonobjektes berechnen SP=(2*Nw+1)*Nt; SL=4*Nw*Nt+Nt; SQ=2*Nw*Nt; // Polygonobjekt für das Möbius Band erzeugen var M=doc->NewPolygonObject("Möbius Band",NULL,NULL,SP,SL,0,SQ); // Punkte des Moebius Bandes berechnen // Zähler zurücksetzen zz=0; // Parameterbereich durchlaufen for (i=0;i<=2*Nw;i++) { for (j=0;jSetPoint(zz, vector(x,y,z)); // Zähler erhöhen zz=zz+1; } } // Linien setzen // Zähler zurücksetzen zz=0; // Linien längs ohne letztes Segment for (i=0;i<=2*Nw;i++) { for (j=0;jSetEdge(zz, j+Nt*i, j+1+Nt*i); // Zähler erhöhen zz=zz+1; } } // Linien des letzten Segments setzen // Die Enden werden über Kreuz verbunden for (i=0;i<=2*Nw;i++) { // Linie speichern M->SetEdge(zz, Nt*i, SP-1-(Nt*i)); // Zähler erhöhen zz=zz+1; } // Querlinien setzen for (j=0;jSetEdge(zz, j+i*Nt, j+Nt+i*Nt); // Zähler erhöhen zz=zz+1; } } // Quadrate setzen // Zähler zurücksetzen zz=0; // Schleife for (j=0;jSetQuadrangle(zz,P1,P2,P3,P4); // Zähler erhöhen zz=zz+1; } } // Die letzten Quadrate setzen for (i=0;i<=2*Nw;i++) { // Punkte für ein Quadrat definieren P1= Nt*(i+1)-1; P2= Nt*(i+2)-1; P3= SP-Nt*(i+2); P4= SP-Nt*(i+1); // Quadrate speichern M->SetQuadrangle(zz,P1,P2,P3,P4); // Zähler erhöhen zz=zz+1; } // Update M->UpdateObject(); // Objekt aktivieren doc->ActivateObject(M); // Refresh doc->SendMessage(DOCUMENT_CHANGED); } main() { RegisterMenuHook("Möbius Band","Function"); }