Anzahl von Spline-Punkten

margoyle

Mitglied
Hi,

komm leider mit COFFEE ÜBERHAUPT nicht zurecht und weiche daher immer auf Xpresso aus. Es geht darum, einem Spline einfach eine gewisse Punkteanzahl zuzuweisen. Diese Zahl möchte ich irgendwo über einen Eingang füttern. Hab einen ähnlichen Post gefunden, allerdings das Coffee-skript nicht richtig zum Laufen bekommen und musste aufgeben. Kann mir da jemand helfen?

Grüße,
margoyle

P.S.
Bei der Gelegenheit, bräuchte ich auch noch Zugriff auf die Tangenten einzelner Punkte. Hat da jemand Erfahrung?
 
Ich denke, das geht wirklich nur über COFFEE.
Wenn du das Plugin SurfaceSPREAD besitzt, kannst du das Wire Objekt verwenden. Damit lassen sich sowohl Punkte, als auch Tangenten, über Null Objekte steuern.

Grüße, CUBE
 
Hmmm, also ich's jetzt etwas hausbacken gelöst, indem ich einfach eine feste übergroße Anzahl genommen habe und alle nicht benötigten Punkte auf die Position des letzten benötigten packe. Nicht unbedingt schön, aber funktioniert. Ich hätte nun aber noch ganz gerne den Zugriff auf die Tangenten, und ich hab irgendwo gelesen, dass man da nun wirklich nur mit COFFEE rankommt. Hat da jemand was dazu? Die Dokumentation für COFFEE-Neulinge im Netz ist nämlich wirklich recht spärlich...

Gruß,
margoyle
 
hi,

Das mit den Tangenten - da kann ich nicht helfen.

Aber das Andere geht durchaus - etwas anders als von dir beschrieben - mit XPresso:
Du brauchst einen Spline als Master (Dein Problematischer Pfad) der sollte so gut wie möglich aufgelöst sein.
Dann einen zweiten Spline, dem du soviele Punkte gibst, wie du am Ende haben willst.

Mit dem Spline-Node (Nicht der Objektnode!) in XPresso, kannst du eine Position auf dem Spline in Prozent abfragen. Du musst nur per Iteration die Punkte des zweiten Splines auf die prozentualen Positionen des Master-Splines übertragen.

Bei Fragen fragen
Liebe Grüsse
Matthias
 
Hmm ja, aber mein Problem ist es ja, die Anzahl der Punkte von einem Xpresso-Node gefütter zu bekommen (die errechnen sich in einer Schaltung anhand anderer Parameter) Ich will nur eben nicht immer nen neuen Spline nehmen müssen und ihm ne feste Zahl geben.

Aber ich versuchs jetzt nochmal als Aufruf ;)
Wäre jemand gewillt/fähig mir ein kurzes COFFEE-skript aufzusetzten, welches mir für einen Spline eine (von XPRESSO gefütterete) Anzahl von Punkten festsetzt, und für jenden 2-ten Punkt die Tangentenlänge (nichtmal die Richtung, nur die Länge) kontrollieren lässt (vorzugsweise wieder über Benutzerdaten in Xpresso)?

Damit wäre mir echt geholfen ;)
Danke und Grüße,
margoyle
 
hola,

habe mal versucht die Thematik als Script zusammenzufassen...
Code:
main(doc,op)
{
var punkt=1; // Beispielpunkt-Index (Beachte Punktzählung beginnt bei 0)
var punktanzahl=3; //Gewünschte Punkteanzahle des Splines (Beachte Counts/Anzahlen immer ohne 0)

var vio = doc->FindObject("violett"); //Definiert vio als Objekt "violett"
var green = doc->FindObject("gruen");
var blau = doc->FindObject("blau");
var gelb = doc->FindObject("gelb");

if( op->GetPointCount() != punktanzahl) //Wenn Punkteanzahl des Splines und gewünschte Punktanzahl 
																				//nicht gleich sind, dann wirds gleich gemacht	
	{	
	var vcp = new(VariableChanged); if (!vcp) return FALSE;
	vcp->Init(op->GetPointCount(),punktanzahl);
	op->MultiMessage( MSG_POINTS_CHANGED, vcp);
	}

//---Punkte---
var point=op->GetPoints(); //In Variable point wird Array mit den Punktepositionen geschrieben

//positioniert Beispielpunkt auf Violett
	point[punkt]=vio->GetPosition()-op->GetPosition(); //lokale Positionen müssen umgerechnet werden
	println (point[0]);
	op->SetPoints(point); // Kann auch nur einmal am Ende geschrieben werden
	op->Message (MSG_UPDATE); // Kann auch nur einmal am Ende geschrieben werden

//positioniert Gruen auf Punkt 1
	green->SetPosition(point[punkt]+op->GetPosition());
//---Punkte ende---

//---Tangenten---
var t = punkt*2; //Index für rechte Tangente des Beispielpunktes, für linke t = num*2+1
var tang = op->GetTangents();

//positioniert rechte Tangente des Beispielpunktes auf Blau
	tang[t] = doc->FindObject("blau")->GetPosition()-op->GetPosition()-op->GetPoint(punkt);
	op->SetTangents(tang);// Kann auch nur einmal am Ende geschrieben werden
	op->Message(MSG_UPDATE);// Kann auch nur einmal am Ende geschrieben werden

//positioniert Gelb auf rechter Tangente des Beispielpunktes
	gelb->SetPosition(op->GetPosition()+op->GetPoint(punkt)+tang[t]);
}
...die Tangentenlänge kriegst du nur über die Tangentenposition und dem Satz des Pythagora hin.
Ansonsten empfiehlt es sich, sich mir Coffee zu beschäfftigen.

Grüße
Rown
 

Anhänge

  • coffee_points_tangents.jpg
    coffee_points_tangents.jpg
    662,3 KB · Aufrufe: 16
  • Spline_Punkt_Tangente.zip
    7,6 KB · Aufrufe: 12
WOW! Hammer! Großartiges, dickes Danke! :eek:

Hab nur leider wie gesagt immernoch ARGE Probleme mit COFFEE (hättest du vll. Dokumentation, ausser der, die im SDK als Text beiliegt?) Würde mich wirklich gerne damit auseinander setzen, aber bisher zu sperrig...) Denn selbst so Gallileo oder Video2Brain-Material ist derart trivial (das was ich mir besorgt habe) dass es z.B. den COFFEE-Node in einer XPRESSO Schaltung überahupt nicht behandelt!

Daher mag die nächste Frage wohl ziemlich trivial klingen, aber : Wie stelle ich eine Verbindung zwischen meiner Xpresso-Schaltung und dem COFFEE-Skript her? Ich habe dein Skript aus dem Coffee-Tag kopiert und in einen COFFEE-Node meiner Schaltung gepackt, damit ich einen Input-Port habe. (War das wenigsten schon mal richtig...?) Aber
"if( op->GetPointCount() != Input1)" führt nicht zu der gewünschten Verbindung...
Sorry, dass ich mit so Trivialitäten ankomm, abe ich krieg die Tür einfach nicht auf :(

Danke und viele Grüße,
margoyle
 
Hallo margoyle,

habe dir das Script nochmal als Xpresso aufbereitet. Wenn du die beiden Scripte vergleichst wirst du gewisse Unterschiede feststellen. So steht im Coffee-Tag main(doc,op). Wobei sich doc auf das aktive Document und op auf das Objekt, das das Tag trägt, bezieht. Das ist im Coffee-Node nicht der Fall. Da ist "op" (in diesem Fall) durch die Variable spline ersetzt. Und solltest du auf das aktive Document zugreifen wollen, so müsstest du in der Schaltung var doc=GetActiveDocument(); benutzen. Wenn du Inputs anlegst, dann achte darauf, dass die Ports passen. Das heißt, wenn du eine Zahl in das Node schicken willst, dann verwende real oder integer. Wenn du ein Objekt mit dem Node verknüpfen möchstest, dann link. Zudem verwende die Fenster/Konsole. Die sagt dir was passiert. So trivial das Material von Video2Brain auch wirken mag, es vermittelt doch recht gut wie die ganze Scriptsache läuft. Ansonsten findest du reichlich im Netz und das SDK ist unerlässlich.

Grüße
Rown
 

Anhänge

  • Spline_Punkt_Tangente_xpresso.zip
    9,6 KB · Aufrufe: 13
  • coffee_points_tangents_xpresso.jpg
    coffee_points_tangents_xpresso.jpg
    208,1 KB · Aufrufe: 16
Super! Ich dank Dir vielmals, hat mir nicht nur im Projekt selbst, sondern auch ein wenig mehr im Verständnis geholfen. Werd mich, wie gesagt, in Zukunft mehr damit auseinandersetzen - es ist eben einfach zu nützlich... ;)
Aber ich denke, das wird nicht mein letzter COFFEE-Hilfeschrei im Forum gewesen sein :D

Vielen Dank nochmal, das war genau das, was mir noch gefehlt hatte...
Grüße,
margoyle
 

Neue Beiträge

Zurück