public Model3DGroup CreateM_3D_G_NSupport() { // Rozpracovat vykreslovanie pre rozne typy podpor Model3DGroup model_gr = new Model3DGroup(); SolidColorBrush brush = new SolidColorBrush(Color.FromRgb(20, 250, 20)); brush.Opacity = 0.8f; // We need to transform CNode to Point3D //Point3D pTopEdge = new Point3D(Node.X, Node.Y, Node.Z); // Auxialiary - to call VOLUME functions CVolume volaux = new CVolume(); GeometryModel3D GeomModel3Daux = new GeometryModel3D(); RotateTransform3D RotateTrans3D = new RotateTransform3D(); TranslateTransform3D Translate3D = new TranslateTransform3D(); float fa = 0.2f; // Dimension in x / y float fh = 0.1f; // Dimension in z if (m_bRestrain[(int)ENSupportType.eNST_Ux] == false && m_bRestrain[(int)ENSupportType.eNST_Uy] == false && m_bRestrain[(int)ENSupportType.eNST_Uz] == false && m_bRestrain[(int)ENSupportType.eNST_Rx] == false && m_bRestrain[(int)ENSupportType.eNST_Ry] == false && m_bRestrain[(int)ENSupportType.eNST_Rz] == false) // No restraint { return null; } if (m_bRestrain[(int)ENSupportType.eNST_Ux] == true && m_bRestrain[(int)ENSupportType.eNST_Uy] == true && m_bRestrain[(int)ENSupportType.eNST_Uz] == true && m_bRestrain[(int)ENSupportType.eNST_Rx] == true && m_bRestrain[(int)ENSupportType.eNST_Ry] == true && m_bRestrain[(int)ENSupportType.eNST_Rz] == true) // Total restraint { GeomModel3Daux = volaux.CreateM_3D_G_Volume_8Edges(new Point3D(- 0.5f * fa, - 0.5f * fa, - 0.5f * fa),fa, fa, fa, new DiffuseMaterial(brush)); model_gr.Children.Add(GeomModel3Daux); } else if (m_bRestrain[(int)ENSupportType.eNST_Ux] == false && m_bRestrain[(int)ENSupportType.eNST_Uy] == false && m_bRestrain[(int)ENSupportType.eNST_Uz] == false && ( m_bRestrain[(int)ENSupportType.eNST_Rx] == true || m_bRestrain[(int)ENSupportType.eNST_Ry] == true || m_bRestrain[(int)ENSupportType.eNST_Rz] == true)) // Only rotational restraints { GeometryModel3D GeomModel3_RX = new GeometryModel3D(); GeomModel3_RX = volaux.CreateM_3D_G_Volume_8Edges(new Point3D(- 0.5f * fa, - 0.125f * fa, - 0.125f * fa), fa, 0.25f * fa, 0.25f * fa, new DiffuseMaterial(brush)); if (m_bRestrain[(int)ENSupportType.eNST_Rx] == true) // Rotational restraint around x-axis { // LCS and GCS of support are identical, we can add model to modelgroup model_gr.Children.Add(GeomModel3_RX); } if (m_bRestrain[(int)ENSupportType.eNST_Ry] == true) // Rotational restraint around y-axis { GeometryModel3D GeomModel3_RY = new GeometryModel3D(); GeomModel3_RY = GeomModel3_RX; // Rotate model around z-axis RotateTrans3D.Rotation = new AxisAngleRotation3D(new Vector3D(0, 0, 1), 90); GeomModel3_RY.Transform = RotateTrans3D; model_gr.Children.Add(GeomModel3_RY); } if (m_bRestrain[(int)ENSupportType.eNST_Rz] == true) // Rotational restraint around z-axis { GeometryModel3D GeomModel3_RZ = new GeometryModel3D(); GeomModel3_RZ = GeomModel3_RX; // Rotate model around y-axis RotateTrans3D.Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 90); GeomModel3_RZ.Transform = RotateTrans3D; model_gr.Children.Add(GeomModel3_RZ); } } else if (m_bRestrain[(int)ENSupportType.eNST_Uz] == true) { if (m_bRestrain[(int)ENSupportType.eNST_Ux] == false) { GeomModel3Daux = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.01f, 0.01f, new DiffuseMaterial(brush)); Translate3D = new TranslateTransform3D(- 0.5f * fa + 0.005f, - 0.5f * fa + 0.005f, - fh - 0.05f); GeomModel3Daux.Transform = Translate3D; model_gr.Children.Add(GeomModel3Daux); GeomModel3Daux = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.01f, 0.01f, new DiffuseMaterial(brush)); Translate3D = new TranslateTransform3D(- 0.5f * fa + 0.005f, + 0.5f * fa - 0.005f, - fh - 0.05f); GeomModel3Daux.Transform = Translate3D; model_gr.Children.Add(GeomModel3Daux); } if (m_bRestrain[(int)ENSupportType.eNST_Uy] == false) { // Rotate around z-axis RotateTrans3D.Rotation = new AxisAngleRotation3D(new Vector3D(0, 0, 1), 90); Transform3DGroup Trans3DGroup_1 = new Transform3DGroup(); Transform3DGroup Trans3DGroup_2 = new Transform3DGroup(); Trans3DGroup_1.Children.Add(RotateTrans3D); Trans3DGroup_2.Children.Add(RotateTrans3D); GeomModel3Daux = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.01f, 0.01f, new DiffuseMaterial(brush)); Translate3D = new TranslateTransform3D( - 0.5f * fa + 0.005f, - 0.5f * fa + 0.005f, - fh - 0.05f); Trans3DGroup_1.Children.Add(Translate3D); GeomModel3Daux.Transform = Trans3DGroup_1; model_gr.Children.Add(GeomModel3Daux); GeomModel3Daux = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.01f, 0.01f, new DiffuseMaterial(brush)); Translate3D = new TranslateTransform3D( + 0.5f * fa - 0.005f, - 0.5f * fa + 0.005f, - fh - 0.05f); Trans3DGroup_2.Children.Add(Translate3D); GeomModel3Daux.Transform = Trans3DGroup_2; model_gr.Children.Add(GeomModel3Daux); } if (m_bRestrain[(int)ENSupportType.eNST_Rx] == false && m_bRestrain[(int)ENSupportType.eNST_Ry] == false) { model_gr.Children.Add(volaux.CreateM_G_M_3D_Volume_5Edges(new Point3D(0, 0, 0), fa, fh, new DiffuseMaterial(brush))); model_gr.Children.Add(volaux.CreateM_3D_G_Volume_Sphere(new Point3D(0, 0, 0), 0.04f, new DiffuseMaterial(brush))); if (m_bRestrain[(int)ENSupportType.eNST_Rz] == false) { model_gr.Children.Add(volaux.CreateM_G_M_3D_Volume_Cylinder(new Point3D(0, 0, - 1.5f * fh), 0.25f * fa, 0.5f * fh, new DiffuseMaterial(brush))); } } else if (m_bRestrain[(int)ENSupportType.eNST_Rx] == true || m_bRestrain[(int)ENSupportType.eNST_Ry]) { // Support in point 0,0,0 model_gr.Children.Add(volaux.CreateM_G_M_3D_Volume_6Edges_CN(new Point3D(0, 0, 0), fa, fh, new DiffuseMaterial(brush))); GeomModel3Daux = volaux.CreateM_G_M_3D_Volume_Cylinder(new Point3D(0, 0, 0), 0.20f * fa, fa, new DiffuseMaterial(brush)); RotateTrans3D = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 90)); Translate3D = new TranslateTransform3D(new Vector3D(0, 0.5f * fa, 0)); Transform3DGroup Trans3DGroup = new Transform3DGroup(); Trans3DGroup.Children.Add(RotateTrans3D); Trans3DGroup.Children.Add(Translate3D); GeomModel3Daux.Transform = Trans3DGroup; model_gr.Children.Add(GeomModel3Daux); if (m_bRestrain[(int)ENSupportType.eNST_Ry]) { RotateTrans3D = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), 90)); //Translate3D = new TranslateTransform3D(new Vector3D(0, 0, 0)); Transform3DGroup Trans3DGroup2 = new Transform3DGroup(); Trans3DGroup2.Children.Add(RotateTrans3D); //Trans3DGroup2.Children.Add(Translate3D); model_gr.Transform = Trans3DGroup2; } } else { } } // Translate support from 0,0,0 to supported point coordinates in GCS Translate3D = new TranslateTransform3D(new Vector3D(Node.X, Node.Y, Node.Z)); model_gr.Transform = Translate3D; return model_gr; }
//--------------------------------------------------------------------------------- //--------------------------------------------------------------------------------- public Model3DGroup CreateM_3D_G_MNRelease() { // Rozpracovat vykreslovanie pre rozne typy klbov Model3DGroup model_gr = new Model3DGroup(); SolidColorBrush brush_Sphere = new SolidColorBrush(Color.FromRgb(200, 250, 250)); SolidColorBrush brushX = new SolidColorBrush(Color.FromRgb(150, 0, 0)); SolidColorBrush brushY = new SolidColorBrush(Color.FromRgb(0, 50, 0)); SolidColorBrush brushZ = new SolidColorBrush(Color.FromRgb(0, 0, 100)); brush_Sphere.Opacity = 0.8f; // Auxialiary - to call VOLUME functions CVolume volaux = new CVolume(); //GeometryModel3D GeomModel3Daux = new GeometryModel3D(); //RotateTransform3D RotateTrans3D = new RotateTransform3D(); TranslateTransform3D Translate3D = new TranslateTransform3D(); float fr_s = 0.05f; // Radius of basic shape - sphere float fa = 3 * fr_s; // Dimension - translation DOF dimension float fb = 0.1f * fa; // Dimension of base sides float fa_c = 2.5f * fr_s; // Dimension of cylinder - height of cylinder float fr_c = 0.3f * fr_s; // Radius of cylinder (rotational DOF) if (m_bRestrain[(int)ENSupportType.eNST_Ux] == true && m_bRestrain[(int)ENSupportType.eNST_Uy] == true && m_bRestrain[(int)ENSupportType.eNST_Uz] == true && m_bRestrain[(int)ENSupportType.eNST_Rx] == true && m_bRestrain[(int)ENSupportType.eNST_Ry] == true && m_bRestrain[(int)ENSupportType.eNST_Rz] == true) // Total restraint { // No release - nothing to display return null; } else { // Basic sphere model_gr.Children.Add(volaux.CreateM_3D_G_Volume_Sphere(new Point3D(0, 0, 0), fr_s, new DiffuseMaterial(brush_Sphere))); // Rotational release around local x-axis if (m_bRestrain[(int)ENSupportType.eNST_Rx] == false) { GeometryModel3D GeomModel3_RX = new GeometryModel3D(); GeomModel3_RX = volaux.CreateM_G_M_3D_Volume_Cylinder(new Point3D(0, 0, 0), fr_c, fa_c, new DiffuseMaterial(brushX)); Transform3DGroup Trans3DGroup = new Transform3DGroup(); RotateTransform3D RotateTrans3D_AUX = new RotateTransform3D(); TranslateTransform3D Translate3D_AUX; // Rotate around y-axis RotateTrans3D_AUX.Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 90); Trans3DGroup.Children.Add(RotateTrans3D_AUX); Translate3D_AUX = new TranslateTransform3D(-0.5f * fa_c, 0f, 0f); Trans3DGroup.Children.Add(Translate3D_AUX); GeomModel3_RX.Transform = Trans3DGroup; model_gr.Children.Add(GeomModel3_RX); // Add object to release model group } // Rotational release around local y-axis if (m_bRestrain[(int)ENSupportType.eNST_Ry] == false) { GeometryModel3D GeomModel3_RY = new GeometryModel3D(); GeomModel3_RY = volaux.CreateM_G_M_3D_Volume_Cylinder(new Point3D(0, 0, 0), fr_c, fa_c, new DiffuseMaterial(brushY)); Transform3DGroup Trans3DGroup = new Transform3DGroup(); RotateTransform3D RotateTrans3D_AUX = new RotateTransform3D(); TranslateTransform3D Translate3D_AUX; // Rotate around y-axis RotateTrans3D_AUX.Rotation = new AxisAngleRotation3D(new Vector3D(1, 0, 0), 90); Trans3DGroup.Children.Add(RotateTrans3D_AUX); Translate3D_AUX = new TranslateTransform3D(0, 0.5f * fa_c, 0f); Trans3DGroup.Children.Add(Translate3D_AUX); GeomModel3_RY.Transform = Trans3DGroup; model_gr.Children.Add(GeomModel3_RY); // Add object to release model group } // Rotational release around local z-axis if (m_bRestrain[(int)ENSupportType.eNST_Rz] == false) { GeometryModel3D GeomModel3_RZ = new GeometryModel3D(); TranslateTransform3D Translate3D_AUX; GeomModel3_RZ = volaux.CreateM_G_M_3D_Volume_Cylinder(new Point3D(0, 0, 0), fr_c, fa_c, new DiffuseMaterial(brushZ)); Translate3D_AUX = new TranslateTransform3D(0, 0, -0.5f * fa_c); GeomModel3_RZ.Transform = Translate3D_AUX; model_gr.Children.Add(GeomModel3_RZ); // Add object to release model group } // Translation release in local x-axis if (m_bRestrain[(int)ENSupportType.eNST_Ux] == false) { GeometryModel3D GeomModel3_UX1 = new GeometryModel3D(); GeomModel3_UX1 = volaux.CreateM_3D_G_Volume_8Edges(fa, fb, fb, new DiffuseMaterial(brushX)); TranslateTransform3D Translate3D_UX1; Translate3D_UX1 = new TranslateTransform3D(-0.5f * fa, -0.5f * fa - 0.5f * fb, -0.5f * fb); GeomModel3_UX1.Transform = Translate3D_UX1; model_gr.Children.Add(GeomModel3_UX1); GeometryModel3D GeomModel3_UX2 = new GeometryModel3D(); GeomModel3_UX2 = volaux.CreateM_3D_G_Volume_8Edges(fa, fb, fb, new DiffuseMaterial(brushX)); TranslateTransform3D Translate3D_UX2; Translate3D_UX2 = new TranslateTransform3D(-0.5f * fa, +0.5f * fa - 0.5f * fb, -0.5f * fb); GeomModel3_UX2.Transform = Translate3D_UX2; model_gr.Children.Add(GeomModel3_UX2); } // Translation release in local y-axis if (m_bRestrain[(int)ENSupportType.eNST_Uy] == false) { // NEFUNGUJE !!! /* RotateTransform3D RotateTrans3D_AUX = new RotateTransform3D(); RotateTrans3D_AUX.Rotation = new AxisAngleRotation3D(new Vector3D(0, 0, 1), 90); GeometryModel3D GeomModel3_UY1 = new GeometryModel3D(); GeomModel3_UY1 = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.02f, 0.02f, new DiffuseMaterial(brushY)); TranslateTransform3D Translate3D_UY1; Translate3D_UY1 = new TranslateTransform3D(-0.1f, - 0.5f * fa, -0.01f); Transform3DGroup Trans3DGroup1 = new Transform3DGroup(); Trans3DGroup1.Children.Add(RotateTrans3D_AUX); Trans3DGroup1.Children.Add(Translate3D_UY1); GeomModel3_UY1.Transform = Trans3DGroup1; model_gr.Children.Add(GeomModel3_UY1); GeometryModel3D GeomModel3_UY2 = new GeometryModel3D(); GeomModel3_UY2 = volaux.CreateM_3D_G_Volume_8Edges(fa, 0.02f, 0.02f, new DiffuseMaterial(brushY)); TranslateTransform3D Translate3D_UY2; Translate3D_UY2 = new TranslateTransform3D(0.5f * fa + 0.1f, -0.5f * fa, -0.01f); Transform3DGroup Trans3DGroup2 = new Transform3DGroup(); Trans3DGroup2.Children.Add(RotateTrans3D_AUX); Trans3DGroup2.Children.Add(Translate3D_UY2); GeomModel3_UY2.Transform = Trans3DGroup2; model_gr.Children.Add(GeomModel3_UY2); */ /* GeometryModel3D GeomModel3_UY1 = new GeometryModel3D(); GeomModel3_UY1 = volaux.CreateM_3D_G_Volume_8Edges(0.02f, fa, 0.02f, new DiffuseMaterial(brushY)); TranslateTransform3D Translate3D_UY1; Translate3D_UY1 = new TranslateTransform3D(-0.1f, -0.5f * fa, -0.01f); GeomModel3_UY1.Transform = Translate3D_UY1; model_gr.Children.Add(GeomModel3_UY1); GeometryModel3D GeomModel3_UY2 = new GeometryModel3D(); GeomModel3_UY2 = volaux.CreateM_3D_G_Volume_8Edges(0.02f, fa, 0.02f, new DiffuseMaterial(brushY)); TranslateTransform3D Translate3D_UY2; Translate3D_UY2 = new TranslateTransform3D(fa - 0.1f, -0.5f * fa, -0.01f); GeomModel3_UY2.Transform = Translate3D_UY2; model_gr.Children.Add(GeomModel3_UY2); */ GeometryModel3D GeomModel3_UY1 = new GeometryModel3D(); GeomModel3_UY1 = volaux.CreateM_3D_G_Volume_8Edges(new Point3D(-0.5f * fa - 0.5f * fb, -0.5f * fa, -0.5f * fb), fb, fa, fb, new DiffuseMaterial(brushY)); model_gr.Children.Add(GeomModel3_UY1); GeometryModel3D GeomModel3_UY2 = new GeometryModel3D(); GeomModel3_UY2 = volaux.CreateM_3D_G_Volume_8Edges(new Point3D(0.5f * fa - 0.5f * fb, -0.5f * fa, -0.5f * fb), fb, fa, fb, new DiffuseMaterial(brushY)); model_gr.Children.Add(GeomModel3_UY2); } // Translation release in local z-axis if (m_bRestrain[(int)ENSupportType.eNST_Uz] == false) { RotateTransform3D RotateTrans3D_AUX = new RotateTransform3D(); RotateTrans3D_AUX.Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 90); GeometryModel3D GeomModel3_UZ1 = new GeometryModel3D(); GeomModel3_UZ1 = volaux.CreateM_3D_G_Volume_8Edges(fa, fb, fb, new DiffuseMaterial(brushZ)); TranslateTransform3D Translate3D_UZ1; Translate3D_UZ1 = new TranslateTransform3D(-0.5f * fb, -0.5f * fa - 0.5f * fb, 0.5f * fa); Transform3DGroup Trans3DGroup1 = new Transform3DGroup(); Trans3DGroup1.Children.Add(RotateTrans3D_AUX); Trans3DGroup1.Children.Add(Translate3D_UZ1); GeomModel3_UZ1.Transform = Trans3DGroup1; model_gr.Children.Add(GeomModel3_UZ1); GeometryModel3D GeomModel3_UZ2 = new GeometryModel3D(); GeomModel3_UZ2 = volaux.CreateM_3D_G_Volume_8Edges(fa, fb, fb, new DiffuseMaterial(brushZ)); TranslateTransform3D Translate3D_UZ2; Translate3D_UZ2 = new TranslateTransform3D(-0.5f * fb, +0.5f * fa - 0.5f * fb, 0.5f * fa); Transform3DGroup Trans3DGroup2 = new Transform3DGroup(); Trans3DGroup2.Children.Add(RotateTrans3D_AUX); Trans3DGroup2.Children.Add(Translate3D_UZ2); GeomModel3_UZ2.Transform = Trans3DGroup2; model_gr.Children.Add(GeomModel3_UZ2); } } // Set position of release at member in LCS if (m_Node == m_Member.NodeStart) // Release at start of member { Translate3D = new TranslateTransform3D(fa, 0f, 0f); } else // Release at end of member { Translate3D = new TranslateTransform3D(m_Member.FLength - fa, 0f, 0f); } // Set release position in LCS of member model_gr.Transform = Translate3D; return model_gr; }