///////////////////////////////////////////////////// ///////////////////////////////////////////////////// // // FillLayer // ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// //#include "precomp.h" #include "CKAll.h" CKObjectDeclaration *FillBehaviorFillLayerDecl(); CKERROR CreateFillLayerProto(CKBehaviorPrototype **); int FillLayer(const CKBehaviorContext& behcontext); CKObjectDeclaration *FillBehaviorFillLayerDecl() { CKObjectDeclaration *od = CreateCKObjectDeclaration("Fill Layer"); od->SetDescription("Fills a specific layer type with some value."); /* rem: In : triggers the process.
Out : is activated when the process is completed.

Layer : Layer to be concidered.
Value : Value to be put on each square.


*/ /* warning: - by now the only possible values are bound to a 0-255 range.
*/ od->SetType( CKDLL_BEHAVIORPROTOTYPE ); od->SetCategory("Grids/Basic"); od->SetGuid(CKGUID(0x513344bb,0x6b943d9f)); od->SetAuthorGuid(VIRTOOLS_GUID); od->SetAuthorName("Virtools"); od->SetVersion(0x00010000); od->SetCreationFunction(CreateFillLayerProto); od->SetCompatibleClassId(CKCID_BEOBJECT); return od; } CKERROR CreateFillLayerProto(CKBehaviorPrototype **pproto) { CKBehaviorPrototype *proto = CreateCKBehaviorPrototype("Fill Layer"); if(!proto) return CKERR_OUTOFMEMORY; proto->DeclareInput("In"); proto->DeclareOutput("Out"); proto->DeclareInParameter("Layer", CKPGUID_LAYERTYPE, DEFAULT_LAYER_NAME ); proto->DeclareInParameter("Value", CKPGUID_INT, "255" ); proto->SetFlags(CK_BEHAVIORPROTOTYPE_NORMAL); proto->SetFunction(FillLayer); *pproto = proto; return CK_OK; } int FillLayer(const CKBehaviorContext& behcontext) { CKBehavior* beh = behcontext.Behavior; CKContext* ctx = behcontext.Context; beh->ActivateInput(0, FALSE); beh->ActivateOutput(0); //_________________________________/ Retrieve Inputs int layer_type=1; beh->GetInputParameterValue(0, &layer_type); int value = 255; beh->GetInputParameterValue(1, &value); //_________________________________/ Get Grids CKGridManager *gm = (CKGridManager *) ctx->GetManagerByGuid(GRID_MANAGER_GUID); CKGrid *grid; const XObjectPointerArray& array = gm->GetGridArray(); for (CKObject** o = array.Begin(); o != array.End(); ++o) { if( grid = (CKGrid*)*o ){ if( grid->IsActive() ){ CKLayer *layer = grid->GetLayer( layer_type ); if( layer ){ CKSquare *square = layer->GetSquareArray(); if( value>255 ) value=255; else if( value<0 ) value=0; //____________________________/ Fill Layer CKSquare *squarefinal = square + grid->GetWidth() * grid->GetLength(); while( squareival = value; ++square; } } } } } return CKBR_OK; }