Bool SDKGradientClass::Init(GeListNode *node) { BaseContainer *data = ((BaseShader*)node)->GetDataInstance(); AutoAlloc<Gradient> gradient; if (!gradient) return FALSE; GradientKnot k1,k2; k1.col =Vector(0.0,0.0,1.0); k1.pos =0.0; k2.col =1.0; k2.pos =1.0; gradient->InsertKnot(k1); gradient->InsertKnot(k2); data->SetData(SDKGRADIENTSHADER_COLOR,GeData(CUSTOMDATATYPE_GRADIENT,gradient)); data->SetBool(SDKGRADIENTSHADER_CYCLE,FALSE); data->SetLong(SDKGRADIENTSHADER_MODE,0); data->SetReal(SDKGRADIENTSHADER_ANGLE,0.0); data->SetReal(SDKGRADIENTSHADER_TURBULENCE,0.0); data->SetReal(SDKGRADIENTSHADER_OCTAVES,5.0); data->SetReal(SDKGRADIENTSHADER_SCALE,1.0); data->SetReal(SDKGRADIENTSHADER_FREQ,1.0); data->SetBool(SDKGRADIENTSHADER_ABSOLUTE,FALSE); return TRUE; }
Bool BitmapData::Init(GeListNode *node) { shader=NULL; BaseContainer *data = ((BaseShader*)node)->GetDataInstance(); data->SetReal(BITMAPDISTORTIONSHADER_NOISE,0.0); data->SetReal(BITMAPDISTORTIONSHADER_OCTAVES,1.0); data->SetReal(BITMAPDISTORTIONSHADER_SCALE,1.0); data->SetLink(BITMAPDISTORTIONSHADER_TEXTURE,NULL); return TRUE; }
Bool Objectify::Init(GeListNode *node) { BaseObject *op = (BaseObject*)node; BaseContainer *data = op->GetDataInstance(); data->SetReal(TRIANGULATION_MAX_SEARCH_RADIUS,30.); GePrint("Objectify by http://twitter.com/eight_io for Cinema 4D r14"); prevFrame = 0; return TRUE; }
// initialize settings Bool AtomObject::Init(GeListNode *node) { BaseObject *op = (BaseObject*)node; BaseContainer *data = op->GetDataInstance(); data->SetReal(ATOMOBJECT_SRAD,5.0); data->SetReal(ATOMOBJECT_CRAD,2.0); data->SetLong(ATOMOBJECT_SUB,8); data->SetBool(ATOMOBJECT_SINGLE,FALSE); return TRUE; }
// go through every (child) object static Bool Recurse(HierarchyHelp *hh, BaseThread *bt, BaseObject *main, BaseObject *op, const Matrix &ml, Real srad, Real crad, LONG sub, Bool single) { // test if input object if polygonal if (op->GetType()==Opolygon) { BaseObject *tp = NULL; PolyInfo *pli = NULL; const Vector *padr = ToPoly(op)->GetPointR(); Vector pa,pb; LONG pcnt = ToPoly(op)->GetPointCount(),i,side,a=0,b=0; const CPolygon *vadr = ToPoly(op)->GetPolygonR(); LONG vcnt = ToPoly(op)->GetPolygonCount(); Matrix m; Neighbor n; // load names from resource String pstr = GeLoadString(IDS_ATOM_POINT); String estr = GeLoadString(IDS_ATOM_EDGE); // initialize neighbor class if (!n.Init(pcnt,vadr,vcnt,NULL)) return FALSE; // create separate objects // if this option is enabled no polygonal geometry is build - more parametric objects // are returned instead if (single) { for (i=0; i<pcnt; i++) { // alloc sphere primitive tp=BaseObject::Alloc(Osphere); if (!tp) return FALSE; // add phong tag if (!tp->MakeTag(Tphong)) return FALSE; tp->SetName(pstr+" "+LongToString(i)); // set object parameters BaseContainer *bc = tp->GetDataInstance(); bc->SetReal(PRIM_SPHERE_RAD,srad); bc->SetReal(PRIM_SPHERE_SUB,sub); // insert as last object under main tp->InsertUnderLast(main); // set position in local coordinates tp->SetRelPos(padr[i]*ml); } for (i=0; i<vcnt; i++) { // get polygon info for i-th polygon pli = n.GetPolyInfo(i); for (side=0; side<4; side++) { // only proceed if edge has not already been processed // and edge really exists (for triangles side 2 from c..d does not exist as c==d) if (pli->mark[side] || side==2 && vadr[i].c==vadr[i].d) continue; // alloc cylinder primitive tp=BaseObject::Alloc(Ocylinder); if (!tp) return FALSE; // add phong tag if (!tp->MakeTag(Tphong)) return FALSE; switch (side) { case 0: a=vadr[i].a; b=vadr[i].b; break; case 1: a=vadr[i].b; b=vadr[i].c; break; case 2: a=vadr[i].c; b=vadr[i].d; break; case 3: a=vadr[i].d; b=vadr[i].a; break; } tp->SetName(estr+" "+LongToString(pli->edge[side])); pa = padr[a]*ml; pb = padr[b]*ml; // set object parameters BaseContainer *bc = tp->GetDataInstance(); bc->SetReal(PRIM_CYLINDER_RADIUS,crad); bc->SetReal(PRIM_CYLINDER_HEIGHT,Len(pb-pa)); bc->SetReal(PRIM_AXIS,4); bc->SetLong(PRIM_CYLINDER_CAPS,FALSE); bc->SetLong(PRIM_CYLINDER_HSUB,1); bc->SetLong(PRIM_CYLINDER_SEG,sub); // place cylinder at edge center tp->SetRelPos((pa+pb)*0.5); // build edge matrix m.v3=!(pb-pa); RectangularSystem(m.v3,&m.v1,&m.v2); tp->SetRelRot(MatrixToHPB(m, tp->GetRotationOrder())); // insert as last object under main tp->InsertUnderLast(main); } } } else { // check if polygonal geometry has to be built tp = BuildPolyHull(ToPoly(op),ml,srad,crad,sub,hh->GetLOD(),&n,bt); if (tp) { tp->SetName(op->GetName()); tp->InsertUnderLast(main); // check if isoparm geometry has to be built if (hh->GetBuildFlags()&BUILDFLAGS_ISOPARM) { LineObject *ip = BuildIsoHull(ToPoly(op),ml,srad,crad,sub,hh->GetLOD(),&n,bt); // isoparm always needs to be set into a polygon object if (ip) tp->SetIsoparm(ip); } } } } for (op=op->GetDown(); op; op=op->GetNext()) if (!Recurse(hh,bt,main,op,ml*op->GetMl(),srad,crad,sub,single)) return FALSE; // check for user break return !bt || !bt->TestBreak(); }