Esempio n. 1
0
void Layout::synchronizeItem(Item*& layoutItem, Item*& externalItem, Model::Node* node)
{
	// When refactoring this method have in mind that layoutItem might point to the same item as externalItem.


	if (externalItem != layoutItem)
	{
		SAFE_DELETE_ITEM(layoutItem);
		setUpdateNeeded();
	}

	if (externalItem && externalItem->node() != node )
	{
		SAFE_DELETE_ITEM(externalItem);
		layoutItem = nullptr; // One of the safe deletes above deleted this item
		setUpdateNeeded();
	}

	if (!externalItem && node)
	{
		externalItem = renderer()->render(nullptr, node);
		externalItem->setParentItem(this);
		layoutItem = externalItem;
		setUpdateNeeded();
	}
}
Esempio n. 2
0
void PoseLerpNodeInstance::update(){
	try {
		real64 blend_factor= factorIn->get();
		
		if (limitFactorIn->get())
			blend_factor= util::limited(blend_factor, 0.0, 1.0);
		
		auto pose1= input1->get().getLocalInBindPose();
		auto pose2= input2->get().getLocalInBindPose();

		animation::ArmaturePose::Pose result_pose;

		if (!pose1.empty() && !pose2.empty()){
			result_pose= lerp(pose1, pose2, blend_factor);
		}
		else { // Poses not delivered properly to inputs
			if (!pose1.empty())
				result_pose= pose1;
			else if (!pose2.empty())
				result_pose= pose2;
		}

		if (!result_pose.empty()){	
			resultOut->send(
				animation::ArmaturePose(input1->get().getArmature(), std::move(result_pose))
			);
		}
	}
	catch (global::Exception& e){
		print(debug::Ch::Nodes, debug::Vb::Moderate, "ArmaturePose lerp failed: %s", e.what());
	}
	
	setUpdateNeeded(false);
}
Esempio n. 3
0
void RollBotAiNode::create()
{
	aIn= addInputSlot<SignalType::RtTransform2>("acceleration");
	omegaIn= addInputSlot<SignalType::Real>("angularVelocity");
	torqueMulIn= addInputSlot<SignalType::Real>("torqueMul");
	wakeUpIn= addInputSlot<SignalType::Trigger>("wakeUp");
	timeAwakeIn= addInputSlot<SignalType::Real>("timeAwake");
	escapeIn= addInputSlot<SignalType::Vec2>("escape");
	positionIn= addInputSlot<SignalType::Vec2>("position");

	torqueOut= addOutputSlot<SignalType::Real>("torque");
	awakeOut= addOutputSlot<SignalType::Boolean>("awake");

	wantedDirection= 0;
	frustration= 0.0;
	lastOmega= 0.0;
	hardPushTimeout= 0.0;
	thinkingTimeout= 0.0;
	thinkingProbability= 0.0;
	startSleepingAfterThinking= false;
	sleeping= true;

	wakeUpTimer= 0.0;

	wakeUpIn->setOnReceiveCallback(MAKE_MOD_FPTR(callback_wakeUp));

	setUpdateNeeded(true);
}
Esempio n. 4
0
void AlignmentView::setLcbHover(int lcb, float offset)
{
	highlight = true;
	highlightLcb = lcb;
	highlightOffset = offset;
	setUpdateNeeded();
}
Esempio n. 5
0
void PanelBorderLayout::setContent(Item* content, bool deleteOldContent)
{
	if (content_ == content) return;

	if ( deleteOldContent ) SAFE_DELETE_ITEM(content_);
	else if (content_) content_->setParentItem(nullptr);

	if ( content ) content->setParentItem(this);
	content_ = content;
	setUpdateNeeded();
}
Esempio n. 6
0
void HMethod::keyPressEvent(Visualization::Item *target, QKeyEvent *event)
{
	bool createDown = event->modifiers() == Qt::NoModifier &&
			(event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return);
	bool createRight = event->modifiers() == Qt::ShiftModifier &&
			(event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return);
	//bool switchVertical = event->modifiers() == Qt::NoModifier && event->key() == Qt::Key_Tab;
	bool switchHorizontal = event->modifiers() == Qt::ShiftModifier && event->key() == Qt::Key_Tab;

	bool processed = false;
	auto m = dynamic_cast<OOVisualization::VMethod*> ( target );
	if (m)
	{
		if ( (m->name()->itemOrChildHasFocus() || m->arguments()->itemOrChildHasFocus()) && createDown)
		{
			processed = true;
			if (m->node()->items()->size() > 0)
			{
				target->scene()->addPostEventAction( new Interaction::SetCursorEvent(target, m->node()->items()->at(0)));
			}
			else
			{
				auto empty = new OOModel::EmptyExpression();
				auto es = new OOModel::ExpressionStatement();
				es->setExpression(empty);
				m->node()->model()->beginModification(m->node(), "add empty statement");
				m->node()->items()->append(es);
				m->node()->model()->endModification();

				m->setUpdateNeeded(Visualization::Item::StandardUpdate);
				target->scene()->addPostEventAction( new Interaction::SetCursorEvent(target, empty));
			}
		}
		else if (m->name()->itemOrChildHasFocus() && switchHorizontal)
		{
			processed = true;

			if (m->node()->arguments()->size() > 0)
			{
				target->scene()->addPostEventAction( new Interaction::SetCursorEvent(target,
						m->node()->arguments()->at(0)));
			}
		}
		else if ( (m->name()->itemOrChildHasFocus()) && createRight)
		{
			processed = true;
			createNewArgument(m, 0);
		}
	}

	if (!processed) GenericHandler::keyPressEvent(target, event);
}
void SrtTransform2RandomizeNodeInstance::update()
{
	util::SrtTransform2d t= transformIn->get();
	
	t.rotation += util::Rand::continuous(-rotBiasIn->get(), rotBiasIn->get());
	t.scale *= 1.0 + util::Rand::continuous(-scaleBiasIn->get(), scaleBiasIn->get());

	if (flipXIn->get() && util::Rand::discrete(0, 1) == 0)
		t.scale.x *= -1.0;

	transformOut->send(t);

	setUpdateNeeded(false);
}
Esempio n. 8
0
void RealAddNodeInstance::create()
{
	input1= addInputSlot<SignalType::Real>("input1");
	input2= addInputSlot<SignalType::Real>("input2");
	realOut= addOutputSlot<SignalType::Real>("result");

	auto recv= +[] (RealAddNodeInstance* self)
	{ self->realOut->send(self->input1->get() + self->input2->get()); };

	input1->setOnReceiveCallback(recv);
	input2->setOnReceiveCallback(recv);

	setUpdateNeeded(false);
}
Esempio n. 9
0
void PoseLerpNodeInstance::create(){
	input1= addInputSlot<SignalType::ArmaturePose>("input1");
	input2= addInputSlot<SignalType::ArmaturePose>("input2");
	factorIn= addInputSlot<SignalType::Real>("factor");
	limitFactorIn= addInputSlot<SignalType::Boolean>("limitFactor");
	
	resultOut= addOutputSlot<SignalType::ArmaturePose>("result");
	
	auto cb= +[] (PoseLerpNodeInstance* self){ self->setUpdateNeeded(); };
	input1->setOnReceiveCallback(cb);
	input2->setOnReceiveCallback(cb);
	factorIn->setOnReceiveCallback(cb);
	
	setUpdateNeeded(false);
}
Esempio n. 10
0
void AlignmentView::mouseMoveEvent(QMouseEvent * event)
{
	TrackListView::mouseMoveEvent(event);
	
	//float diff = qPow(qPow(event->pos().x() - getCursorX(), 2) + qPow(event->pos().y() - getCursorY(), 2), .5);
	
	cursorX = event->pos().x();
	cursorY = event->pos().y();
	
	cursorSize = 8;// + diff * 1000 / width();
	
	if ( cursorSize > 20 )
	{
		cursorSize = 20;
	}
	
	if
	(
		cursorX >= frameWidth() && cursorX < width() - frameWidth() * 2 &&
		cursorY >= frameWidth() && cursorY < height() - frameWidth() * 2
	)
	{
		highlightTrack = getTrackHover();
		//if ( highlightTrack == trackFocus )
		{
			highlight = true;
	//		float position = (float)x / (width() - frameWidth() * 2);
			int position = cursorX - frameWidth();
			int w = width() - frameWidth() * 2;
			highlightLcb = trackViews[highlightTrack].getLcb(position, w, highlightOffset);
			highlightRc = trackViews[highlightTrack].getRc() != trackViews[highlightTrack].getLcbRc(highlightLcb);
			
			setUpdateNeeded();
			signalLcbHoverChange(highlightLcb, highlightOffset);
		}
		//printf("%d (%d, %d): %d\n", highlightTrack, event->pos().x(), event->pos().y(), highlightLcb);
	}
	
	if ( cursorSize < 10 )
	{
//		cursorSize += 1;
	}
	
	//DrawingArea::update();
}
void SrtTransform2RandomizeNodeInstance::create()
{
	transformIn= addInputSlot<SignalType::SrtTransform2>("transform");
	rotBiasIn= addInputSlot<SignalType::Real>("rotBias");
	scaleBiasIn= addInputSlot<SignalType::Real>("scaleBias");
	flipXIn= addInputSlot<SignalType::Boolean>("flipX");

	transformOut= addOutputSlot<SignalType::SrtTransform2>("randomized");

	auto recv= +[] (SrtTransform2RandomizeNodeInstance* self)
	{ self->setUpdateNeeded(true); };
	transformIn->setOnReceiveCallback(recv);
	rotBiasIn->setOnReceiveCallback(recv);
	scaleBiasIn->setOnReceiveCallback(recv);
	flipXIn->setOnReceiveCallback(recv);

	setUpdateNeeded(false);
}
Esempio n. 12
0
void IPLProcess::requestUpdate()
{
    setUpdateNeeded(true);
    //notifyPropertyChangedEventHandler();
}
Esempio n. 13
0
void RootItem::setItem(Item* item)
{
	item_ = item;
	if (item_) item_->setParentItem(this);
	setUpdateNeeded(StandardUpdate);
}
Esempio n. 14
0
void ControlFlowItem::clearConnectors()
{
	connectors_.clear();
	arrowEndings_.clear();
	setUpdateNeeded();
}
Esempio n. 15
0
void ControlFlowItem::addConnector(QList< QPoint >& points, bool arrowEnding)
{
	connectors_.append(points);
	arrowEndings_.append(arrowEnding);
	setUpdateNeeded();
}
Esempio n. 16
0
void PanelBorderLayout::setPanel(bool enable, PanelLayout*& panel, const PanelLayoutStyle& style)
{
	if ( enable && !panel ) panel = new PanelLayout(this, &style);
	if ( !enable && panel ) SAFE_DELETE_ITEM(panel);
	setUpdateNeeded();
}