/******************************************************************** Hickethier Farbwürfel erzeugen (c) Jürgen Meier (J.Meier@Dialup.Nacamar.de) Plugin für Cinema Version 5 Version : 1.00 16.12.2000 *********************************************************************/ Function (doc) { // Variablen deklarieren var Farbe, // Variable für die ColorInfo Info, // Variable für die Textureinfo Tag, // Variable für den Texturetag name, // Name des Farbeintrags und des entsprechenden Würfels R,G,B, // Farbanteile i,j,k; // Indizes für die Schleifen // Info Variablen initialisieren Farbe = new(ColorInfo); Info = new(TextureInfo); // Masse des Würfels eingeben var d = new(SimpleDialog); d->SetTitle("Hickethier Würfel"); d->SetData(0,"Kantenlänge",FIELD_FLOAT,0,10000,90); d->SetData(1,"Abstand",FIELD_FLOAT,0,10000,100); if (!d->DoDialog()) return FALSE; var r=(d->GetData(0)); // Kantenlänge des Würfels var dr=(d->GetData(1)); // Abstand der Würfel // Kantenlänge halbieren r=r/2; // Leeres Objekt für den Hickethier Würfel erzeugen var hicke=doc->NewPolygonObject("Hickethier Würfel",NULL,NULL,0,0,0,0); // Leere Objekte für die Ebenen erzeugen var e0=doc->NewPolygonObject("Ebene 0",NULL,NULL,0,0,0,0); var e1=doc->NewPolygonObject("Ebene 1",NULL,NULL,0,0,0,0); var e2=doc->NewPolygonObject("Ebene 2",NULL,NULL,0,0,0,0); var e3=doc->NewPolygonObject("Ebene 3",NULL,NULL,0,0,0,0); var e4=doc->NewPolygonObject("Ebene 4",NULL,NULL,0,0,0,0); var e5=doc->NewPolygonObject("Ebene 5",NULL,NULL,0,0,0,0); var e6=doc->NewPolygonObject("Ebene 6",NULL,NULL,0,0,0,0); var e7=doc->NewPolygonObject("Ebene 7",NULL,NULL,0,0,0,0); var e8=doc->NewPolygonObject("Ebene 8",NULL,NULL,0,0,0,0); var e9=doc->NewPolygonObject("Ebene 9",NULL,NULL,0,0,0,0); // Feld für die Farbanteile var Anteil= new(array,10); // Feld für die Farbanteile füllen Anteil[0]="0"; Anteil[1]="1"; Anteil[2]="2"; Anteil[3]="3"; Anteil[4]="4"; Anteil[5]="5"; Anteil[6]="6"; Anteil[7]="7"; Anteil[8]="8"; Anteil[9]="9"; // Farbbereich ausrechnen for (j=0;j<10;j++) // G abnehmend 111->101 { for (i=0;i<10;i++) // B abnehmend 111->110 { for (k=0;k<10;k++) // R abnehmend 111->011 { // Name für das Material erzeugen name=stradd(Anteil[9-k],Anteil[9-j],Anteil[9-i]); // Farbanteile berechnen R=0.99-0.11*k; G=0.99-0.11*j; B=0.99-0.11*i; // Material erzeugen // Variable für das Material erzeugen var mat1=doc->NewMaterial(); // Materialname vergeben mat1->SetName(name); // Materialeigenschaft Farbe auslesen mat1->GetChannelInfo(Farbe); // Farbe zuweisen Farbe->col=vector(R,G,B); // Materialeigenschaft Farbe zuweisen mat1->SetChannelInfo(Farbe); // Thumbnail berechnen und Material aktualisieren mat1->Update(); // Würfel erzeugen // Polygonobjekt erzeugen var wp=doc->NewPolygonObject(name,NULL,NULL,8,12,0,6); // Punkte dem Würfel zuweisen wp->SetPoint(0,vector(-r, r,-r)); wp->SetPoint(1,vector( r, r,-r)); wp->SetPoint(2,vector( r, r, r)); wp->SetPoint(3,vector(-r, r, r)); wp->SetPoint(4,vector(-r,-r,-r)); wp->SetPoint(5,vector( r,-r,-r)); wp->SetPoint(6,vector( r,-r, r)); wp->SetPoint(7,vector(-r,-r, r)); // Linien des Polygonobjektes definieren wp->SetEdge( 0, 0,1); wp->SetEdge( 1, 0,3); wp->SetEdge( 2, 0,4); wp->SetEdge( 3, 7,6); wp->SetEdge( 4, 7,4); wp->SetEdge( 5, 7,3); wp->SetEdge( 6, 1,2); wp->SetEdge( 7, 1,5); wp->SetEdge( 8, 2,3); wp->SetEdge( 9, 2,6); wp->SetEdge(10, 4,5); wp->SetEdge(11, 5,6); // Vierecke des Polygonobjektes definieren wp->SetQuadrangle(0,3,2,1,0); wp->SetQuadrangle(1,0,1,5,4); wp->SetQuadrangle(2,3,0,4,7); wp->SetQuadrangle(3,2,3,7,6); wp->SetQuadrangle(4,1,2,6,5); wp->SetQuadrangle(5,7,6,5,4); // Würfel positionieren wp->SetPosition(vector(i*dr,j*dr,k*dr)); // Updates the object wp->UpdateObject(); // Farbe dem Würfel zuweisen Info->material = name; Tag = wp->NewTag(TAG_TEXTURE,NULL); Tag->SetTextureInfo(Info); // Würfel in eine der Ebenen verschieben if (j==0) { doc->MoveObject(wp,e0,NULL); } if (j==1) { doc->MoveObject(wp,e1,NULL); } if (j==2) { doc->MoveObject(wp,e2,NULL); } if (j==3) { doc->MoveObject(wp,e3,NULL); } if (j==4) { doc->MoveObject(wp,e4,NULL); } if (j==5) { doc->MoveObject(wp,e5,NULL); } if (j==6) { doc->MoveObject(wp,e6,NULL); } if (j==7) { doc->MoveObject(wp,e7,NULL); } if (j==8) { doc->MoveObject(wp,e8,NULL); } if (j==9) { doc->MoveObject(wp,e9,NULL); } } // Ende Schleife j } // Ende Schleife i } // Ende Schleife k // Ebenen in den Hickethier Würfel verschieben doc->MoveObject(e0,hicke,NULL); doc->MoveObject(e1,hicke,NULL); doc->MoveObject(e2,hicke,NULL); doc->MoveObject(e3,hicke,NULL); doc->MoveObject(e4,hicke,NULL); doc->MoveObject(e5,hicke,NULL); doc->MoveObject(e6,hicke,NULL); doc->MoveObject(e7,hicke,NULL); doc->MoveObject(e8,hicke,NULL); doc->MoveObject(e9,hicke,NULL); // Update hicke->UpdateObject(); // Objekt aktivieren doc->ActivateObject(hicke); // Refresh doc->SendMessage(DOCUMENT_CHANGED); } main() { RegisterMenuHook("Hickethier Würfel","Function"); }