selektierte Punkte in gerader Linie ausrichten.

rown

Mitglied
Hallo Leute,

ich stehe beim Modellieren immer mal wieder vor der Aufgabe Punkte eines Polygonobjektes zu einer geraden Linie auszurichten. Das kann ich natürlich mit einem Spline und der Snap-Funktion bewerkstelligen, aber das ist mir ein wenig zu aufwendig für ein flüssiges Arbeiten und so möchte ich nun ein Plug-in schreiben. Wie im Bild selektiere ich ein paar Punkte entlang einer Kante und bei Klick wird eine Gerade zwischen erstem und letzten Punkt der Kante gezogen, auf der dann die Punkte angeordnet werden soll.
Mein Coffee-Script ist nun soweit, dass ich die selektierten PunktIDs in einem Array habe. Nun stehe ich aber vor dem Problem (wie im Bild verdeutlicht) nicht zu wissen welcher der erste und welcher der letzte Punkt auf der Kante ist.
Mein Lösungsansatz bislang ist zu prüfen wieviele Verbindungen ein selektierter Punkt zu den anderen selektierten Punkten hat. Die zwei, die nur eine Verbindung haben sind Anfang und Ende. Wie allerding kann ich prüfen ob zwei Punkt miteinander verbunden sind?
Oder: gibts eine einfachere Herangehensweise, z.B. eine Funktion die ich noch nicht entdeckt habe?

Danke Euch schonmal und Grüße
Rown
 

Anhänge

  • Punkte in Linie ausrichten.jpg
    Punkte in Linie ausrichten.jpg
    95,1 KB · Aufrufe: 24
im Zuge dieses Threats hier mein erstes Plugin-Script, das selektrierte Punkte auf dem gemeinsamen mittleren lokalen x-, y- oder z-Wert ausrichtet. Für mich sehr praktisch.
Code:
var sel, point_count, sel_count, i, sel_arr, sel_pos, point;
var i_arr=0;
if (op!=Null)
	{
	if (instanceof(op, PointObject))
		{
		sel=op->GetPointSelection();
		point_count=op->GetPointCount();
		sel_count=sel->GetCount();
		sel_pos=vector(0,0,0);
		if (int(sel_count)>int(1))
			{
			sel_arr=new(array,sel_count);
			for (i=0; i<point_count; i++)
				{
				if (sel->IsSelected(i))
					{
					sel_arr[i_arr]=i; i_arr++;
					}
				}
			for (i=0; i<sel_count; i++)
				{
				sel_pos=sel_pos+op->GetPoint(sel_arr[i]);
				println (sel_pos);
				}
			sel_pos=(sel_pos/int(sel_count));
			for (i=0; i<sel_count; i++)
				{
				point=op->GetPoint(sel_arr[i]);
				var new_pos=vector(sel_pos.x, point.y, point.z); 
				//nach y --> var new_pos=vector(point.x, sel_pos.y, point.z);
				//nach z --> var new_pos=vector(point.x, point.y, sel_pos.z);
				op->SetPoint(sel_arr[i], new_pos);
                                op->Message(MSG_UPDATE);
				}
			}
		}
	}

Grüße
Rown
 
Zuletzt bearbeitet:
hi,

Deine Mühe in Ehren... aber man könnte das auch mal rasch im Koordinatenmanager erledigen. Oder habe ich da was übersehen?
 
Hola Matthias,

wenn du das Plugin meinst, dann hast du recht. Das geht auch im Koordinatenmanager. Aber Punkte auswählen, dann mit der Maus in den KM, dann bei G.xyz 0 eintragen und dann bestätigen dauert länger als die drei Tastenkombis, auf die ich das jetzt für x, y, z gelegt habe und ich kann mit dem Auge auf dem Objekt bleiben. Ist nicht die tollste Ausbeute für ein Plugin, aber erleichtert das Arbeiten.

Grüße
Rown
 

Neue Beiträge

Zurück