/******************************************************************** Säulenkontur (c) Jürgen Meier (J.Meier@Dialup.Nacamar.de) Version : 1.00 08.12.2000 *********************************************************************/ Function(doc) { // Variablen deklarieren var i,j, // Indizes für die Schleifen zz, // Zähler xs,ys, // Schnittpunkt Säule-Delle x, // x Koordinate eines Punktes y, // y Koordinate eines Punktes z, // z Koordinate eines Punktes Phi, // Winkel für Punkte der Delle Phi1,Phi2, // Begrenzungswinkel der Delle dPhi, // Segmentbreite Winkel Phi Beta, // Winkel Säulenstück zwischen den Dellen dBeta, // Segmentbreite Säulenstück zwischen den Dellen dLambda, // Segmentbreite Delle + Säulenstück w, // Halbe Breite (Winkel) einer Delle u,v; // Polarkoordinaten // Eingabe der Variablen var d = new(SimpleDialog); d->SetTitle("Säule"); d->SetData(0,"Radius Säule",FIELD_FLOAT,1,10000,500); d->SetData(1,"Radius Dellen",FIELD_FLOAT,0,1000,100); d->SetData(2,"Radius Umkreis",FIELD_FLOAT,0,1000,550); d->SetData(3,"Anzahl Dellen",FIELD_INTEGER,1,1000,12); d->SetData(4,"Unterteilung Säule",FIELD_INTEGER,1,1000,8); d->SetData(5,"Unterteilung Dellen",FIELD_INTEGER,1,1000,8); if (!d->DoDialog()) return FALSE; var R1=(d->GetData(0)); // Radius Säule var r=(d->GetData(1)); // Radius Dellen var R2=(d->GetData(2)); // Radius Umkreis var N=(d->GetData(3)); // Anzahl Dellen var Ns=(d->GetData(4)); // Anzahl Unterteilungen Säulenstücke var Nd=(d->GetData(5)); // Anzahl Unterteilungen Dellen Nd=Nd+1; // Array für die Koordinaten der Dellen var Feld = new(array,Nd+1); // Array für die Koordinaten der Säulenstücke var Feld1 = new(array,Ns-1); // Schnittpunkt Säule-Delle berechnen xs=(r*r-R1*R1-R2*R2)/(-2*R2); ys=sqrt(R1*R1-xs*xs); // Punkte in der Delle berechnen // Begrenzungswinkel berechnen Phi1=acos((xs-R2)/sqrt((xs-R2)*(xs-R2)+ys*ys)); Phi2=acos((R2-xs)/sqrt((R2-xs)*(R2-xs)+ys*ys)); dPhi=2*Phi2/(Nd-1); // Zähler zurücksetzen zz=0; // Punkte berechnen for (i=0;iNewSplineObject("Splinekontur",NULL,NULL,((Nd-1)+Ns)*N); // Spline Info definieren var spinfo=new(SplineInfo); // neuer Punkt var spunkt=new(SplinePoint); // Spline schließen spinfo->closed=TRUE; // Spline Typ definieren spinfo->type=SPL_LINEAR; // Spline Info setzen s->SetSplineInfo(spinfo); // Spline ausgeben // Zähler zurücksetzen zz=0; // Anzahl der Wiederholungen erzeugen for (i=0;ip=vector(x,0,y); s->SetPoint(zz,spunkt); // Zähler erhöhen zz=zz+1; } // Säulenstücke for (j=0;jp=vector(x,0,y); s->SetPoint(zz,spunkt); // Zähler erhöhen zz=zz+1; } } // Update s->UpdateObject(); // Objekt aktivieren doc->ActivateObject(s); // Refresh doc->SendMessage(DOCUMENT_CHANGED); } main() { RegisterMenuHook("Säulenkontur","Function"); }