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,
- Benachrichtungsfenster:
Objekt selektieren,
auf “Menü -> Plugins -> User-Skripte -> Object Surface Area” klicken,
dann sollte sich automatisch ein neues Fenster mit der Flächenangabe öffnen.
- 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 ![]()
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
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