Example #1
0
void SetNodeReg::compare(const IntervalVector& root, const IntervalVector& box,const int& type, bool * flag,unsigned int op) {
	if(is_leaf()) { 
		//cout<<"leaf box: "<<root<<"of status: "<<status<<" box: "<<box<<endl;
		switch(op){
			case 0: 
				if(status != type){*flag = false;}
				break;
			case 1: 
				if(status == type){*flag = true;}
				break;
			case 2: 
				if(status == type){*flag = false;}
				break;
			}
	}
	else if(((op==0||op==2)&& (*flag)) || (op ==1 && !(*flag))) {
		if(root.intersects(right_box(box)))
		{right->compare(right_box(root),box,type,flag,op);}
		if(root.intersects(left_box(box)))
		{left->compare(left_box(root),box,type,flag,op);}
	}
	return;


}
Example #2
0
void SetNodeReg::cleave(const IntervalVector& box, Ctc& Ctcin, Ctc& Ctcout, const double eps) {
	if(is_leaf() && status == OUT)
		return;
	IntervalVector box1(box);
	IntervalVector box2(box);
    //try{Ctcin.contract(box1);}
    //catch(EmptyBoxException&){inter(OUT);return;}
    Ctcin.contract(box1);
    if(box1.is_empty()) {
        inter(OUT);
        return;
    }
    //try{Ctcout.contract(box2);}
    //catch(EmptyBoxException&){_union(IN);return;}
    Ctcout.contract(box2);
    if(box2.is_empty()) {
        _union(IN);return;
    }
			
	if(is_leaf()) {
		if(box[var].diam()>eps) {
			cut(box);
			left->cleave(left_box(box),Ctcin,Ctcout,eps);
			right->cleave(right_box(box),Ctcin,Ctcout,eps);
		}
		else
			status = inte(status,UNK);
	}
	else {
		left->cleave(left_box(box),Ctcin,Ctcout,eps);
		right->cleave(right_box(box),Ctcin,Ctcout,eps);
	}
}
Example #3
0
void SetNodeReg::cleave(const IntervalVector& box, Sep& sep, const double eps) {
	if(is_leaf() && status == OUT)
		return;
	IntervalVector box1(box);
	IntervalVector box2(box);
	sep.separate(box1,box2);
    if(box1.is_empty()){
        inter(OUT);
//        cout<<"box: "<<box<<" set to OUT"<<endl;
    }

    else if(box2.is_empty()){
        _union(IN);
        cout<<"box: "<<box<<" set to IN"<<endl;
    }


	else // continu until box1 and box2 are disjoint
	{	
		if(is_leaf()) {
			if(box[var].diam()>eps) {
				cut(box);
				left->cleave(left_box(box),sep,eps);
				right->cleave(right_box(box),sep,eps);
			}
			else
				status = inte(status,UNK);
		}
		else {
			left->cleave(left_box(box),sep,eps);
			right->cleave(right_box(box),sep,eps);
		}
	}
}
Example #4
0
void SetNodeReg::operator_ir(const IntervalVector& box,const IntervalVector& nodebox, NodeType valin, NodeType valout, bool op, double eps) {
	int r = Interset(box,nodebox);
	switch (r) {
		case 2:
			if(op && valin != IN) 
				inter(valin);
			else if(!op && valin!= OUT)
				_union(valin);
			break;
		case 1:
			if(is_leaf()) {
				if( box[var].diam()>eps) {
					cut(box);
					left->operator_ir(left_box(box),nodebox,valin,valout,op,eps);
					right->operator_ir(right_box(box),nodebox,valin,valout,op,eps);
				}
				else
					status = inte_in(status,UNK);
			}
			else {
				left->operator_ir(left_box(box),nodebox,valin,valout,op,eps);
				right->operator_ir(right_box(box),nodebox,valin,valout,op,eps);
			}
			break;
		case 0:
			if(op && valout!= IN) 
				inter(valout);
			else if(!op && valout!= OUT)
				_union(valout);
			break;
	}

}
Example #5
0
void SetNodeReg::visit_leaves(leaf_func func, const IntervalVector& nodebox) const {
	if(is_leaf())
		func(nodebox, status==IN? YES : (status==OUT? NO : MAYBE));
	else {
		left->visit_leaves(func, left_box(nodebox));
		right->visit_leaves(func, right_box(nodebox));
	}
}
Example #6
0
void SetNodeReg::getLeaf(vector<SetNodeReg*> * vecLeaf, vector<IntervalVector> * vecBox, const IntervalVector& curbox) {
	if(is_leaf()) {
		vecLeaf->push_back(this);
		vecBox->push_back(curbox);
	}
	else {
		right->getLeaf(vecLeaf,vecBox,right_box(curbox));
		left->getLeaf(vecLeaf,vecBox,left_box(curbox));
	}
}
Example #7
0
void SetNodeReg::findNeighbor(const IntervalVector& box,const IntervalVector& nbox,vector<SetNodeReg*> * neigh) {
	if(is_leaf()){
		if(box.intersects(nbox)  && box!=nbox ) 
			neigh->push_back(this);
	}
    else if(box.intersects(nbox)) {
            right->findNeighbor(right_box(box),nbox,neigh);
            left->findNeighbor(left_box(box),nbox,neigh);
        }
}
Example #8
0
void SetNodeReg::print(std::ostream& os, const IntervalVector& nodebox, int shift) const {
	if(is_leaf()) {
		for (unsigned int i=0; i<shift; i++) os << ' ';
		os << "* " << nodebox << endl;
	}
	else {
		for (int i=0; i<shift; i++) os << ' ';
		os  << nodebox << " " << to_string(status) << endl;
		left->print(os, left_box(nodebox), shift+2);
		right->print(os, right_box(nodebox), shift+2);
	}
}
Example #9
0
awl::main::exit_code const
example_main(
	awl::main::function_context const &
)
try
{
	sge::rucksack::testbed::object testbed{
		sge::window::title{
			FCPPT_TEXT("rucksack box test")
		}
	};

	sge::rucksack::viewport::adaptor viewport_box{
		testbed.systems().viewport_manager(),
		testbed.systems().renderer_device_core()
	};

	sge::rucksack::padding const padding{
		5
	};

	sge::rucksack::widget::box outer_box{
		sge::rucksack::axis::x,
		padding
	};

	viewport_box.child(
		outer_box
	);

	sge::rucksack::widget::box left_box(
		sge::rucksack::axis::y,
		padding
	);

	outer_box.push_back_child(
		left_box,
		sge::rucksack::alignment::left_or_top
	);

	sge::rucksack::widget::box right_box(
		sge::rucksack::axis::y,
		padding
	);

	outer_box.push_back_child(
		right_box,
		sge::rucksack::alignment::center
	);

	sge::rucksack::widget::dummy inner_sprite{
		sge::rucksack::axis_policy2{
			sge::rucksack::axis_policy{
				sge::rucksack::preferred_size{
					100
				}
			},
			sge::rucksack::axis_policy{
				sge::rucksack::preferred_size{
					50
				}
			}
		}
	};

	left_box.push_back_child(
		inner_sprite,
		sge::rucksack::alignment::center
	);

	sge::rucksack::widget::dummy inner_sprite2{
		sge::rucksack::axis_policy2{
			sge::rucksack::axis_policy{
				sge::rucksack::preferred_size{
					200
				}
			},
			sge::rucksack::axis_policy{
				sge::rucksack::preferred_size{
					50
				}
			}
		}
	};

	right_box.push_back_child(
		inner_sprite2,
		sge::rucksack::alignment::right_or_bottom
	);

	testbed.add_widget(
		viewport_box,
		sge::image::color::any::object{
			sge::image::color::predef::blue()
		}
	);

	testbed.add_widget(
		inner_sprite,
		sge::image::color::any::object{
			sge::image::color::predef::red()
		}
	);

	testbed.add_widget(
		inner_sprite2,
		sge::image::color::any::object{
			sge::image::color::predef::green()
		}
	);

	return
		testbed.run();
}
catch(
	fcppt::exception const &_error
)
{
	awl::show_error(
		_error.string()
	);

	return
		awl::main::exit_failure();
}
catch(
	std::exception const &_error
)
{
	awl::show_error_narrow(
		_error.what()
	);

	return
		awl::main::exit_failure();
}