void ApplinkImporter::InsertTextureTag(PolygonObject* pObj, String mat, String& name) { TextureTag* txttag = TextureTag::Alloc(); txttag->SetMaterial(doc->SearchMaterial(mat)); BaseContainer bc = txttag->GetData(); bc.SetLong(TEXTURETAG_PROJECTION, TEXTURETAG_PROJECTION_UVW); bc.SetLong(TEXTURETAG_SIDE, TEXTURETAG_SIDE_FRONT); bc.SetString(TEXTURETAG_RESTRICTION, name); bc.SetLong(TEXTURETAG_TILE, 1); txttag->SetData(bc); pObj->InsertTag(txttag, this->GetLastTag(pObj)); txttag->Message(MSG_UPDATE); }
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 ListViewDialog::InitValues(void) { // first call the parent instance if (!GeDialog::InitValues()) return FALSE; BaseContainer layout; BaseContainer data; LONG i=0; layout.SetLong('name',LV_COLUMN_TEXT); // layout.SetLong('used',LV_COLUMN_CHECKBOX); listview1.SetLayout(1,layout); layout = BaseContainer(); layout.SetLong('chck',LV_COLUMN_CHECKBOX); layout.SetLong('name',LV_COLUMN_TEXT); layout.SetLong('bttn',LV_COLUMN_BUTTON); listview2.SetLayout(3,layout); data = BaseContainer(); for (i=0;testdata[i].id;i++) { data.SetString('name',testdata[i].name); //data.SetLong('used',FALSE); listview1.SetItem(testdata[i].id,data); } //data = BaseContainer(); //for (i=0;testdata[i].id;i++) //{ // data.SetLong('chck',TRUE); // data.SetString('name',testdata[i].name); // data.SetString('bttn',"..."); // listview2.SetItem(testdata[i].id,data); //} listview1.DataChanged(); listview2.DataChanged(); UpdateButtons(); return TRUE; }
Bool Voxelify::Init(GeListNode *node) { BaseObject *op = (BaseObject*)node; BaseContainer *data = op->GetDataInstance(); //data->SetReal(CTTSPOBJECT_MAXSEG,1000.); //data->SetReal(CTTSPOBJECT_MINSEG,0.1); data->SetLong(SPLINEOBJECT_INTERPOLATION,SPLINEOBJECT_INTERPOLATION_ADAPTIVE); GePrint("Voxelify by http://twitter.com/eight_io for Cinema 4D r14"); 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; }
LONG CSVNodeData::FillPortsMenu(GvNode* node, BaseContainer& names, BaseContainer& ids, GvValueID value_type, GvPortIO flag, LONG firstId) { // Validate the passed flag. switch (flag) { case GV_PORT_INPUT: case GV_PORT_OUTPUT: break; case GV_PORT_INVALID: case GV_PORT_INPUT_OR_GEDATA: default: // DEBUG: GePrint(__FUNCTION__ ": Invalid flag passed. (" + LongToString(flag) + ")"); return 0; } // end switch // Retrieve a list of already available ports. AutoAlloc<GvPortList> availPorts; if (!availPorts) return 0; // memory error node->GetPortList(flag, availPorts); // Iterate over all ports available ports and yield them. LONG countAdded = 0; for (LONG i=0; g_csvports[i].id != 0; i++) { const CSVPort& port = g_csvports[i]; // Skip this port if it is not requested (eg. an INPORT, but only // OUTPORTs are requested). if (port.inport && flag != GV_PORT_INPUT) continue; if (!port.inport && flag != GV_PORT_OUTPUT) continue; // Check if the port already exists. Bool exists = NodeHasPort(node, port.id, flag); // Fill in the menu containers. String name = GeLoadString(port.id) + String(exists ? "&d&" : ""); names.SetString(firstId + i, name); ids.SetLong(firstId + i, port.id); countAdded++; } // Add the CSV Table's output ports. if (flag == GV_PORT_OUTPUT && m_table.Loaded()) { LONG colCount = m_table.GetColumnCount(); GeData forceCols, forceColsCount; node->GetParameter(CSVNODE_FORCEOUTPORTS, forceCols, DESCFLAGS_GET_0); node->GetParameter(CSVNODE_FORCEOUTPORTS_COUNT, forceColsCount, DESCFLAGS_GET_0); if (forceCols.GetBool() && forceColsCount.GetLong() > colCount) { colCount = forceColsCount.GetLong(); } for (LONG i=0; i < colCount; i++) { // Compute the port id and check if the port already exists. LONG portId = CSVNODE_DYNPORT_START + i; Bool exists = NodeHasPort(node, portId, flag); // Compute the name of the port. String name = GetTableColumnPortName(i); names.SetString(firstId + portId, name + String(exists ? "&d&" : "")); ids.SetLong(firstId + portId, portId); countAdded++; } } return countAdded; }
Bool ListViewDialog::Command(LONG id,const BaseContainer &msg) { switch (id) { case GADGET_LISTVIEW1: case GADGET_LISTVIEW2: { switch (msg.GetLong(BFM_ACTION_VALUE)) { case LV_SIMPLE_SELECTIONCHANGED: GePrintF("Selection changed, id: %d, val: %p ",msg.GetLong(LV_SIMPLE_ITEM_ID),msg.GetVoid(LV_SIMPLE_DATA)); break; case LV_SIMPLE_CHECKBOXCHANGED: GePrintF("CheckBox changed, id: %d, col: %d, val: %p",msg.GetLong(LV_SIMPLE_ITEM_ID),msg.GetLong(LV_SIMPLE_COL_ID),msg.GetVoid(LV_SIMPLE_DATA)); break; case LV_SIMPLE_FOCUSITEM: GePrintF("Focus set id: %d, col: %d",msg.GetLong(LV_SIMPLE_ITEM_ID),msg.GetLong(LV_SIMPLE_COL_ID)); break; case LV_SIMPLE_BUTTONCLICK: GePrintF("Button clicked id: %d, col: %d",msg.GetLong(LV_SIMPLE_ITEM_ID),msg.GetLong(LV_SIMPLE_COL_ID)); break; } } UpdateButtons(); break; // case GADGET_LISTVIEW2: // break; case GADGET_INSERT: { AutoAlloc<BaseSelect> s2; if (selection && s2) { // TEST LONG i,id,count = listview1.GetItemCount(); BaseContainer test; for (i=0;i<count;i++) { listview1.GetItemLine(i,&id,&test); } // TEST if (!listview1.GetSelection(selection)) { GePrint("No Selection"); } else { LONG i,a,b; String str; for (i=0;selection->GetRange(i,MAXLONGl,&a,&b);i++) { if (a==b) str += LongToString(a)+" "; else str += LongToString(a)+"-"+LongToString(b)+" "; } // str.Delete(str.GetLength()-1,1); GePrint("Selection: "+str); BaseContainer data; for (i=0;testdata[i].id;i++) { if (selection->IsSelected(testdata[i].id)) { data.SetLong('chck',TRUE); data.SetString('name',testdata[i].name); data.SetString('bttn',"..."); selection->Select(counter2); listview2.SetItem(counter2++,data); } } listview2.SetSelection(selection); listview2.DataChanged(); } } } UpdateButtons(); break; case GADGET_REMOVE: { if (selection && listview2.GetSelection(selection)) { LONG i,a,b; for (i=0;selection->GetRange(i,MAXLONGl,&a,&b);i++) { for (;a<=b;a++) { listview2.RemoveItem(a); } } listview2.DataChanged(); } } UpdateButtons(); break; } 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(); }