Exemple #1
0
        /// <summary>
        ///     Create a new text zone. Its a comment zone shown in both views.
        /// </summary>
        private void CreateTextZone()
        {
            if (m_isCreating)
            {
                if (!m_isDragging)
                {
                    if (InputFunctions.IsClickingOutsideUI())
                    {
                        m_startPoint   = InputFunctions.GetWorldPoint2D(GlobalManager.Instance.GetActiveCamera());
                        m_endPoint     = InputFunctions.GetWorldPoint2D(GlobalManager.Instance.GetActiveCamera());
                        m_isDragging   = true;
                        currentElement = new TextZoneElement
                        {
                            Text            = "Commentaire",
                            BackgroundColor = Color.gray,
                            TextColor       = Color.black,
                            TextSize        = 1
                        };
                        currentElement.associated2DObject = Instantiate(textZonePrefab);
                        currentElement.associated3DObject = Instantiate(textZonePrefab);

                        currentElement.associated2DObject.GetComponentInChildren <TextMesh>().fontStyle = FontStyle.Bold;
                        currentElement.associated3DObject.GetComponentInChildren <TextMesh>().fontStyle = FontStyle.Bold;

                        currentElement.associated2DObject.SetLayerRecursively((int)ErgoLayers.Top);
                        currentElement.associated3DObject.SetLayerRecursively((int)ErgoLayers.ThreeD);
                    }
                }
                else
                {
                    m_endPoint = InputFunctions.GetWorldPoint2D(GlobalManager.Instance.GetActiveCamera());

                    if (InputFunctions.IsClickingOutsideUI())
                    {
                        m_isCreating = false;
                        m_isDragging = false;
                        m_helpers.Add(currentElement);
                        OperationsBufferScript.Instance.AddAutoSave("Creation zone de texte");
                    }

                    currentElement.associated2DObject.transform.position = (m_startPoint + m_endPoint) / 2f;
                    currentElement.Position = VectorFunctions.Switch2D3D((m_startPoint + m_endPoint) / 2f);
                    currentElement.associated3DObject.transform.position = currentElement.Position;

                    (currentElement as TextZoneElement).Size = VectorFunctions.Switch2D3D(currentElement
                                                                                          .associated2DObject.GetComponent <TextZoneScript>().SetSize(m_startPoint, m_endPoint));
                    currentElement.associated3DObject.GetComponent <TextZoneScript>().SetSize(m_startPoint, m_endPoint);

                    // CANCEL
                    if (Input.GetMouseButtonDown(1))
                    {
                        m_isCreating = false;
                        m_isDragging = false;
                        Destroy(currentElement.associated2DObject);
                        currentElement = null;
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        ///     Get perpendicular to adjust furniture on the wall
        /// </summary>
        public Vector3 GetPerpendicularFromPos(Vector3 pos)
        {
            var pos2D = VectorFunctions.Switch3D2D(pos);

            if (Vector3.Dot(Center - pos2D, Perpendicular) < 0)
            {
                //Debug.Log("Perpendicular");
                return(VectorFunctions.Switch2D3D(Perpendicular));
            }

            //Debug.Log("Pas Perpendicular");
            return(VectorFunctions.Switch2D3D(-Perpendicular));
        }
Exemple #3
0
        /// <summary>
        ///     adjust 2d and 3d objects transform according to data
        /// </summary>
        /// <param name="pos3D"></param>
        /// <param name="go"></param>
        /// <param name="startingPos"></param>
        private void AdjustCurrentFurnitureWallPos3D(Vector3 pos3D, GameObject go, Vector3 startingPos)
        {
            if (IsOnWall)
            {
                //GetComponent<Rigidbody>().MovePosition
                associated3DObject.transform.position = new Vector3(
                    pos3D.x,
                    Mathf.Clamp(pos3D.y, 0.1f, 3),
                    pos3D.z
                    );
                associated2DObject.transform.position = VectorFunctions.GetExactPositionFrom3DObject(associated2DObject,
                                                                                                     associated3DObject, associated3DObject.transform.position);
                //VectorFunctions.Switch3D2D(associated3DObject.transform.position);

                var w = WallsCreator.Instance.GetWallFromGameObject(go);

                var perp = w.GetPerpendicularFromPos(pos3D);

                associated3DObject.transform.rotation = Quaternion.FromToRotation(Vector3.forward, perp);

                associated3DObject.transform.localEulerAngles = new Vector3(
                    0,
                    associated3DObject.transform.localEulerAngles.y,
                    EulerAngles.z
                    );

                associated2DObject.transform.localEulerAngles = VectorFunctions.Switch2D3D(new Vector3(
                                                                                               0,
                                                                                               -associated3DObject.transform.localEulerAngles.y,
                                                                                               associated3DObject.transform.localEulerAngles.z
                                                                                               ));

                EulerAngles       = associated3DObject.transform.localEulerAngles;
                AssociatedElement = w;
            }
            else
            {
                if (pos3D.magnitude != float.PositiveInfinity)
                {
                    associated3DObject.transform.position =
                        pos3D; //.GetComponent<Rigidbody>().MovePosition(associated3DObject.transform.position + (pos3D - startingPos));
                }
                associated2DObject.transform.position = this is HelperElement
                    ? VectorFunctions.Switch3D2D(associated3DObject.transform.position)
                    : VectorFunctions.GetExactPositionFrom3DObject(associated2DObject, associated3DObject,
                                                                   associated3DObject.transform.position);
            }
        }
Exemple #4
0
        /// <summary>
        ///     Move function. The starting pos is where the users starts clicking,
        ///     so its a kind of offset so the element does not "teleport" its position into mouse but moves smoothly
        /// </summary>
        /// <param name="startingPos">where the users starts clicking</param>
        public virtual void Move(Vector3 startingPos)
        {
            InitVar();

            List <string> tags = new List <string> {
                ""
            };

            if (IsOnWall)
            {
                tags.Add("Wall");
            }
            else
            {
                tags.Add("Ground");
            }
            if (CanBePutOnFurniture)
            {
                tags.Add("Furniture");
            }
            tags.Add("WorkPlane");

            switch (cam.gameObject.layer)
            {
            case (int)ErgoLayers.Top:
                Vector3 pos2D       = InputFunctions.GetWorldPoint(cam);
                Vector3 closestProj = pos2D;

                // If on wall then stick to wall
                if (IsOnWall)
                {
                    //Debug.Log("Sticking...");
                    Wall closestWall = null;
                    // Seek closest projection for a wall
                    foreach (Wall wd in WallsCreator.Instance.GetWalls())
                    {
                        if (closestWall == null)
                        {
                            closestWall = wd;
                            closestProj = Math3d.ProjectPointOnLineSegment(wd.P1, wd.P2, pos2D);
                        }
                        else
                        {
                            Vector3 proj = Math3d.ProjectPointOnLineSegment(wd.P1, wd.P2, pos2D);
                            if (Vector2.Distance(pos2D, proj) < Vector2.Distance(pos2D, closestProj))
                            {
                                closestWall = wd;
                                closestProj = proj;
                            }
                        }
                    }

                    AssociatedElement = closestWall;
                    Vector3 pos33D = VectorFunctions.Switch2D3D(closestProj - closestWall.Thickness * (closestProj - pos2D).normalized) + Position.y * Vector3.up;
                    // Repeat the 3D algo and readapt 2D
                    AdjustCurrentFurnitureWallPos3D(pos33D, closestWall.associated3DObject, startingPos);
                }
                else
                {
                    associated2DObject.transform.position += pos2D - startingPos;

                    if (associated3DObject)
                    {
                        float y = 0;
                        if (CanBePutOnFurniture)
                        {
                            GameObject potentialFurniture = InputFunctions.GetHoveredObject2D
                                                            (
                                cam2d,
                                associated2DObject.name,
                                true
                                                            );

                            if (potentialFurniture)
                            {
                                Furniture f = FurnitureCreator.Instance.GetFurnitureFromGameObject(potentialFurniture);
                                if (f != null)
                                {
                                    y = f.Position.y + f.Size.y;
                                }
                            }
                        }

                        associated2DObject.transform.position = new Vector3
                                                                (
                            associated2DObject.transform.position.x,
                            associated2DObject.transform.position.y, -y / 5f
                                                                );

                        associated3DObject.transform.position = VectorFunctions.Switch2D3D(associated2DObject.transform.position, y);
                    }
                }

                if (text2D)
                {
                    text2D.transform.position = associated2DObject.transform.position;
                }
                break;

            case (int)ErgoLayers.ThreeD:
                Vector3    pos3D         = InputFunctions.GetWorldPoint(cam);
                Vector3    closestProj3D = pos3D;
                GameObject go;

                if (IsOnWall)
                {
                    Vector3 pos33D = InputFunctions.GetWorldPoint(out go, cam, associated3DObject, tags.ToArray());
                    AdjustCurrentFurnitureWallPos3D(pos33D, go, startingPos);
                }
                else
                {
                    if (associated3DObject == null)
                    {
                        return;
                    }

                    //Fix a l'etage l'objet
                    float tmpY = associated3DObject.transform.position.y;
                    associated3DObject.transform.position += pos3D - startingPos;

                    if (associated3DObject)
                    {
                        float y = 0;
                        if (CanBePutOnFurniture)
                        {
                            var potentialFurniture = InputFunctions.GetHoveredObject2D(
                                GlobalManager.Instance.cam2DTop.GetComponent <Camera>(), associated2DObject.name,
                                true);
                            if (potentialFurniture)
                            {
                                var f = FurnitureCreator.Instance.GetFurnitureFromGameObject(potentialFurniture);
                                y = f.Position.y + f.Size.y;
                            }
                        }

                        associated3DObject.transform.position = associated3DObject.transform.position;

                        associated3DObject.transform.position = new Vector3(associated3DObject.transform.position.x, tmpY, associated3DObject.transform.position.z);

                        associated2DObject.transform.position = new Vector3(associated3DObject.transform.position.x, associated3DObject.transform.position.z, associated2DObject.transform.position.z);
                    }
                }
                break;
            }

            if (associated3DObject)
            {
                Position = associated3DObject.transform.position;
            }
            else
            {
                Position = VectorFunctions.Switch2D3D(associated2DObject.transform.position);
            }
        }
Exemple #5
0
        /// <summary>
        ///     Build the odt file
        /// </summary>
        /// <param name="filePath"></param>
        public IEnumerator ExportToOdt(string filePath)
        {
            m_isExporting = true;
            // FIRST, GENERATE SCREENSHOTS
            var folder       = Path.GetDirectoryName(filePath);
            var name         = Path.GetFileNameWithoutExtension(filePath);
            var imagesFolder = Path.Combine(folder, name + "_images");

            Directory.CreateDirectory(imagesFolder);
            var di = new DirectoryInfo(imagesFolder);

            foreach (var file in di.GetFiles())
            {
                file.Delete();
            }

            var x = Project.GetCurrentFloor().Rooms.Average(r => r.GetCenter().x);
            var y = Project.GetCurrentFloor().Rooms.Average(r => r.GetCenter().y);
            var z = Project.GetCurrentFloor().Rooms.Average(r => r.GetCenter().z);

            yield return(new WaitForSeconds(0.3f));

            var whole2D = Path.Combine(imagesFolder, "whole2D.png");

            yield return(Screenshot.Instance.TakeBig2DScreenshot(imagesFolder, new Vector3(x, y + 50, z), "whole2D"));

            yield return(new WaitForSeconds(0.3f));

            var whole3D = Screenshot.Instance.TakeBig3DScreenshot(imagesFolder, new Vector3(x, y + 50, z), "whole3D");

            yield return(new WaitForSeconds(0.3f));

            var whole2DImage = new Image(whole2D);

            var whole2DFrame = new Frame();

            whole2DFrame.Width  = new odf.Size(1920 / 4f, odf.Unit.Pixel);
            whole2DFrame.Height = new odf.Size(1080 / 4f, odf.Unit.Pixel);
            whole2DFrame.Add(whole2DImage);

            var whole3DImage = new Image(whole3D);

            var whole3DFrame = new Frame();

            whole3DFrame.Width  = new odf.Size(1920 / 4f, odf.Unit.Pixel);
            whole3DFrame.Height = new odf.Size(1080 / 4f, odf.Unit.Pixel);
            whole3DFrame.Add(whole3DImage);

            // ROOM SCREENSHOTS
            var roomImages   = new List <Image>();
            var room2DFrames = new List <Frame>();
            var room3DFrames = new List <Frame>();

            var cpt = 0;

            foreach (var f in Project.Floors)
            {
                yield return(new WaitForSeconds(0.3f));

                SetCurrentFloor(Project.Floors.IndexOf(f));
                yield return(new WaitForSeconds(0.3f));

                var cpt2 = 0;
                foreach (var ro in f.Rooms)
                {
                    var room2D     = Path.Combine(imagesFolder, ro.Name + "_" + cpt + "_" + cpt2 + "2D.png");
                    var roomCenter = VectorFunctions.Switch2D3D(ro.GetCenter());
                    yield return(Screenshot.Instance.TakeBig2DScreenshot(imagesFolder, roomCenter,
                                                                         ro.Name + "_" + cpt + "_" + cpt2 + "2D"));

                    yield return(new WaitForSeconds(0.3f));

                    var room3D = Screenshot.Instance.TakeBig3DScreenshot(imagesFolder, roomCenter,
                                                                         ro.Name + "_" + cpt + "_" + cpt2 + "3D");
                    yield return(new WaitForSeconds(0.3f));

                    var room2DImage = new Image(room2D);
                    var room2DFrame = new Frame();
                    room2DFrame.Width  = new odf.Size(1920 / 4f, odf.Unit.Pixel);
                    room2DFrame.Height = new odf.Size(1080 / 4f, odf.Unit.Pixel);
                    room2DFrame.Add(room2DImage);
                    room2DFrames.Add(room2DFrame);

                    var room3DImage = new Image(room3D);
                    var room3DFrame = new Frame();
                    room3DFrame.Width  = new odf.Size(1920 / 4f, odf.Unit.Pixel);
                    room3DFrame.Height = new odf.Size(1080 / 4f, odf.Unit.Pixel);
                    room3DFrame.Add(room3DImage);
                    room3DFrames.Add(room3DFrame);

                    roomImages.Add(room2DImage);
                    roomImages.Add(room3DImage);

                    cpt2++;

                    yield return(new WaitForSeconds(0.5f));
                }

                cpt++;
            }

            // THEN, GENERATE DOC
            var doc = new odf.TextDocument();

            // FONTS
            var arial = new Font
            {
                Name              = "Arial",
                Family            = "Arial",
                GenericFontFamily = GenericFontFamily.Swiss,
                Pitch             = FontPitch.Variable
            };

            doc.Fonts.Add(arial);
            // STYLES
            var arial12Style = new ParagraphStyle("Arial12Style");

            arial12Style.TextProperties.Font     = "Arial";
            arial12Style.TextProperties.FontSize = new odf.Size(12, odf.Unit.Point);

            var titleStyle = new ParagraphStyle("TitleStyle");

            titleStyle.ParagraphProperties.TextAlignment = TextAlignment.Center;
            titleStyle.TextProperties.Font             = "Arial";
            titleStyle.TextProperties.FontSize         = new odf.Size(16, odf.Unit.Point);
            titleStyle.TextProperties.FontWeight       = FontWeight.Bold;
            titleStyle.ParagraphProperties.BreakBefore = Break.Page;


            var subtitleStyle = new ParagraphStyle("SubTitleStyle");

            subtitleStyle.ParagraphProperties.TextAlignment = TextAlignment.Left;
            subtitleStyle.TextProperties.Font          = "Arial";
            subtitleStyle.TextProperties.FontSize      = new odf.Size(12, odf.Unit.Point);
            subtitleStyle.TextProperties.FontWeight    = FontWeight.Bold;
            subtitleStyle.TextProperties.UnderlineType = UnderlineType.Single;

            var breakPage = new ParagraphStyle("BreakPage");

            breakPage.ParagraphProperties.BreakBefore = Break.Page;

            var cs1 = new CellStyle("CS1");

            cs1.TextProperties.Color = "#555555";

            doc.AutomaticStyles.Styles.Add(titleStyle);
            doc.AutomaticStyles.Styles.Add(arial12Style);
            doc.AutomaticStyles.Styles.Add(subtitleStyle);
            doc.AutomaticStyles.Styles.Add(breakPage);
            doc.AutomaticStyles.Styles.Add(cs1);


            // CONTENT
            // FIRST PAGE
            var p1 = new odf.Paragraph
            {
                Style = "Arial12Style"
            };

            p1.Add(Project.ProjectName);
            p1.AddLineBreak();
            p1.Add(Project.Person.FirstName + " " + Project.Person.LastName);

            // SECOND PAGE
            var p2 = new odf.Paragraph
            {
                Style = "TitleStyle"
            };

            p2.Add("PRECONISATIONS D'AMENAGEMENT DU LOGEMENT");
            p2.AddLineBreak();
            p2.AddLineBreak();
            var p3 = new odf.Paragraph
            {
                Style = "SubTitleStyle"
            };

            p3.Add("Le bénéficiaire");

            var p4 = new odf.Paragraph
            {
                Style = "Arial12Style"
            };

            p4.Add("Projet : " + Project.ProjectName);
            p4.AddLineBreak();
            p4.Add("Date : " + Project.Date.ToShortDateString());
            p4.AddLineBreak();
            p4.Add("Bénéficiaire : " + Project.Person.FirstName + " " + Project.Person.LastName);
            p4.AddLineBreak();
            p4.Add("Version : v." + Project.Version);
            p4.AddLineBreak();
            p4.Add("Commentaire : " + Project.Comment);
            p4.AddLineBreak();
            p4.AddLineBreak();
            p4.AddLineBreak();

            var p5 = new odf.Paragraph
            {
                Style = "SubTitleStyle"
            };

            p5.Add("La modélisation");

            var p6 = new odf.Paragraph
            {
                Style = "Arial12Style"
            };

            p6.Add("Type de logement : " + Project.HomeType);
            p6.AddLineBreak();
            p6.Add("Nombre d'étages : " + Project.Floors.Count);
            p6.AddLineBreak();
            p6.Add("Nombre de pièces total : " + Project.Floors.Sum(f => f.Rooms.Count()));
            p6.AddLineBreak();
            p6.Add("Superficie totale : ");
            p6.AddLineBreak();

            // ss
            p6.Add(whole2DFrame);
            p6.AddLineBreak();
            p6.AddLineBreak();
            p6.AddLineBreak();

            // ss
            p6.Add(whole3DFrame);
            p6.AddLineBreak();

            // ROOMS
            var pBreakPage = new odf.Paragraph();

            pBreakPage.Style = "BreakPage";
            pBreakPage.Add("");

            var p7 = new odf.Paragraph();

            p7.Style = "SubTitleStyle";
            p7.Add("Les pièces");

            var roomsParagraphs = new List <odf.Paragraph>();

            cpt = 1;
            foreach (var f in Project.Floors)
            {
                foreach (var r in f.Rooms)
                {
                    var curParaTitle = new odf.Paragraph();
                    curParaTitle.Style = "SubTitleStyle";
                    curParaTitle.AddTab();
                    curParaTitle.Add("Pièce n°" + cpt + " : " + r.Name);
                    curParaTitle.AddLineBreak();
                    curParaTitle.AddTab();
                    curParaTitle.AddTab();
                    curParaTitle.Add("Présentation");

                    var curPara = new odf.Paragraph();

                    curPara.Add("Etage : " + f.FloorName);
                    curPara.AddLineBreak();
                    curPara.Add("Nombre de murs : " + r.Walls.Count);
                    curPara.AddLineBreak();
                    curPara.Add("Epaisseur des murs : ");
                    var ths = "";
                    foreach (var w in r.Walls)
                    {
                        ths += w.Thickness + "m, ";
                    }
                    curPara.Add(ths);
                    curPara.AddLineBreak();

                    curPara.Add(room2DFrames[cpt - 1]);
                    curPara.Add(room3DFrames[cpt - 1]);
                    curPara.AddLineBreak();

                    roomsParagraphs.Add(curParaTitle);
                    roomsParagraphs.Add(curPara);

                    cpt++;
                }


                // MEUBLES
                var furniTitle = new odf.Paragraph();
                furniTitle.Style = "SubTitleStyle";
                furniTitle.AddTab();
                furniTitle.AddTab();
                furniTitle.Add("Meubles");

                roomsParagraphs.Add(furniTitle);
                foreach (var fu in f.Furnitures)
                {
                    if (fu.Type != "AideTechnique")
                    {
                        var p = new odf.Paragraph();
                        p.Style = "Arial12Style";
                        p.Add(fu.GetDescription());
                        roomsParagraphs.Add(p);
                    }
                }

                // AIDES TECHNIQUES
                var furni2Title = new odf.Paragraph();
                furni2Title.Style = "SubTitleStyle";
                furni2Title.AddTab();
                furni2Title.AddTab();
                furni2Title.Add("Aides techniques");

                roomsParagraphs.Add(furni2Title);
                foreach (var fu in f.Furnitures)
                {
                    if (fu.Type == "AideTechnique")
                    {
                        var p = new odf.Paragraph();
                        p.Style = "Arial12Style";
                        p.Add(fu.GetDescription());
                        roomsParagraphs.Add(p);
                    }
                }

                // COMMENTS
                var comTitle = new odf.Paragraph();
                comTitle.Style = "SubTitleStyle";
                comTitle.AddTab();
                comTitle.AddTab();
                comTitle.Add("Commentaires");

                roomsParagraphs.Add(comTitle);
                foreach (var tz in f.TextZoneElements)
                {
                    var p = new odf.Paragraph();
                    p.Style = "Arial12Style";
                    p.Add(tz.GetDescription());
                    roomsParagraphs.Add(p);
                }

                // MOBILITE
                var chTitle = new odf.Paragraph();
                chTitle.Style = "SubTitleStyle";
                chTitle.AddTab();
                chTitle.AddTab();
                chTitle.Add("Mobilité");

                roomsParagraphs.Add(chTitle);
                foreach (var ch in f.Characters)
                {
                    var p = new odf.Paragraph();
                    p.Style = "Arial12Style";
                    p.Add(ch.GetDescription());
                    roomsParagraphs.Add(p);
                }
            }

            //====================================
            // POUR RESUMER

            var ps1 = new odf.Paragraph();

            ps1.Style = "SubTitleStyle";
            ps1.Add("Pour résumer");
            var ps2 = new odf.Paragraph();

            ps2.Style = "Arial12Style";
            ps2.Add("Nombre de pièces : " + Project.Floors.Sum(f => f.Rooms.Count()));
            ps2.AddLineBreak();
            var pieces = "";

            foreach (var f in Project.Floors)
            {
                foreach (var r in f.Rooms)
                {
                    pieces += r.Name + ", ";
                }
            }
            ps2.Add("Pièces : " + pieces);
            ps2.AddLineBreak();

            var cell1 = new odf.Cell("Aide technique");
            var cell2 = new odf.Cell("Pièce associée");
            var cell3 = new odf.Cell("Commentaire");

            cell1.Style = "CS1";
            cell2.Style = "CS1";
            cell3.Style = "CS1";

            var row1 = new odf.Row();

            row1.Cells.Add(cell1);
            row1.Cells.Add(cell2);
            row1.Cells.Add(cell3);

            var table1 = new odf.Table();

            table1.Rows.Add(row1);

            foreach (var f in Project.Floors)
            {
                foreach (var fu in f.Furnitures)
                {
                    if (fu.Type == "AideTechnique")
                    {
                        var ro = new odf.Row();
                        ro.Cells.Add(new odf.Cell(fu.Name));
                        ro.Cells.Add(new odf.Cell(""));
                        ro.Cells.Add(new odf.Cell(""));
                        table1.Rows.Add(ro);
                    }
                }
            }

            // If table is empty, add an empty line
            if (table1.Rows.Count == 1)
            {
                var ro = new odf.Row();
                ro.Cells.Add(new odf.Cell(""));
                ro.Cells.Add(new odf.Cell(""));
                ro.Cells.Add(new odf.Cell(""));
                table1.Rows.Add(ro);
            }

            var ps3 = new odf.Paragraph();

            ps3.Style = "Arial12Style";
            ps3.Add("[nom_preconisateur] ");
            ps3.AddTab();
            ps3.Add(DateTime.Now.ToShortDateString());
            ps3.AddTab();
            ps3.Add("Version ErgoShop " + GlobalManager.VERSION);
            ps3.AddLineBreak();


            // DOC CONSTRUCTION
            doc.Body.Add(p1);
            doc.Body.Add(p2);
            doc.Body.Add(p3);
            doc.Body.Add(p4);
            doc.Body.Add(p5);
            doc.Body.Add(p6);
            doc.Body.Add(pBreakPage);
            doc.Body.Add(p7);

            foreach (var p in roomsParagraphs)
            {
                doc.Body.Add(p);
            }

            doc.Body.Add(pBreakPage);
            doc.Body.Add(ps1);
            doc.Body.Add(ps2);
            doc.Body.Add(table1);
            doc.Body.Add(ps3);

            doc.Save(filePath, true);

            UIManager.Instance.ShowCustomMessage("FICHIER ODT EXPORTE");
            yield return(new WaitForSeconds(0.2f));

            GlobalManager.Instance.SwitchViewMode();
            yield return(new WaitForSeconds(0.2f));

            GlobalManager.Instance.Set2DTopMode();
            m_isExporting = false;
        }
Exemple #6
0
        // Update is called once per frame
        private void Update()
        {
            m_element = null;
            if (SelectedObjectManager.Instance.currentFurnitureData.Count == 1)
            {
                m_element = SelectedObjectManager.Instance.currentFurnitureData[0].associated3DObject;
                m_wall    = SelectedObjectManager.Instance.currentFurnitureData[0].AssociatedElement as Wall;
            }

            up.gameObject.SetActive(m_element);
            down.gameObject.SetActive(m_element);
            left.gameObject.SetActive(m_element);
            right.gameObject.SetActive(m_element);

            if (m_element)
            {
                var b          = m_element.GetMeshBounds();
                var upPoint    = Vector3.positiveInfinity;
                var downPoint  = Vector3.positiveInfinity;
                var leftPoint  = Vector3.positiveInfinity;
                var rightPoint = Vector3.positiveInfinity;
                if (SelectedObjectManager.Instance.currentFurnitureData[0].IsOnWall)
                {
                    upPoint   = new Vector3(b.center.x, b.max.y, b.center.z);
                    downPoint = new Vector3(b.center.x, b.min.y, b.center.z);
                }
                else
                {
                    upPoint   = new Vector3(b.center.x, b.center.y, b.min.z);
                    downPoint = new Vector3(b.center.x, b.center.y, b.max.z);
                }

                leftPoint  = b.center + m_element.transform.right * b.size.x / 2f * -1f;
                rightPoint = b.center + m_element.transform.right * b.size.x / 2f;

                up.start    = upPoint;    //GetPointFromRay(upPoint, Vector3.down, null);
                down.start  = downPoint;  //GetPointFromRay(downPoint, Vector3.up, null);
                left.start  = leftPoint;  //GetPointFromRay(leftPoint, Vector3.right, null);
                right.start = rightPoint; //GetPointFromRay(rightPoint, Vector3.left, null);

                if (SelectedObjectManager.Instance.currentFurnitureData[0].IsOnWall)
                {
                    up.end    = GetPointFromRayFromCot3D(up, Vector3.up, m_element);
                    down.end  = GetPointFromRayFromCot3D(down, Vector3.down, m_element);
                    left.end  = GetPointFromRayFromCot3D(left, VectorFunctions.Switch2D3D(m_wall.Direction), m_element);
                    right.end = GetPointFromRayFromCot3D(right, VectorFunctions.Switch2D3D(-m_wall.Direction),
                                                         m_element);
                }
                else
                {
                    up.end    = GetPointFromRayFromCot3D(up, Vector3.back, m_element);
                    down.end  = GetPointFromRayFromCot3D(down, Vector3.forward, m_element);
                    left.end  = GetPointFromRayFromCot3D(left, Vector3.left, m_element);   //m_element.transform.right*-1f
                    right.end = GetPointFromRayFromCot3D(right, Vector3.right, m_element); //m_element.transform.right
                }

                up.gameObject.SetActive(up.end != Vector3.positiveInfinity && up.Length > 0 &&
                                        up.Length != float.PositiveInfinity);
                down.gameObject.SetActive(down.end != Vector3.positiveInfinity && down.Length > 0 &&
                                          down.Length != float.PositiveInfinity);
                left.gameObject.SetActive(left.end != Vector3.positiveInfinity && left.Length > 0 &&
                                          left.Length != float.PositiveInfinity);
                right.gameObject.SetActive(right.end != Vector3.positiveInfinity && right.Length > 0 &&
                                           right.Length != float.PositiveInfinity);

                // ROTATION FACE TO CAM IN 3D

                var cs = new List <CotationsScript> {
                    up, down, left, right
                };

                var camTrans = GlobalManager.Instance.GetActiveCamera().transform;

                foreach (var c in cs)
                {
                    var tr = new List <Transform> {
                        c.middle1.transform, c.middle2.transform
                    };
                    foreach (var t in tr)
                    {
                        t.LookAt(camTrans);
                        t.localEulerAngles = new Vector3(0, t.localEulerAngles.y, 180);
                    }

                    c.arrow1.localEulerAngles = new Vector3(c.arrow1.localEulerAngles.x,
                                                            c.middle1.transform.localEulerAngles.y, c.arrow1.localEulerAngles.z);
                    c.arrow2.localEulerAngles = new Vector3(c.arrow2.localEulerAngles.x,
                                                            c.middle1.transform.localEulerAngles.y, c.arrow2.localEulerAngles.z);
                    //c.cotationTM.transform.LookAt(camTrans);
                    //c.cotationTM.transform.rotation *= Quaternion.Euler(Vector3.up * 180f);
                    //c.arrow2.localEulerAngles = new Vector3(0,c.arrow2.localEulerAngles.y, c.arrow2.localEulerAngles.z+180);
                    c.cotationTM.transform.rotation = camTrans.rotation;
                }
            }
            else
            {
                up.gameObject.SetActive(false);
                down.gameObject.SetActive(false);
                left.gameObject.SetActive(false);
                right.gameObject.SetActive(false);
            }
        }
        /// <summary>
        ///     Draw the Arc
        /// </summary>
        public void DrawAngle()
        {
            var arcPoints = new List <Vector3>();

            m_radius = wallOpening.Size.x;

            m_startAngle = -wallOpening.associated3DObject.transform.eulerAngles.y;

            if (wallOpening.IsDouble)
            {
                m_radius = m_radius / 2f;
                if (wallOpening.IsPull)
                {
                    m_startAngle -= 90f;
                }
                else
                {
                    m_startAngle -= 180f;
                }
            }
            else
            {
                if (wallOpening.IsLeft)
                {
                    m_startAngle -= 90f;
                }
                if (wallOpening.IsPull)
                {
                    if (wallOpening.IsLeft)
                    {
                        m_startAngle -= 90f;
                    }
                    else
                    {
                        m_startAngle += 90f;
                    }
                }
            }

            var centers = wallOpening.GetCorners();

            m_angle = 90f;

            m_segments = Mathf.RoundToInt(m_angle);
            var curAngle = m_startAngle;

            float buff = 0;

            foreach (var c in centers)
            {
                var center = c;
                //if (is3D) center = VectorFunctions.Switch2D3D(center, 0.05f);

                curAngle = m_startAngle + buff;

                for (var i = 0; i <= m_segments; i++)
                {
                    var x = Mathf.Cos(Mathf.Deg2Rad * curAngle) * m_radius;
                    var y = Mathf.Sin(Mathf.Deg2Rad * curAngle) * m_radius;

                    var pos = new Vector3(x, y, -0.00001f) + center;
                    if (is3D)
                    {
                        pos = VectorFunctions.Switch2D3D(pos, 0.05f);
                    }
                    arcPoints.Add(pos);

                    curAngle += m_angle / m_segments;
                }

                buff = wallOpening.IsPull ? 90f : -90f;
            }

            var col = Color.white * 0.6f * (wallOpening.IsWindow ? 1f : 0.6f);

            LineRend.positionCount = arcPoints.Count;
            LineRend.SetPositions(arcPoints.ToArray());
            LineRend.startColor = col;
            LineRend.endColor   = col;
            LineRend.startWidth = 0.1f;
            LineRend.endWidth   = 0.1f;

            LineRend.gameObject.SetActive(m_angle != -999);
        }
        /// <summary>
        ///     Main method, called when the users stars dragging one of the buttons
        /// </summary>
        private void ClickArrow()
        {
            var me = SelectedObjectManager.Instance.currentSelectedElements.First() as MovableElement;

            // Press on arrow = select arrow
            if (InputFunctions.IsClickingOutsideUI())
            {
                var go = InputFunctions.GetHoveredObject2D(GlobalManager.Instance.GetActiveCamera());
                // Debug.Log("CLICK ARROW " + go);
                if (!go || go.tag != "ElementArrow")
                {
                    isMoving = false;
                    return;
                }

                currentArrow = go;
            }

            // Release = no arrow
            if (Input.GetMouseButtonUp(0) && currentArrow != null)
            {
                currentArrow = null;
                OperationsBufferScript.Instance.AddAutoSave("Etirement");
            }

            // if arrow
            if (currentArrow)
            {
                var   proj      = Vector3.zero;
                var   dif       = Vector3.zero;
                var   sizeCompo = Vector3.zero;
                float dist      = 0;
                var   direction = Vector3.zero;
                var   mousePos  = InputFunctions.GetWorldPoint2D(GlobalManager.Instance.GetActiveCamera());
                if (m_prevPos == mousePos)
                {
                    return;
                }
                //Debug.Log("FLECHE " + currentArrow.name);
                switch (currentArrow.name)
                {
                case "Up":
                    direction = me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oUp, direction) + oUp;
                    dif       = proj - oUp;
                    dist      = Vector3.Distance(proj, oUp);
                    sizeCompo = Vector3.up;
                    break;

                case "Down":
                    direction = -me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oDown, direction) + oDown;
                    dif       = proj - oDown;
                    dist      = Vector3.Distance(proj, oDown);
                    sizeCompo = Vector3.up;
                    break;

                case "Left":
                    direction = -me.associated2DObject.transform.right;
                    proj      = Vector3.Project(mousePos - oLeft, direction) + oLeft;
                    dif       = proj - oLeft;
                    dist      = Vector3.Distance(proj, oLeft);
                    sizeCompo = Vector3.right;
                    break;

                case "Right":
                    direction = me.associated2DObject.transform.right;
                    proj      = Vector3.Project(mousePos - oRight, direction) + oRight;
                    dif       = proj - oRight;
                    dist      = Vector3.Distance(proj, oRight);
                    sizeCompo = Vector3.right;
                    break;

                case "UpLeft":
                    direction = -me.associated2DObject.transform.right + me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oUpLeft, direction) + oUpLeft;
                    dif       = proj - oUpLeft;
                    dist      = Vector3.Distance(proj, oUpLeft);
                    sizeCompo = Vector3.up + Vector3.right;
                    break;

                case "UpRight":
                    direction = me.associated2DObject.transform.right + me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oUpRight, direction) + oUpRight;
                    dif       = proj - oUpRight;
                    dist      = Vector3.Distance(proj, oUpRight);
                    sizeCompo = Vector3.up + Vector3.right;
                    break;

                case "DownLeft":
                    direction = -me.associated2DObject.transform.right - me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oDownLeft, direction) + oDownLeft;
                    dif       = proj - oDownLeft;
                    dist      = Vector3.Distance(proj, oDownLeft);
                    sizeCompo = Vector3.up + Vector3.right;
                    break;

                case "DownRight":
                    direction = me.associated2DObject.transform.right - me.associated2DObject.transform.up;
                    proj      = Vector3.Project(mousePos - oDownRight, direction) + oDownRight;
                    dif       = proj - oDownRight;
                    dist      = Vector3.Distance(proj, oDownRight);
                    sizeCompo = Vector3.up + Vector3.right;
                    break;
                }

                SetSizeCompoAndDirection(dif, direction, sizeCompo, out direction, out sizeCompo);
                me.SetPosition(me.Position + VectorFunctions.Switch2D3D(dist * direction / 4f));
                me.SetSize(me.Size + VectorFunctions.Switch2D3D(dist * sizeCompo / 2f));
                if (me is Furniture)
                {
                    (me as Furniture).AdjustSpriteSize();
                }
                currentArrow.transform.position =
                    new Vector3(proj.x, proj.y, me.associated2DObject.transform.position.z);
                isMoving  = true;
                m_prevPos = proj;
                FurniturePropScript.Instance.UpdateFurnitureProperties();
            }
            else
            {
                isMoving = false;
            }
        }