/******************************************************************** Fourier Knoten Plugin für Cinema Version 8.0 (c) Jürgen Meier (Juergen-Meier@Hamburg.de) Version : 1.01 12.10.2003 *********************************************************************/ // Globale Variablen und Konstanten // Plugin ID Nummer const var cPluginID = 1012471; // Pluginname const var cPlugName = "Fourier Knoten"; // Pluginhilfstext const var cPlugHelp = "Erzeugt Fourier Knoten"; // Index var i,k; // Koordinaten der Punkte var x,y,z; // Anzahl Iterationen var N=200; // Breite des Menütextes var Breite=150; // Maximalwerte var cMaxFloat=1000000; var cMaxInt=100000000; // Objektvariable var qObj; // Dialogvariable var gDial; // Parameter var t,dt; // Knotentypen var NK = 20; // Anzahl Knoten var K_Name; // Array für die Knotennamen var K_Faktor; // Array für die Skalierungsfaktoren var K_Pi; // Array für die Knotenlänge // ****************************************************************** // Funktion zum Objekt aktivieren (c) h.g.seib // ****************************************************************** fSetActiveObject(vDoc,vObj) { // Aktives Objekt ermitteln var vAObj = GetActiveObject(vDoc); // Active object Bit bzw. Flag setzen if (vAObj) vAObj->DelBit(BIT_AOBJ); vObj->SetBit(BIT_AOBJ); // Änderung im Dokument bekanngeben (neues Objekt selektiert) GeEventAdd(NEW_ACTIVE_OBJECT); } // ****************************************************************** // Funktion zur Berechnung des Knotens fAttraktor(vDoc) { // Variablen deklarieren // Felder für die Punkte des Knotens var vPointAry; // Variable für VariableChanged und BackupTag deklarieren var vVarChanged,vBackupTags; // Neues Splineobjekt erzeugen und Namen zuweisen qObj=new(SplineObject); if (!qObj) return FALSE; qObj->SetName(K_Name[k]); // Undo Funktion aktivieren vDoc->StartUndo(); vDoc->AddUndo(UNDO_OBJECT_NEW,qObj); vDoc->EndUndo(); // Variable für VariableChanged und BackupTag erzeugen vVarChanged = new(VariableChanged); vBackupTags = new(BackupTags); // Feld für die Punkte erzeugen vPointAry = new(array,N); // Feld für die Punkte dem Splineobjekt zuordnen qObj->SetPoints(vPointAry); // ??? vBackupTags->Init(qObj); vVarChanged->Init(0,N); // Message der Klasse BaseList2D if (!qObj->Message(MSG_POINTS_CHANGED, vVarChanged)) { vBackupTags->Restore(); return FALSE; } // Objekt in der Dokumenthierarchie positionieren vDoc->InsertObject(qObj,NULL,NULL); fSetActiveObject(vDoc,qObj); GeEventAdd(DOCUMENT_CHANGED); // Variable für den Container (Klasse BaseContainer) var vContainer = qObj->GetContainer(); // Spline Typ festlegen vContainer->SetData(SPLINEOBJECT_TYPE,3); vContainer->SetData(SPLINEOBJECT_CLOSED,TRUE); // Containerdaten dem Spline Objekt zurückgeben qObj->SetContainer(vContainer); // Punkte des Attraktors berechnen // Startwerte übergeben dt=K_Pi[k]*PI/N; t=0; // Schleife durchlaufen for (i=0;iSetPoint(i,vector(x*K_Faktor[k],z*K_Faktor[k],y*K_Faktor[k])); } return TRUE; } // ****************************************************************** // Ableitung der Klasse MyDialog von GeDialog // ****************************************************************** class MyDialog : GeDialog { public: MyDialog(); CreateLayout(); Init(); CoreMessage(vID,vMSG); Command(vID,vMSG); } // ****************************************************************** // Deklaration des Konstruktors MyDialog::MyDialog() { // Konstruktor der parent class aufrufen super(cPluginID); } // ****************************************************************** // Deklaration der Methode CreateLayout MyDialog::CreateLayout() { // Plugintitel setzen SetTitle(cPlugName); // Array für die Knotennamen erzeugen K_Name = new(array,NK); K_Name[0]="Unknoten"; K_Name[1]="Trefoil Knoten A"; K_Name[2]="Trefoil Knoten B"; K_Name[3]="Granny Knoten"; K_Name[4]="Square Knoten"; K_Name[5]="Achterknoten"; K_Name[6]="Knoten 3-1"; K_Name[7]="Knoten 4-1"; K_Name[8]="Knoten 5-1"; K_Name[9]="Knoten 5-2"; K_Name[10]="Knoten 6-1"; K_Name[11]="Knoten 6-2"; K_Name[12]="Knoten 6-3"; K_Name[13]="Knoten 7-1"; K_Name[14]="Knoten 7-2"; K_Name[15]="Knoten 7-3"; K_Name[16]="Knoten 7-4"; K_Name[17]="Knoten 7-5"; K_Name[18]="Knoten 7-6"; K_Name[19]="Knoten 7-7"; // Array für die Skalierungsfaktoren K_Faktor = new(array,NK); K_Faktor[0]=100; K_Faktor[1]=35; K_Faktor[2]=5; K_Faktor[3]=0.7; K_Faktor[4]=0.7; K_Faktor[5]=5; K_Faktor[6]=0.6; K_Faktor[7]=0.4; K_Faktor[8]=0.2; K_Faktor[9]=0.35; K_Faktor[10]=0.35; K_Faktor[11]=0.35; K_Faktor[12]=0.35; K_Faktor[13]=0.35; K_Faktor[14]=0.35; K_Faktor[15]=0.35; K_Faktor[16]=0.6; K_Faktor[17]=0.5; K_Faktor[18]=0.35; K_Faktor[19]=0.45; // Array für die Knotenlänge K_Pi = new(array,NK); K_Pi[0]=2; K_Pi[1]=4; K_Pi[2]=2; K_Pi[3]=2; K_Pi[4]=2; K_Pi[5]=2; K_Pi[6]=2; K_Pi[7]=2; K_Pi[8]=2; K_Pi[9]=2; K_Pi[10]=2; K_Pi[11]=2; K_Pi[12]=2; K_Pi[13]=2; K_Pi[14]=2; K_Pi[15]=2; K_Pi[16]=2; K_Pi[17]=2; K_Pi[18]=2; K_Pi[19]=2; // Knotentyp auswählen AddComboBox(9000,BFH_LEFT,300,0); AddItem(9000,9010,K_Name[0]); AddItem(9000,9011,K_Name[1]); AddItem(9000,9012,K_Name[2]); AddItem(9000,9013,K_Name[3]); AddItem(9000,9014,K_Name[4]); AddItem(9000,9015,K_Name[5]); AddItem(9000,9016,K_Name[6]); AddItem(9000,9017,K_Name[7]); AddItem(9000,9018,K_Name[8]); AddItem(9000,9019,K_Name[9]); AddItem(9000,9020,K_Name[10]); AddItem(9000,9021,K_Name[11]); AddItem(9000,9022,K_Name[12]); AddItem(9000,9023,K_Name[13]); AddItem(9000,9024,K_Name[14]); AddItem(9000,9025,K_Name[15]); AddItem(9000,9026,K_Name[16]); AddItem(9000,9027,K_Name[17]); AddItem(9000,9028,K_Name[18]); AddItem(9000,9029,K_Name[19]); // Gruppe für die Parameter der Berechnung AddGroupBeginV(1002,BFH_CENTER,2,"",0); { AddStaticText(0,BFH_LEFT,Breite,0," Anzahl Pi",0); AddEditNumber(2006,BFH_LEFT,100,0); AddStaticText(0,BFH_LEFT,Breite,0," Anzahl N",0); AddEditNumber(2007,BFH_LEFT,100,0); AddStaticText(0,BFH_LEFT,Breite,0," Faktor",0); AddEditNumber(2008,BFH_LEFT,100,0); } // Vertikal orientierte Gruppe schliessen AddGroupEnd(); // Waagerechte Trennlinie AddSeparatorH(0); // Button für den Start der Berechnung AddButton (3000,BFH_CENTER,200,0,"Start"); return TRUE; } // ****************************************************************** // Deklaration der Methode Init MyDialog::Init() { // Startwerte setzen SetInt(2007,N,0,cMaxInt,0); SetItem(9000,9011); k=1; SetFloat(2008,K_Faktor[k],0,cMaxInt,0); SetFloat(2006,K_Pi[k],-cMaxFloat,cMaxFloat,0); return TRUE; } // ****************************************************************** // Deklaration der Methode CoreMessage MyDialog::CoreMessage(vID,vMSG) { switch (vID) { case NEW_DOCUMENT: case DOCUMENT_CHANGED: case NEW_ACTIVE_OBJECT: case ACTIVE_OBJECT_CHANGED: return TRUE; break; } return FALSE; } // ****************************************************************** // Deklaration der Methode Command MyDialog::Command(vID,vMSG) { var vDoc; // StopAllThreads(); switch (vID) { case 3000 : // Start Button gedrückt { vDoc = GetActiveDocument(); if (!vDoc) return FALSE; fAttraktor(vDoc); } case 2006 : K_Pi[k]=GetFloat(2006); case 2007 : N=GetInt(2007); case 2008 : K_Faktor[k]=GetFloat(2008); // Knotenauswahl case 9000 : { switch (GetItem(9000)) { case 9010 : { k=0; break; } case 9011 : { k=1; break; } case 9012 : { k=2; break; } case 9013 : { k=3; break; } case 9014 : { k=4; break; } case 9015 : { k=5; break; } case 9016 : { k=6; break; } case 9017 : { k=7; break; } case 9018 : { k=8; break; } case 9019 : { k=9; break; } case 9020 : { k=10; break; } case 9021 : { k=11; break; } case 9022 : { k=12; break; } case 9023 : { k=13; break; } case 9024 : { k=14; break; } case 9025 : { k=15; break; } case 9026 : { k=16; break; } case 9027 : { k=17; break; } case 9028 : { k=18; break; } case 9029 : { k=19; break; } } SetFloat(2008,K_Faktor[k],0,cMaxInt,0); SetFloat(2006,K_Pi[k],-cMaxFloat,cMaxFloat,0); break; } } return TRUE; } // ****************************************************************** // Ableitung der Klasse MyMenuPlugin von MenuPlugin // ****************************************************************** class MyMenuPlugin : MenuPlugin { public: MyMenuPlugin(); GetID(); GetName(); GetHelp(); Execute(doc); RestoreLayout(secret); } // ****************************************************************** // Deklaration des Konstruktors MyMenuPlugin::MyMenuPlugin() { super(); } // ****************************************************************** // Deklaration der Methode GetID MyMenuPlugin::GetID() { return cPluginID; } // ****************************************************************** // Deklaration der Methode GetName MyMenuPlugin::GetName() { return cPlugName; } // ****************************************************************** // Deklaration der Methode GetHelp MyMenuPlugin::GetHelp() { return cPlugHelp; } // ****************************************************************** // Deklaration der Methode Execute MyMenuPlugin::Execute(doc) { if (!gDial) gDial=new(MyDialog); gDial->Open(TRUE,-1,-1); } // ****************************************************************** // Deklaration der Methode RestoreLayout MyMenuPlugin::RestoreLayout(secret) { if (!gDial) gDial=new(MyDialog); gDial->RestoreLayout(secret); } // ****************************************************************** main() { Register(MyMenuPlugin); }