Mark
Cinema4D
Hi Ihr Lieben!
...hm, hat mich doch ein wenig gereizt:
Herr Hupf spielt mit dem Gedanken, direkt im neuen Browser "Titan 2.0" Cinema4D zu implementieren ... oder war es anders herum?!
Die "Unscharfe Suche" also folgend als Coffee-Plugin für Cinema4D: Unterhalb einer selektierten Hierarchie (im Screenshot "Präsidenten") werden die Objekte selektiert, dessen Name zur "unscharfen Suche" passen.
Bekannte Einschränkungen:
a) Groß-/Kleinschreibung wird beachtet (es gibt kein "lowercase" in Coffee
)
b) Auch Leerzeichen müssen im Objekt-Namen korrekt positioniert sein
Liebe Grüße,
Mark.
...hm, hat mich doch ein wenig gereizt:
Herr Hupf spielt mit dem Gedanken, direkt im neuen Browser "Titan 2.0" Cinema4D zu implementieren ... oder war es anders herum?!

Die "Unscharfe Suche" also folgend als Coffee-Plugin für Cinema4D: Unterhalb einer selektierten Hierarchie (im Screenshot "Präsidenten") werden die Objekte selektiert, dessen Name zur "unscharfen Suche" passen.
Bekannte Einschränkungen:
a) Groß-/Kleinschreibung wird beachtet (es gibt kein "lowercase" in Coffee

b) Auch Leerzeichen müssen im Objekt-Namen korrekt positioniert sein
Code:
// ============================================================================ //
// Unscharfe Selektion //
// (c) by mark@eggtion.net //
// //
// Beitrag zum Coding-Quiz #1 //
// http://www.tutorials.de/forum/diskussion/323776-quiz-1-unscharfe-suche.html //
// ============================================================================ //
var PLUGIN_ID = 1023043;
// ============================== //
// Dialog & Objekt-Selektion //
// ============================== //
class MyDialog : GeDialog
{
private:
var _doc;
var _op;
public:
MyDialog();
CreateLayout();
Init();
CoreMessage(id,msg);
Match(obj,search);
Search(obj,search);
Command(id,msg);
}
MyDialog::MyDialog()
{
super(PLUGIN_ID);
_op = NULL;
_doc = NULL;
}
MyDialog::CreateLayout()
{
SetTitle("Unscharfe Selektion");
AddGroupBeginV(4000, BFH_SCALEFIT, 1, "Group", 0);
{
AddGroupBorderSpace(4,4,4,4);
AddGroupBeginV(4000, BFH_SCALEFIT, 2, "Group", 0);
{
AddStaticText(1000, BFH_LEFT, 0, 0, "Suche", 0);
AddEditText(4001, BFH_SCALEFIT, 0, 0);
AddStaticText(1000, BFH_LEFT, 0, 0, "Selektiert", 0);
AddStaticText(4002, BFH_LEFT, 0, 0, "0 ", 0);
}
AddGroupEnd();
AddSeparatorH(0);
AddStaticText(1000, BFH_LEFT, 0, 0, "Beitrag zum Coding-Quiz #1 auf tutorials.de", 0);
AddStaticText(1000, BFH_LEFT, 0, 0, "(c) mark@eggtion.net", 0);
}
AddGroupEnd();
return TRUE;
}
MyDialog::Init()
{
var doc = GetActiveDocument(); if (!doc) return FALSE;
var op = GetActiveObject(doc);
_doc = doc;
_op = op;
return TRUE;
}
// Prüft, ob der Objektname zur unscharfen Suche passt
MyDialog::Match(obj, search)
{
var name = obj->GetName();
var spos = -1;
var npos = -1;
do
{
npos++;
spos++;
npos = strstr(name, strmid(search, spos, 1), npos);
}
while(npos != -1);
if (spos == sizeof(search)) return TRUE;
return FALSE;
}
// Durchsucht eine Hierarchie von Objekten
// Passt die unscharfe Suche, wird das Objekt selektiert
MyDialog::Search(obj, search)
{
var cnt = 0;
obj = obj->GetDown();
while(obj) {
if (Match(obj, search)) {
obj->SetBit(BIT_AOBJ);
cnt++;
} else {
obj->DelBit(BIT_AOBJ);
}
obj = obj->GetNext();
}
SetString(4002, tostring(cnt));
return TRUE;
}
MyDialog::Command(id,msg)
{
if (!_doc) return FALSE;
switch (id)
{
// die Suche-Eingabe ändert sich
case 4001:
{
if (!_op) return false;
Search(_op, GetString(4001));
break;
}
}
EventAdd();
_doc->Message(MSG_UPDATE);
return TRUE;
}
MyDialog::CoreMessage(id,msg)
{
switch (id)
{
// Änderungen durch den User
case NEW_DOCUMENT:
case DOCUMENT_CHANGED:
case NEW_ACTIVE_OBJECT:
case ACTIVE_OBJECT_CHANGED:
{
var oldop = _op;
Init();
if (_op != oldop) Search(_op, GetString(4001));
return TRUE;
}
break;
}
return FALSE;
}
// ============================== //
// C4D-MenuPlugin //
// ============================== //
class MyMenuPlugin : MenuPlugin
{
public:
MyMenuPlugin();
GetID();
GetName();
GetHelp();
GetState();
Execute(doc);
RestoreLayout(secret);
}
MyMenuPlugin::MyMenuPlugin()
{
super();
}
MyMenuPlugin::GetState()
{
return CMD_ENABLED;
}
MyMenuPlugin::GetID()
{
return PLUGIN_ID;
}
MyMenuPlugin::GetName()
{
return "Unscharfe Selektion";
}
MyMenuPlugin::GetHelp()
{
return "Selektiert Objekte anhand einer unscharfen Suche";
}
var d;
MyMenuPlugin::Execute(doc)
{
d->Open(TRUE, -1, -1);
}
MyMenuPlugin::RestoreLayout(secret)
{
if (!d) d = new(MyDialog);
d->RestoreLayout(secret);
}
// ============================== //
// Main //
// ============================== //
main()
{
d = new(MyDialog);
Register(MyMenuPlugin);
println("---------------------------------");
println("Unscharf selektieren registriert");
println("http://www.tutorials.de/forum/diskussion/323776-quiz-1-unscharfe-suche.html");
println("---------------------------------");
}
Liebe Grüße,
Mark.