Example #1
0
t_node *add_plusplus(t_context *C)
{
	t_node *node_block = add_slider_int_special(C,"++",op_plusplus); 
	t_block *block = ( t_block *) node_block->data;
	t_brick *brick = block_brick_get(block,"++");
	brick->plug_out.state.open_out = 0;
	brick->plug_out.state.open_in = 0;

	return node_block;
}
Example #2
0
void *op_file_get_data( t_brick *brick, const char *name)
{
	t_block *block = brick->block;
	t_brick *brick_object = block_brick_get( block, "image");
	t_plug *plug = &brick_object->plug_intern;
	void *data = NULL;

	if(plug->data)
	{
		t_id *id = (t_id *) plug->data;
		t_node *node = id->node;
		data = node->data;
	}
	else
	{
		printf("op_file_get_data: can't get object\n");
	}
	return data;
}
Example #3
0
void __cls_plug_flow_operator_get(t_plug_mode mode,t_plug *plug,t_plug *plug_src)
{
	t_brick *brick = plug->brick;

	t_block *block = brick->block;

	t_brick *brick_indice = block_brick_get(block,"indice");
	t_brick *brick_result = block_brick_get(block,"result");

	t_plug *plug_result = &brick_result->plug_intern;
	t_plug *plug_indice = &brick_indice->plug_intern;

	t_lst *lst;
	t_vlst *vlst;

	// IN
	if(plug_src && mode == mode_in)
	{
		switch(plug_src->data_type)
		{
			// + LST
			case (dt_lst):
				
				// get lst
				lst = plug_src->data;

				// if lst
				if(lst)
				{
					if(!lst->current)
					{
						// set first
						if(lst->first)
						{
							lst->current = lst->first;
						}
					}
					else
					{
						t_link *link = lst->current;

						if(link->next)
						{
							lst->current = link->next;
						}
						else
						{
							//
						}

						//XXX change type

						plug_result->data_type=dt_camera;
						t_camera *camera=link->data;
						plug_result->data=camera;

					}
				}

				break;

			// +VLST

			case(dt_vlst):
				
				// get vlst
				vlst = plug_src->data;

				if(vlst)
				{
					t_plug _plug;
					_plug.data_type = dt_vector;

					// change type to vector
					if(brick_result->plug_intern.data_type != dt_vector)
						brick_type_change(brick_result,&_plug);

					// get indice
					int i = drf_int(plug_indice->data);

					// if < indice
					if(i < vlst->count)
					{
						t_vector *vector = plug_result->data;

						// get pointer
						float *ptr = vlst->data;
						// do pointer arithmetic
						vector->data = ptr + (vlst->length * i);

					}
					else
					{
						t_vector *vector = plug_result->data;
						set_int(plug_indice->data,vlst->count-1);
						float *ptr = vlst->data;
						vector->data = ptr + (vlst->length * (vlst->count-1));
					}

					t_plug *plug_result_out = &brick_result->plug_out;

					//XXX
					// open vector
					if(plug_result_out->is_connected)
					{
						t_plug *plug_vector = plug_get_dst(plug_result);

						if(plug_vector->data_type == dt_vector)
						{
							t_brick *brick_vector = plug_vector->brick;
							t_plug *plug_vector_in = &brick_vector->plug_in;

							// FLOW IN
							plug_vector_in->flow_in=1;

							t_block *block_vector = brick_vector->block;

							t_brick *brick_x = block_brick_get(block_vector,"x");
							t_brick *brick_y = block_brick_get(block_vector,"y");
							t_brick *brick_z = block_brick_get(block_vector,"z");

							brick_x->state.draw_value=1;
							brick_y->state.draw_value=1;
							brick_z->state.draw_value=1;

							brick_x->action = op_slider;
							brick_y->action = op_slider;
							brick_z->action = op_slider;
						}
					}
				}

				break;
				

			default:
				printf(">> %s\n",data_name_get(plug_src->data_type));
				break;
		}
	}
}
Example #4
0
void __cls_plug_flow_vector(t_plug_mode mode,t_plug *plug,t_plug *src_plug)
{
	t_brick *brick = plug->brick;
	t_block *block = brick->block;

	// get X Y Z bricks

	t_brick *brick_x = block_brick_get(block,"x");
	t_brick *brick_y;
	t_brick *brick_z;


	t_plug *plug_x;
	t_plug *plug_y;
	t_plug *plug_z;

	t_plug *plug_x_in;
	t_plug *plug_y_in;
	t_plug *plug_z_in;

	// Not All Vectors have x y z in block
	// Reset once
	if(brick_x && mode == mode_in)
	{
		brick_y = block_brick_get(block,"y");
		brick_z = block_brick_get(block,"z");


		plug_x = &brick_x->plug_intern;
		plug_y = &brick_y->plug_intern;
		plug_z = &brick_z->plug_intern;

		plug_x_in = &brick_x->plug_in;
		plug_y_in = &brick_y->plug_in;
		plug_z_in = &brick_z->plug_in;

		// CLOSE X Y Z
		plug_x_in->flow_in = 0;
		plug_y_in->flow_in = 0;
		plug_z_in->flow_in = 0;

		// RESET X Y Z
		plug_x->data = NULL;
		plug_y->data = NULL;
		plug_z->data = NULL;

		brick_x->state.draw_value = 0;
		brick_y->state.draw_value = 0;
		brick_z->state.draw_value = 0;
	}

	t_vector *vector;

	float *vector_data;

	if(src_plug)
	{
		t_data_type type = src_plug->data_type;

		switch(type)
		{
			// + VECTOR
			case dt_vector:

				vector = src_plug->data;
				vector_data = vector->data;


				//-- wait for initialisation from for loop
				if(vector_data)
				{
					t_context *C = ctx_get();
					if(C->ui->show_step) printf(":VECTOR is connected\n");
					plug_x->data = vector_data;
					plug_y->data = vector_data+1;
					plug_z->data = vector_data+2;

					// open x y z
					plug_x_in->flow_in = 1;
					plug_y_in->flow_in = 1;
					plug_z_in->flow_in = 1;

					brick_x->state.draw_value = 1;
					brick_y->state.draw_value = 1;
					brick_z->state.draw_value = 1;

					/*
					brick_x->cls->trigger(brick_x);
					brick_y->cls->trigger(brick_y);
					brick_z->cls->trigger(brick_z);
					*/
				}
				else
				{
					t_context *C = ctx_get();
					if(C->ui->show_step) printf(":VECTOR is NOT connected\n");
				}

				break;
				
			default:
				break;
		}
	}
	else
	{
	}
}
Example #5
0
void __cls_plug_flow_operator_for(t_plug_mode mode,t_plug *plug,t_plug *plug_src)
{
	t_context *C =ctx_get();

	t_plug *plug_in = plug->src;
	t_brick *brick = plug->brick;

	// get bricks
	t_block *block = brick->block;
	t_brick *brick_indice = block_brick_get(block,"indice");
	t_brick *brick_vector = block_brick_get(block,"vector");

	t_plug *plug_indice = &brick_indice->plug_intern;
	t_plug *plug_vector = &brick_vector->plug_intern;
	t_plug *plug_vector_in = &brick_vector->plug_in;

	int *data_indice = plug_indice->data;
	t_vector *vector = plug_vector->data;

	// IN
	if(mode == mode_in)
	{
		// reset vector
		vector->data = NULL;

		// if for connected
		if(plug_in->is_connected )
		{
			// get src
			t_plug *src_plug = plug_get_src(plug);
			t_data_type src_type = src_plug->data_type;

			t_vlst *vlst=NULL;

			switch(src_type)
			{
				// + VLST
				case dt_vlst:

					// SET VLST
					vlst = src_plug->data;

					// SET vector
					if(vlst)
					{
						vector->data = vlst->data;
						vector->type = vlst->data_type;
						vector->length = vlst->length;
					}

					break;
					
				default:
					plug_warning(plug,src_plug);
					break;
			}

			// SET VECTOR
			if(plug_vector_in->is_connected)
			{
				if(vlst)
				{
					// set vector, open for fisrt loop
					//if(!plug->is_eval)
					if(!for_init)
					//if(1==2)
					{

						if(C->ui->show_step) term_log(":FOR loop (INIT) %d",brick->counter);
						plug->is_eval = 1;
						for_init = 1;

						// get pointer
						float *ptr = vlst->data;

						// set pointer
						vector->data = ptr;

						// set indice
						*data_indice=0;

						t_plug *plug_vector_src = plug_vector_in->src;
						t_brick *brick_vector_src = plug_vector_src->brick;

						brick_vector_src->cls->trigger(brick_vector_src);

						


							t_lst *BRICKS = ctx_links_lst_get();
							lst_add(BRICKS,brick,"for");
					}
					else
					{
						if(brick->counter < vlst->count)
						{
							if(C->ui->show_step) term_log(":FOR loop %d",brick->counter);
							// get pointer
							float *ptr = vlst->data;

							// set pointer
							vector->data = ptr + (vlst->length * brick->counter);

							// set indice
							*data_indice=brick->counter;

							// get branch (all bricks)
							t_lst *lst=lst_new("lst");
							block_branch_get(0,lst,block);

							// reset states
							ctx_links_reset(C,lst);

							// add to loop
							t_lst *BRICKS = ctx_links_lst_get();

							t_link *l;
							t_brick *b;
							for(l=lst->first;l;l=l->next)
							{

								b = l->data;
								lst_add(BRICKS,l->data,b->name);
							}

							// free
							lst_free(lst);


							// counter ++
							brick->counter++;

						}
						else
						{
							//XXX
							vector->data = NULL;
							// reset counter
							brick->counter = 0;

							for_init=0;
						}
					}
				}
			}
			else
			{
				*data_indice = 0;

			}
		}
	}
}