Berechnung der Oberfläche eines Körpers

Hallo
Da ich im Forum keine bisherigen Besprechungen meines Problems gefunden habe, stelle ich nun meine Frage, ob man mit C4D irgendeine Möglichkeit hat (evtl. Plugin) die Oberfläche M2, eines Körpers zu berechnen?
Besten Dank für eure Tipps.
Gruss Roland

Jap, ich würde vorschlagen, du iterierst über jedes Polygon und rechnest von diesem die Fläche aus. LG, don

Sneaker hatte mal den Link zu einem solchen Script bei 3DFluff gepostet:
http://forum.3dfluff.com/showthread.php?t=53

Und dann gibt’s noch ein kürzeres Skript, dessen Verfasser ich leider nicht mehr weiß (und der auch nicht im //Kommentar des Skriptes zu finden ist):

Dot(v1, v2)
{
	return (v1.x*v2.x)+(v1.y*v2.y)+(v1.z*v2.z);
}

Heron(a, b, c)
{
	var ab = a-b;
	var ac = a-c;
	
	return sqrt((Dot(ab,ab)*Dot(ac,ac))-(Dot(ab,ac)*Dot(ab,ac)))*0.5;
}

main(doc, op)
{
	var pobj=doc->GetActiveObject();
	if(!pobj || pobj->GetType()!=Opolygon) return;

	var bs = pobj->GetPolygonSelection();

	var polys=pobj->GetPolygons();
	var area=0, i=0, pcnt=pobj->GetPolygonCount();

	if(bs->GetCount() == 0)
	{
		for(i=0; i<pcnt; i++)
		{
			var a = polys[i*4+0];
			var b = polys[i*4+1];
			var c = polys[i*4+2];
			var d = polys[i*4+3];

			area += Heron(pobj->GetPoint(a), pobj->GetPoint(b), pobj->GetPoint(c));

			if(c != d)
				area += Heron(pobj->GetPoint(c), pobj->GetPoint(d), pobj->GetPoint(a));
		}
		
		println("total "+tostring(area));
	}
	else
	{
		for(i=0; i<pcnt; i++)
		{
			if(bs->IsSelected(i))
			{
				var a = polys[i*4+0];
				var b = polys[i*4+1];
				var c = polys[i*4+2];
				var d = polys[i*4+3];

				area += Heron(pobj->GetPoint(a), pobj->GetPoint(b), pobj->GetPoint(c));

				if(c != d)
					area += Heron(pobj->GetPoint(c), pobj->GetPoint(d), pobj->GetPoint(a));
			}
		}

		println("selected "+tostring(area));
	}
}

Bei dieser Variante erscheint das Flächenergebnis in der Konsole, nicht in einem Benachrichtigungs-Fenster wie beim anderen Skript.

LG Knut

Hallo Knut
Thanks - jetzt muesste ich nur noch wissen, wie ich das Script laden kann, bzw. wo ich es platzieren muss. Welche Endung (kopiert in TextEdit) muss das Script dann haben?
Gruss Roland

Entweder du kopierst es direkt in den Skript-Manager (Menü -> Fenster -> Skript-Manager) von C4D oder speicherst es mit der Endung .csc in den Skript-Ordner deines User-Verzeichnisses. Das User-Verzeichnis findest du am einfachsten in den Programm-Voreinstellungen (Allgemein -> Verzeichnis öffnen) von C4D.

LG Knut

Hallo Knut
Habe beide Varianten ausgeführt und weiss jetzt nicht, wo die Grösse jeweils angezeigt wird.
Was meinst du mit Konsole und Benachrichtigungsfenster?
Gruss Roland

Hallo rollart,

  1. Benachrichtungsfenster:

Objekt selektieren,
auf “Menü -> Plugins -> User-Skripte -> Object Surface Area” klicken,
dann sollte sich automatisch ein neues Fenster mit der Flächenangabe öffnen.

  1. Konsole

Die Konsole öffnen: “Menü -> Fenster -> Konsole” (oder shift-F10),
im Konsolenmenü auf Datei -> Löschen klicken (macht die Sache übersichtlicher),
Objekt selektieren,
auf “Menü -> Plugins -> User-Skripte -> surface area” (bzw. der Name, unter dem du das Skript gespeichert hast) klicken,
dann sollte in der Konsole die Flächenangabe stehen.

LG Knut

Hallo Knut

Alles Bestens.
Nochmals vielen Dank.
Ciao Roland

es gibt auch ein plugin das die Fläche einer Polygonauswahl, selektion oder des ganzen körpers berechnet,
oder das Volumen eines Geschlossenen Körpers

das Plugin heißt “VSM4D”
müsstest du über google finden

MFG sTITh

Hallo sTITh
Alle in Google aufgefuehrten Links fuer VSM4D auf mehrheitlich französische sites sind ungültig.
Tja, scheint ein älteres Tool zu sein.
Gruss Roland

Leider. Ist von Majoul. Ich hab erst neulich Mr_Vue von ihm gesucht (kann alle Materialien abschalten und ein “Nacktes” dafür anzeigen und rendern), aber der Kerl ist verschollen.

CU
Michael

http://www.geocities.jp/westy_net/tools/coffee/coffee_archives01.htm

hier gibt es noch die scripte AreaInfo und VolumeInfo

CU CoolWorx

ungefähr so: For Sale Domain: cgnetwork.de ?

Hi.

Ich habe jetzt schon ne ganze weile rumprobiert, werde aber nicht richtig schlau.
Wo kann ich einen Divisor einsetzten?
Folgendes Problem:

Die ausgegebenen Fläche ist: 69069328,000000
Ich brauche das ganze aber durch 1000000 geteilt.

Könnte mir jemand weiterhelfen?

Gruß Janne

Alles klar, kaum gepostet, habe ich es doch selber hinbekommen :biggthumpup:
return (sqrt((Dot(ab,ab)*Dot(ac,ac))-(Dot(ab,ac)*Dot(ab,ac)))*0.5)/1000000;

Jetzt stellt sich nur noch ein weiteres Problem. Wie kann ich die Ausgabe auf 2 Nachkommastellen kürzen?
Spielt dabei keine rolle ob es gerundet wird oder einfach nur optisch beschnitten wird.

Gruß Janne

Kenne mich mit COFFEE nicht aus, aber die ist afaik doch C++ - basiert, oder? Ersetze die Zeile mal durch folgende zwei:

var tRes = (sqrt((Dot(ab,ab)*Dot(ac,ac))-(Dot(ab,ac)*Dot(ab,ac)))*0.5)/1000000;
return floor(tRes * 100)/100;

air

Ich bumpe mal diesen Uraltthread nach oben:

Weiß jemand ob es möglich ist die Oberfläche eines Polygonobjektes in Xpresso zu berechnen? Und wenn ja wie?

Ich finde gerade keine Lösung dafür.

Viele Grüße

Plugin von vonc?

Hi,
danke! Ja das habe ich auch schon gefunden. In meinem Fall wäre es schön, wenn es in Xpresso ginge, weil ich es in ein Setup integrieren möchte. Aber geht auch so. Warhscheinlich muss man das Python in Xpresso implementieren