Exemple #1
0
void CSSplitter::SetSplitterPos(UINT nPos)
{
	CRect rc;
	GetClientRect(&rc);
	ApplyConstraints(nPos, rc.Width());
	if (m_SplitterPos != nPos)
	{
		m_SplitterPos = nPos;
		MovePanes();
	}
}
Exemple #2
0
CRect CSSplitter::GetSplitterRect(UINT SplitterPos)
{
	CRect retRC;
	GetClientRect(&retRC);
	ApplyConstraints(SplitterPos, retRC.Width());
	if (m_bVertSplitter)
	{
		retRC.left += SplitterPos;
		retRC.right = retRC.left + m_nSplitterWidth;
	}
	else
	{
		retRC.top += SplitterPos;
		retRC.bottom = retRC.top + m_nSplitterWidth;
	}
	return retRC;
}
Exemple #3
0
int main(int argc, char *argv[])
{
	if ( argc != 3 )
    {
        std::cout<<"usage: "<< argv[0] <<" <input file> <output file>\n";
        return 1;
    }
	
	std::ifstream infile(argv[1]);
	std::ofstream outfile(argv[2]);
	
	float poissonRatio, youngModulus;
	infile >> poissonRatio >> youngModulus;

	Eigen::Matrix3f D;
	D <<
		1.0f,        	poissonRatio,	0.0f,
		poissonRatio,	1.0,         	0.0f,
		0.0f,        	0.0f,        	(1.0f - poissonRatio) / 2.0f;

	D *= youngModulus / (1.0f - pow(poissonRatio, 2.0f));

	infile >> nodesCount;
	nodesX.resize(nodesCount);
	nodesY.resize(nodesCount);

	for (int i = 0; i < nodesCount; ++i)
	{
		infile >> nodesX[i] >> nodesY[i];
	}

	int elementCount;
	infile >> elementCount;

	for (int i = 0; i < elementCount; ++i)
	{
		Element element;
		infile >> element.nodesIds[0] >> element.nodesIds[1] >> element.nodesIds[2];
		elements.push_back(element);
	}

	int constraintCount;
	infile >> constraintCount;

	for (int i = 0; i < constraintCount; ++i)
	{
		Constraint constraint;
		int type;
		infile >> constraint.node >> type;
		constraint.type = static_cast<Constraint::Type>(type);
		constraints.push_back(constraint);
	}

	loads.resize(2 * nodesCount);
	loads.setZero();

	int loadsCount;
	infile >> loadsCount;

	for (int i = 0; i < loadsCount; ++i)
	{
		int node;
		float x, y;
		infile >> node >> x >> y;
		loads[2 * node + 0] = x;
		loads[2 * node + 1] = y;
	}
	
	std::vector<Eigen::Triplet<float> > triplets;
	for (std::vector<Element>::iterator it = elements.begin(); it != elements.end(); ++it)
	{
		it->CalculateStiffnessMatrix(D, triplets);
	}

	Eigen::SparseMatrix<float> globalK(2 * nodesCount, 2 * nodesCount);
	globalK.setFromTriplets(triplets.begin(), triplets.end());

	ApplyConstraints(globalK, constraints);

	Eigen::SimplicialLDLT<Eigen::SparseMatrix<float> > solver(globalK);

	Eigen::VectorXf displacements = solver.solve(loads);

	outfile << displacements << std::endl;

	for (std::vector<Element>::iterator it = elements.begin(); it != elements.end(); ++it)
	{
		Eigen::Matrix<float, 6, 1> delta;
		delta << displacements.segment<2>(2 * it->nodesIds[0]),
		         displacements.segment<2>(2 * it->nodesIds[1]),
		         displacements.segment<2>(2 * it->nodesIds[2]);

		Eigen::Vector3f sigma = D * it->B * delta;
		float sigma_mises = sqrt(sigma[0] * sigma[0] - sigma[0] * sigma[1] + sigma[1] * sigma[1] + 3.0f * sigma[2] * sigma[2]);

		outfile << sigma_mises << std::endl;
	}
	return 0;
}
Exemple #4
0
void CFastSplitter::MovePanes()
{
	if (m_hWnd == 0)
		return;
	ASSERT(m_mode < MOD_Last);

	CRect rect;
	GetClientRect(&rect);//GetRelativeRect());
	m_RealSplitterPos = m_SplitterPos;
	ApplyConstraints(m_RealSplitterPos, rect.Width(), rect.Height());
	CRect firstRc(rect);
	CRect secondRc(rect);
	m_SplitterRect.SetRect(0,0,0,0);
	if (!m_bVertSplitter)
	{
		switch (m_mode)
		{
		case MOD_Normal:
			firstRc.bottom = firstRc.top + m_RealSplitterPos;
			secondRc.top = firstRc.bottom + m_nSplitterWidth;
			m_SplitterRect.SetRect(rect.left, firstRc.bottom, rect.right, secondRc.top - 1);
			break;
		case MOD_FirstMaximized:
			firstRc = rect;
			secondRc.top = secondRc.bottom;
			break;
		case MOD_SecondMaximized:
			firstRc.bottom = firstRc.top;
			secondRc = rect;
			break;
		}
	}
	else
	{
		switch (m_mode)
		{
		case MOD_Normal:
			firstRc.right = firstRc.left + m_RealSplitterPos;
			secondRc.left = firstRc.right + m_nSplitterWidth;
			m_SplitterRect.SetRect(firstRc.right, rect.top, secondRc.left - 1, rect.bottom);
			break;
		case MOD_FirstMaximized:
			firstRc = rect;
			secondRc.left = secondRc.right;
			break;
		case MOD_SecondMaximized:
			firstRc.right = firstRc.left;
			secondRc = rect;
			break;
		}
	}
	if (m_pFPane != NULL)
	{
		m_pFPane->SetParent(this);
		if (firstRc.Width() > 0 && firstRc.Height() > 0)
		{
			CRect rc;
			m_pFPane->GetWindowRect(&rc);
			ScreenToClient(&rc);
			if (rc != firstRc || !m_pFPane->IsWindowVisible())
				m_pFPane->SetWindowPos(0, firstRc.left, firstRc.top, firstRc.Width(), firstRc.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW);
		}
		else
			m_pFPane->ShowWindow(SW_HIDE);
	}
	if (m_pFPane != NULL)
	{
		m_pSPane->SetParent(this);
		if (secondRc.Width() > 0 && secondRc.Height() > 0)
		{
			CRect rc;
			m_pSPane->GetWindowRect(&rc);
			ScreenToClient(&rc);
			if (rc != secondRc || !m_pSPane->IsWindowVisible())
				m_pSPane->SetWindowPos(0, secondRc.left, secondRc.top, secondRc.Width(), secondRc.Height(), SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW);
		}
		else
			m_pSPane->ShowWindow(SW_HIDE);
	}
}