Ejemplo n.º 1
0
        private void AddObject_Click(object sender, System.EventArgs e)
        {
            Point3D basePoint = new Point3D(
                (double)PositionX.Value,
                (double)PositionY.Value,
                (double)PositionZ.Value
                );

            if (mainForm.Scene.GetObjectByName(ObjectName.Text) == null)
            {
                var radio = new TelescopeObject(ObjectName.Text);
                radio.BasePoint = basePoint;
                radio.AngleX    = (int)RotateX.Value;
                radio.AngleY    = (int)RotateY.Value;
                radio.AngleZ    = (int)RotateZ.Value;
                radio.SetScale((double)ScaleX.Value, (double)ScaleY.Value, (double)ScaleZ.Value);


                mainForm.Scene.AddObject(radio);
                int index = mainForm.ObjectsList.Items.Add(ObjectName.Text);
                mainForm.ObjectsList.SelectedIndex = index;
                mainForm.ObjectPanButton.Enabled   = true;
                Close();
            }
            else
            {
                MessageBox.Show("Объект с таким именем уже существует, переименуйте объект.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                ObjectName.Clear();
                ObjectName.Focus();
            }
        }
Ejemplo n.º 2
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            var radio = new TelescopeObject("telescope1");

            radio.BasePoint = new Point3D(0, 0, 0);
            radio.AngleX    = (int)RotateX.Value;
            radio.AngleY    = (int)RotateY.Value;
            radio.AngleZ    = (int)RotateZ.Value;
            radio.SetScale((double)ScaleX.Value, (double)ScaleY.Value, (double)ScaleZ.Value);


            Scene.AddObject(radio);
            int index = ObjectsList.Items.Add(radio.ObjectName);

            ObjectsList.SelectedIndex = index;
            ObjectPanButton.Enabled   = true;
        }
Ejemplo n.º 3
0
        private void ObjectsList_SelectedIndexChanged(object sender, EventArgs e)
        {
            currentObject = Scene.GetObjectByName(ObjectsList.SelectedItem.ToString());

            UpdateCameraValues();
            ObjectPanButton.Enabled  = true;
            DeleteObject.Enabled     = true;
            ObjectSpacePanel.Enabled = true;
            ObjectSpacePanel.Visible = true;

            // currObj может быть null, если нет объектов
            if (currentObject is null)
            {
                ObjectViewPanel.Visible = ObjectViewPanel.Enabled = false;
            }
            else
            {
                UpdateParametersValues();
                UpdateSpaceValues();
            }
        }
Ejemplo n.º 4
0
        // XML импорт сцены из файла
        private void ImportScene_Click(object sender, EventArgs e)
        {
            if (ImportDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    IFormatProvider format = new System.Globalization.CultureInfo("en-us");

                    XDocument document = XDocument.Load(ImportDialog.FileName);

                    XElement scene = document.Element("scene");

                    var mode = scene.Attribute("ViewMode").Value;
                    if (mode == "WIREFRAME")
                    {
                        Scene.Mode             = (Scene.MODE.WIREFRAME);
                        ViewType.SelectedIndex = 0;
                    }
                    else
                    {
                        Scene.Mode             = (Scene.MODE.SOLID);
                        ViewType.SelectedIndex = 1;
                    }


                    Scene.Camera = new Camera();
                    Scene.ResetCamera();

                    var cameraElement = scene.Element("camera");
                    Scene.Camera.IsCentralProjection = bool.Parse(cameraElement.Element("central-projection").Value);

                    XElement position = cameraElement.Element("position");
                    Scene.Camera.Position = new Point3DSpherical(new Point3D(
                                                                     double.Parse(position.Attribute("x").Value, format),
                                                                     double.Parse(position.Attribute("y").Value, format),
                                                                     double.Parse(position.Attribute("z").Value, format)
                                                                     ));

                    XElement target = cameraElement.Element("target");
                    Scene.Camera.Target = new Point3DSpherical(new Point3D(
                                                                   double.Parse(target.Attribute("x").Value, format),
                                                                   double.Parse(target.Attribute("y").Value, format),
                                                                   double.Parse(target.Attribute("z").Value, format)
                                                                   ));

                    Scene.Camera.MoveCameraLeftRight(0);
                    Scene.Camera.MoveCameraUpDown(0);

                    var lightElement = scene.Element("light");

                    XElement lightPosition = lightElement.Element("position");
                    Scene.Light.X = double.Parse(lightPosition.Attribute("x").Value, format);
                    Scene.Light.Y = double.Parse(lightPosition.Attribute("y").Value, format);
                    Scene.Light.Z = double.Parse(lightPosition.Attribute("z").Value, format);


                    Scene.Objects.Clear();
                    ObjectsList.Items.Clear();
                    ObjectViewPanel.Visible = ObjectViewPanel.Enabled = ObjectSpacePanel.Visible = ObjectSpacePanel.Enabled = false;

                    foreach (XElement objectElement in scene.Element("objects").Elements("Telescope"))
                    {
                        var radioName = objectElement.Attribute("name").Value;
                        var tel       = new TelescopeObject(radioName);

                        XElement objectPosition = objectElement.Element("position");
                        tel.BasePoint = new Point3D(
                            double.Parse(objectPosition.Attribute("x").Value, format),
                            double.Parse(objectPosition.Attribute("y").Value, format),
                            double.Parse(objectPosition.Attribute("z").Value, format)
                            );

                        XElement rotate = objectElement.Element("rotate");
                        tel.AngleX = int.Parse(rotate.Attribute("x").Value);
                        tel.AngleY = int.Parse(rotate.Attribute("y").Value);
                        tel.AngleZ = int.Parse(rotate.Attribute("z").Value);

                        XElement scale = objectElement.Element("scale");
                        tel.SetScale(
                            double.Parse(scale.Attribute("x").Value, format),
                            double.Parse(scale.Attribute("y").Value, format),
                            double.Parse(scale.Attribute("z").Value, format)
                            );

                        tel.Basis1CylinderRadius = double.Parse(objectElement.Element("Basis1CylinderRadius").Value, format);
                        tel.PrimaryLegsLength    = double.Parse(objectElement.Element("PrimaryLegsLength").Value, format);
                        tel.Basis2CylinderRadius = double.Parse(objectElement.Element("Basis2CylinderRadius").Value, format);
                        tel.Basis3CylinderRadius = double.Parse(objectElement.Element("Basis3CylinderRadius").Value, format);
                        tel.LenseRadius          = double.Parse(objectElement.Element("LenseRadius").Value, format);
                        tel.SecondaryLegsLength  = double.Parse(objectElement.Element("SecondaryLegsLength").Value, format);
                        tel.PrimaryLegsCount     = double.Parse(objectElement.Element("PrimaryLegsCount").Value, format);
                        tel.SecondaryLegsCount   = double.Parse(objectElement.Element("SecondaryLegsCount").Value, format);
                        tel.HandsCount           = int.Parse(objectElement.Element("HandsCount").Value, format);
                        tel.HandsRadius          = int.Parse(objectElement.Element("HandsRadius").Value, format);

                        tel.UpdateObject();

                        Scene.AddObject(tel);
                        ObjectsList.Items.Add(tel.ObjectName);
                    }

                    // if there are no objects, the user will see it.
                    ObjectsList.SelectedIndex = -1;
                    if (Scene.Objects.Count > 0)
                    {
                        ObjectsList.SelectedIndex = 0;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Не получается импортировать сцену!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Ejemplo n.º 5
0
 public void AddObject(TelescopeObject obj)
 {
     Objects.Add(obj);
 }