コード例 #1
0
void OnBnClickedPrCyls()
{
  sgGetScene()->Clear();

  AddFloorInScene(80.0, 50.0, 20.0, 10.0, 5.0);

  for (int i=2;i<8;i++)
  {
    sgCCylinder* cy1 = sgCreateCylinder(i,2*i,24);
    //SetMaterialToObject(cy1,MATERIAL_METALL_GOLD_1+i);
    SG_VECTOR transV1 = {5*i,10,10};
    cy1->InitTempMatrix()->Translate(transV1);
    cy1->ApplyTempMatrix();
    cy1->DestroyTempMatrix();

    sgGetScene()->AttachObject(cy1);
    cy1->SetAttribute(SG_OA_COLOR,i);

    if (i%2)
      cy1->SetAttribute(SG_OA_DRAW_STATE,SG_DS_FRAME);
  }
}
コード例 #2
0
void  CCylinderEditCommand::OnEnter()
{
	if (!m_was_started)
		return;
	SWITCH_RESOURCE
		ASSERT(m_editable_cylinder);

	switch(m_scenar) {
	case 0:
		{
			ASSERT(m_r_panel);
			m_rad = m_r_panel->GetNumber();
			if (fabs(m_rad)<0.0001)
			{
				m_message.LoadString(IDS_ERROR_ZERO_RAD);
				m_app->PutMessage(IApplicationInterface::MT_ERROR,
					m_message);
				return;
			}
			else
				if (m_rad<-0.0001)
				{
					m_message.LoadString(IDS_ERROR_RAD_MUST_BE_POSIT);
					m_app->PutMessage(IApplicationInterface::MT_ERROR,
						m_message);
					return;
				}
			sgCCylinder* cyl = sgCreateCylinder(fabs(m_rad),fabs(m_cyl_geo.Height),
				m_cyl_geo.MeridiansCount);
			if (!cyl)
				return;

			cyl->InitTempMatrix()->Multiply(*m_matr);
			cyl->ApplyTempMatrix();
			cyl->DestroyTempMatrix();

			sgGetScene()->StartUndoGroup();
			sgGetScene()->DetachObject(m_editable_cylinder);
			sgGetScene()->AttachObject(cyl);
			sgGetScene()->EndUndoGroup();
			m_app->CopyAttributes(*cyl,*m_editable_cylinder);
			m_app->GetViewPort()->InvalidateViewPort();
		}
		break;
	case 1:
		{
			ASSERT(m_r_panel);
			m_height = m_r_panel->GetNumber();
			if (fabs(m_height)<0.0001)
			{
				m_message.LoadString(IDS_ERROR_ZERO_LENGTH);
				m_app->PutMessage(IApplicationInterface::MT_ERROR,
					m_message);
				return;
			}
			else
				if (m_height<-0.0001)
				{
					m_message.LoadString(IDS_ERROR_HEIGHT_MUST_BE_POSIT);
					m_app->PutMessage(IApplicationInterface::MT_ERROR,
						m_message);
					return;
				}
			sgCCylinder* cyl = sgCreateCylinder(fabs(m_cyl_geo.Radius),fabs(m_height),
				m_cyl_geo.MeridiansCount);
			if (!cyl)
				return;

			cyl->InitTempMatrix()->Multiply(*m_matr);
			cyl->ApplyTempMatrix();
			cyl->DestroyTempMatrix();

			sgGetScene()->StartUndoGroup();
			sgGetScene()->DetachObject(m_editable_cylinder);
			sgGetScene()->AttachObject(cyl);
			sgGetScene()->EndUndoGroup();
			m_app->CopyAttributes(*cyl,*m_editable_cylinder);
			m_app->GetViewPort()->InvalidateViewPort();
		}
		break;
	default:
		break;
	}

	m_app->StopCommander();
}