Esempio n. 1
0
        static public void CreatePolyLine()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor   ed  = doc.Editor;
            Database db  = doc.Database;

            HostApplicationServices hs = HostApplicationServices.Current;
            string outputPath          = hs.FindFile(doc.Name, doc.Database, FindFileHint.Default);

            //get user input
            //select point input file
            ed.WriteMessage("Select the Excel file contains the door step points");
            string excelPath = FileOps.SelectFile();

            #region get Excel Sheet Name
            PromptStringOptions pStrOpts = new PromptStringOptions("\nEnter Sheet Name: ");
            pStrOpts.AllowSpaces = true;
            PromptResult pStrRes = doc.Editor.GetString(pStrOpts);
            string       shtName = pStrRes.StringResult;
            #endregion

            List <Point3d> doorStepPts = Excel.getAllpoint(doc, excelPath, shtName);

            CADops.CreatePolylineFromPoint(doc, doorStepPts);
        }
Esempio n. 2
0
        private static string DrawingPath()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            HostApplicationServices hs = HostApplicationServices.Current;
            string path = hs.FindFile(doc.Name, doc.Database, FindFileHint.Default);

            return(path);
        }
Esempio n. 3
0
        public DataBlok()
        {
            Doc  = AcAp.DocumentManager.MdiActiveDocument;
            acDb = Doc.Database;
            HostApplicationServices hs = HostApplicationServices.Current;
            string path = hs.FindFile(Doc.Name, Doc.Database, FindFileHint.Default);

            infoFile             = new FileInfo(path);
            ListBlokTabel        = new Dictionary <string, ObjectId>();
            ListBlokReference    = new Dictionary <string, ObjectId>();
            ListAtributReference = new Dictionary <string, ObjectId>();
        }
Esempio n. 4
0
        private void butSpecify_Click(object sender, EventArgs e)
        {
            if (rdoBlock.Checked)
            {
                m_refresher.FrameBlock = Functions.GetBlock();
                if (m_refresher.FrameBlock != null)
                {
                    m_refresher.BasePoints = Utils.GetCorners();
                }
                if (m_refresher.FrameBlock != null &&
                    m_refresher.BasePoints != new Point3d[2])
                {
                    // Get Name || Filename || Path of block
                    string p = m_refresher.FrameBlock.PathName;
                    txtBlockName.Text     = m_refresher.FrameBlock.Name;
                    txtBlockFileName.Text = Path.GetFileName(p);
                    if (txtBlockFileName.Text == "")
                    {
                        p = "";
                        rdoName.Checked     = true;
                        rdoFileName.Enabled = false;
                        rdoPath.Enabled     = false;
                    }
                    else
                    {
                        rdoFileName.Enabled = true;
                        rdoPath.Enabled     = true;
                        if (!(Path.IsPathRooted(p)))
                        {
                            Document doc = Autodesk.AutoCAD.ApplicationServices.
                                           Application.DocumentManager.MdiActiveDocument;
                            HostApplicationServices hs = HostApplicationServices.Current;
                            string acPath = hs.FindFile(
                                doc.Name, doc.Database, FindFileHint.Default);
                            p = Path.Combine(acPath, p);
                            p = Path.GetFullPath(p);
                        }
                    }
                    txtBlockPath.Text = p;
                }
            }

            if (rdoRectangle.Checked)
            {
            }

            if (rdoLine.Checked)
            {
            }
        }
Esempio n. 5
0
        public void DrawingPath()
        {
            Document doc = Core.Application.DocumentManager.MdiActiveDocument;

            HostApplicationServices hs =
                HostApplicationServices.Current;
            string path =
                hs.FindFile(
                    doc.Name,
                    doc.Database,
                    FindFileHint.Default
                    );

            doc.Editor.WriteMessage(
                "\nFile was found in: " + path
                );
        }
Esempio n. 6
0
        /// <summary>
        /// Get charactericstic of block (Name || Filename || Path)
        /// </summary>
        /// <param name="btr"></param>
        /// <returns></returns>
        private string GetBlockChar(Document doc)
        {
            string n = null;

            BlockName nType = BlockName.Name;

            if (m_rdoFileName.Checked)
            {
                nType = BlockName.FileName;
            }
            if (m_rdoPath.Checked)
            {
                nType = BlockName.Path;
            }

            switch (nType)
            {
            case BlockName.Name:
                n = FrameBlock.Name;
                break;

            case BlockName.FileName:
                n = Path.GetFileName(FrameBlock.PathName);
                break;

            case BlockName.Path:
                string p = FrameBlock.PathName;
                if (!(Path.IsPathRooted(p)))
                {
                    HostApplicationServices hs = HostApplicationServices.Current;
                    string acPath = hs.FindFile(
                        doc.Name, doc.Database, FindFileHint.Default);
                    p = Path.Combine(acPath, p);
                    n = Path.GetFullPath(p);
                }
                break;
            }
            return(n);
        }
Esempio n. 7
0
        static public void ListVertices()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor   ed  = doc.Editor;
            Database db  = doc.Database;

            HostApplicationServices hs = HostApplicationServices.Current;
            string path = hs.FindFile(doc.Name, doc.Database, FindFileHint.Default);

            //ed.WriteMessage("\nTo List all the points in the 3D string, type command LISTVERTICES.");

            long adjustX = 0;
            long adjustY = 0;
            long scaler  = 1;

            PromptEntityResult per = ed.GetEntity("Select polylines");
            ObjectId           oid = per.ObjectId;

            if (per.Status == PromptStatus.OK)
            {
                Transaction tr      = db.TransactionManager.StartTransaction();
                DBObject    objPick = tr.GetObject(oid, OpenMode.ForRead);
                Entity      objEnt  = objPick as Entity;
                string      sLayer  = objEnt.Layer.ToString();

                path += "_" + sLayer;

                ObjectIdCollection oDBO = CADops.SelectAllPolyline(sLayer);
                //Handle handseed = db.Handseed;

                try
                {
                    using (tr)
                    {
                        long          shtNo = 1;
                        List <string> data  = new List <string>();
                        foreach (ObjectId id in oDBO)
                        {
                            //DBObject obj = tr.GetObject(per.ObjectId, OpenMode.ForRead);
                            DBObject obj       = tr.GetObject(id, OpenMode.ForRead);
                            Entity   ent       = obj as Entity;
                            string   layerName = ent.Layer.ToString();

                            //create list for storing x,y,z value of point
                            string StrId = "";


                            // If a "lightweight" (or optimized) polyline
                            Autodesk.AutoCAD.DatabaseServices.Polyline lwp = obj as Autodesk.AutoCAD.DatabaseServices.Polyline;

                            if (lwp != null)
                            {
                                //StrId = lwp.ObjectId.ToString();
                                StrId = lwp.Handle.ToString();
                                ed.WriteMessage("\n" + StrId);
                                // Use a for loop to get each vertex, one by one
                                int vn = lwp.NumberOfVertices;
                                for (int i = 0; i < vn; i++)
                                {
                                    // Could also get the 3D point here
                                    Point2d pt   = lwp.GetPoint2dAt(i);
                                    string  temp = CADops.scaleNmove(pt.X, adjustX, scaler) + "," + CADops.scaleNmove(pt.Y, adjustY, scaler) + ", ," + StrId + "," + layerName;
                                    data.Add(temp);
                                    ed.WriteMessage("\n" + pt.ToString());
                                }
                            }
                            else
                            {
                                // If an old-style, 2D polyline
                                Polyline2d p2d = obj as Polyline2d;
                                if (p2d != null)
                                {
                                    StrId = p2d.Handle.ToString();
                                    ed.WriteMessage("\n" + StrId);

                                    // Use foreach to get each contained vertex
                                    foreach (ObjectId vId in p2d)
                                    {
                                        Vertex2d v2d  = (Vertex2d)tr.GetObject(vId, OpenMode.ForRead);
                                        string   temp = CADops.scaleNmove(v2d.Position.X, adjustX, scaler) + "," + CADops.scaleNmove(v2d.Position.Y, adjustY, scaler) + "," + v2d.Position.Z * scaler + "," + StrId + "," + layerName;
                                        data.Add(temp);
                                        ed.WriteMessage("\n" + v2d.Position.ToString());
                                    }
                                }
                                else
                                {
                                    // If an old-style, 3D polyline
                                    Polyline3d p3d = obj as Polyline3d;
                                    if (p3d != null)
                                    {
                                        StrId = p3d.Handle.ToString();
                                        ed.WriteMessage("\n" + StrId);

                                        // Use foreach to get each contained vertex
                                        foreach (ObjectId vId in p3d)
                                        {
                                            PolylineVertex3d v3d  = (PolylineVertex3d)tr.GetObject(vId, OpenMode.ForRead);
                                            string           temp = CADops.scaleNmove(v3d.Position.X, adjustX, scaler) + "," + CADops.scaleNmove(v3d.Position.Y, adjustY, scaler) + "," + v3d.Position.Z * scaler + "," + StrId + "," + layerName;
                                            data.Add(temp);
                                            ed.WriteMessage("\n" + v3d.Position.ToString());
                                        }
                                    }
                                }
                            }
                            //create dataarray to populate in excel
                            int no = data.Count;
                            ed.WriteMessage("\n Number of Point:" + no);

                            //createCSV(data, shtNo);
                            shtNo += 1;
                        }
                        Excel.createCSV(data, path);
                        // Committing is cheaper than aborting
                        ed.WriteMessage("\ncsv file has been created under path " + path);
                        ed.WriteMessage("\nData format: Easting, Northing, Elevation, String ID, Layer Name.");
                        tr.Commit();
                    }
                }
                catch { }
            }
        }
Esempio n. 8
0
        //project to level 0 to find the intersect point
        static public void CheckElevationDifference()
        {
            string msg = string.Empty;

            double checkDistance = 0.55;

            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor   ed  = doc.Editor;
            Database db  = doc.Database;

            HostApplicationServices hs = HostApplicationServices.Current;
            string outputPath          = hs.FindFile(doc.Name, doc.Database, FindFileHint.Default);
            string logPath             = outputPath + "_log.log";

            System.IO.File.WriteAllText(logPath, msg);

            //get user input
            //select point input file
            ed.WriteMessage("Select the Excel file contains the door step points");
            string excelPath = FileOps.SelectFile();

            #region get Excel Sheet Name
            PromptStringOptions pStrOpts = new PromptStringOptions("\nEnter Sheet Name: ");
            pStrOpts.AllowSpaces = true;
            PromptResult pStrRes = doc.Editor.GetString(pStrOpts);
            string       shtName = pStrRes.StringResult;
            #endregion

            List <Point3d> doorStepPts = Excel.getAllpoint(doc, excelPath, shtName);

            PromptEntityResult per = ed.GetEntity("Select polylines");
            ObjectId           oid = per.ObjectId;

            ObjectIdCollection oDBO     = new ObjectIdCollection();
            List <Polyline3d>  poly3ds  = new List <Polyline3d>();
            List <Polyline3d>  poly3ds0 = new List <Polyline3d>();

            if (per.Status == PromptStatus.OK)
            {
                Transaction tr = db.TransactionManager.StartTransaction();

                BlockTable       bt  = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead, false);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);

                DBObject objPick = tr.GetObject(oid, OpenMode.ForRead);
                Entity   objEnt  = objPick as Entity;
                string   sLayer  = objEnt.Layer.ToString();

                oDBO = CADops.SelectAllPolyline(sLayer);
                foreach (ObjectId id in oDBO)
                {
                    Polyline3d pl = new Polyline3d();
                    System.IO.File.AppendAllText(logPath, $"{id}\n");
                    poly3ds0.Add(CADops.CreatePolylineOnXYPlane(doc, id, ref pl));
                    poly3ds.Add(pl);
                }
            }

            List <Point3d> output = new List <Point3d>();
            List <string>  data   = new List <string>();
            if (poly3ds.Count() > 0)
            {
                Transaction tr = db.TransactionManager.StartTransaction();

                BlockTable       bt  = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead, false);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);

                using (tr)
                {
                    List <Vector3d> vectorsAlongPath = new List <Vector3d>();
                    List <Vector3d> vectors          = CADops.getVectors(doorStepPts, doc, ref vectorsAlongPath);

                    //foreach (Point3d pt in doorStepPts)
                    for (int i = 0; i < doorStepPts.Count(); i++)
                    {
                        Point3d pt = doorStepPts[i];

                        Point3d pt0 = new Point3d(pt.X, pt.Y, 0);

                        Vector3d v   = vectors[i].GetNormal() * 5;
                        Matrix3d mat = Matrix3d.Displacement(v);
                        Point3d  npt = pt0.TransformBy(mat);

                        v   = vectors[i].GetNormal() * -5;
                        mat = Matrix3d.Displacement(v);
                        Point3d npt2 = pt0.TransformBy(mat);

                        //create a 2d line in XY plane
                        Line ln = new Line(npt, npt2);

                        btr.AppendEntity(ln);
                        tr.AddNewlyCreatedDBObject(ln, true);

                        msg = $"pt => {pt.X}, {pt.Y}, {pt.Z}\n";

                        #region get intersect point from point to polyline
                        Point3d ptNearest = Point3d.Origin;
                        for (int j = 0; j < poly3ds0.Count(); j++)
                        {
                            Polyline3d p3d0 = poly3ds0[j];
                            Polyline3d p3d  = poly3ds[j];

                            Point3d ptTemp = new Point3d();
                            #region get the alignment object and find the nearest point to the nominated point

                            Point3dCollection pts3D = new Point3dCollection();
                            p3d0.IntersectWith(ln, Intersect.OnBothOperands, pts3D, IntPtr.Zero, IntPtr.Zero);

                            try
                            {
                                if (pts3D.Count > 0)
                                {
                                    double para = p3d0.GetParameterAtPoint(pts3D[0]);
                                    //ed.WriteMessage($"{pts3D[0]}, {para}\n");
                                    ptTemp = p3d.GetPointAtParameter(para);
                                }
                            }
                            catch { }

                            #region get the point with lower Z
                            if (ptNearest == Point3d.Origin)
                            {
                                ptNearest = ptTemp;
                            }
                            else
                            {
                                if (ptNearest.Z > ptTemp.Z)
                                {
                                    ptNearest = ptTemp;
                                }
                            }
                            #endregion
                        }
                        #endregion
                        #endregion

                        msg += $"ptNearest: {ptNearest.X}, {ptNearest.Y}, {ptNearest.Z}\n";

                        try
                        {
                            double diff = ptNearest.Z - pt.Z;
                            if (Math.Abs(diff) <= checkDistance)
                            {
                                Point3d newPt = new Point3d(pt.X, pt.Y, ptNearest.Z + checkDistance);
                                output.Add(newPt);
                                data.Add($"{newPt.X},{newPt.Y},{newPt.Z}, less, {diff}, {ptNearest.Z}");
                                msg += $", Z diff: {diff} => less than {checkDistance} => {newPt.X}, {newPt.Y}, {newPt.Z}\n\n";
                            }
                            else
                            {
                                Point3d newPt = pt;
                                output.Add(newPt);
                                data.Add($"{newPt.X},{newPt.Y},{newPt.Z}, more, {diff}, {ptNearest.Z}");
                                msg += $", Z diff: {diff} => more than {checkDistance} => {newPt.X}, {newPt.Y}, {newPt.Z}\n\n";
                            }
                        }
                        catch { }

                        System.IO.File.AppendAllText(logPath, msg);
                    }
                    tr.Commit();
                }
            }
            Excel.createCSV(data, outputPath);
            ed.WriteMessage("\ncsv file has been created under path " + outputPath);
        }
Esempio n. 9
0
        public void convertGivenListsToXML(
            List <Geometry.Polygon2D> originList,
            List <Geometry.Polygon2D> intermediateList,
            List <Geometry.Segment2D> gatheringLineList,
            List <Geometry.Polygon2D> destinationList,
            List <Geometry.Polygon2D> avoidanceList,
            List <Geometry.Segment2D> wallList,
            List <Geometry.Polygon2D> solidList,
            List <Geometry.Segment2D> graphList,
            Dictionary <String, List <Polygon2D> > taggedAreaList)
        {
            Document          currentDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Editor            editor          = currentDocument.Editor;
            XmlWriterSettings settings        = new XmlWriterSettings();

            settings.Indent      = true;
            settings.IndentChars = "  ";
            XmlWriter writer = null;

            HostApplicationServices hs = HostApplicationServices.Current;
            String drawingFilePath     = "";

            try
            {
                drawingFilePath = hs.FindFile(currentDocument.Name, currentDocument.Database, FindFileHint.Default);
            }
            catch (Exception)
            {
                drawingFilePath = currentDocument.Database.Filename;
            }

            String         targetPath = drawingFilePath.Remove(drawingFilePath.Count() - 4) + "_pedSimScenario.xml";
            SaveFileDialog fileDialog = new SaveFileDialog("Choose target folder:", targetPath, "xml", "XMLfileToLink", SaveFileDialog.SaveFileDialogFlags.DoNotTransferRemoteFiles);

            System.Windows.Forms.DialogResult result = fileDialog.ShowDialog();

            if (result != System.Windows.Forms.DialogResult.OK)
            {
                editor.WriteMessage("\nWrong file format.");
                return;
            }

            targetPath           = fileDialog.Filename;
            simulationName_Value = this.getFileName(targetPath);

            writer = XmlWriter.Create(@targetPath, settings);

            writer.WriteStartDocument();
            writer.WriteStartElement(simulator_Node);
            writer.WriteAttributeString(version_Attribute, version_Value);
            writer.WriteAttributeString(simulationName_Attribute, simulationName_Value);
            writer.WriteStartElement(layouts_Node);
            writer.WriteStartElement(scenario_Node);
            writer.WriteAttributeString(id_Attribute, scenarioID.ToString());
            writer.WriteAttributeString(name_Attribute, scenarioName_Value);

            double[] maxCoordinates = GeometryFactory.getMaximumCoordinates();
            double[] minCoordinates = GeometryFactory.getMinimumCoordinates();
            writer.WriteAttributeString(maxX_Attribute, Math.Round(maxCoordinates[0] + 1.0, decimalPlaces).ToString());
            writer.WriteAttributeString(maxY_Attribute, Math.Round(maxCoordinates[1] + 1.0, decimalPlaces).ToString());
            writer.WriteAttributeString(minX_Attribute, Math.Round(minCoordinates[0] - 1.0, decimalPlaces).ToString());
            writer.WriteAttributeString(minY_Attribute, Math.Round(minCoordinates[1] - 1.0, decimalPlaces).ToString());

            graphID = this.generateGraph(writer, graphList, graphType_Value, graphID);

            areaID = this.generatePolygon(writer, originList, area_Node, originArea_Value, areaID);
            areaID = this.generateIntermediates(writer, intermediateList, gatheringLineList, areaID);
            areaID = this.generatePolygon(writer, destinationList, area_Node, destinationArea_Value, areaID);
            areaID = this.generatePolygon(writer, avoidanceList, area_Node, avoidanceArea_Value, areaID);

            foreach (KeyValuePair <string, List <Polygon2D> > currentTaggedAreaList in taggedAreaList)
            {
                taggedAreaID = this.generatePolygon(writer, currentTaggedAreaList.Value, taggedArea_Node, currentTaggedAreaList.Key, taggedAreaID);
            }

            obstacleID = this.generateSegment(writer, wallList, obstacle_Node, wall_Value, obstacleID);
            obstacleID = this.generatePolygon(writer, solidList, obstacle_Node, solid_Value, obstacleID);

            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
            writer.Close();

            editor.WriteMessage("\nXMLconversion successfull:" + "\n" + targetPath);
        }