示例#1
0
        public void pipeWalk()
        {
            // 4.1 Declare a variable as a PlantProject. Instantiate it using
            // the CurrentProject of PlantApplication
            PlantProject mainPrj = PlantApplication.CurrentProject;

            // 4.2 Declare a Project and instantiate it using  
            // ProjectParts[] of the PlantProject from step 4.1
            // use "Piping" for the name. This will get the Piping project 
            Project prj = mainPrj.ProjectParts["Piping"];

            // 4.3 Declare a variable as a DataLinksManager. Instantiate it using
            // the DataLinksManager property of the Project from 4.2.
            DataLinksManager dlm = prj.DataLinksManager;

            //  PipingProject pipingPrj = (PipingProject) mainPrj.ProjectParts["Piping"];
            //  DataLinksManager dlm = pipingPrj.DataLinksManager;


            // Get the TransactionManager
            TransactionManager tm =
            AcadApp.DocumentManager.MdiActiveDocument.Database.TransactionManager;

            // Get the AutoCAD editor
            Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;

            // Prompt the user to select a pipe entity
            PromptEntityOptions pmtEntOpts = new PromptEntityOptions("Select a Pipe : ");
            PromptEntityResult pmtEntRes = ed.GetEntity(pmtEntOpts);
            if (pmtEntRes.Status == PromptStatus.OK)
            {
                // Get the ObjectId of the selected entity
                ObjectId entId = pmtEntRes.ObjectId;

                // Use the using statement and start a transaction
                // Use the transactionManager created above (tm)
                using (Transaction tr = tm.StartTransaction())
                {

                    try
                    {

                        // 4.4 Declare a variable as a Part. Instantiate it using
                        // the GetObject Method of the Transaction created above (tr)
                        // for the ObjectId argument use the ObjectId from above (entId)
                        // Open it for read. (need to cast it to Part)
                        Part pPart = (Part)tr.GetObject(entId, OpenMode.ForRead);

                        // 4.5 Declare a variable as a PortCollection. Instantiate it 
                        // using the GetPorts method of the Part from step 4.4.
                        // use PortType.All for the PortType.
                        PortCollection portCol = pPart.GetPorts(PortType.All); // (PortType.Both);

                        // 4.6 Use the WriteMessage function of the Editor created above (ed)
                        // print the Count property of the PortCollection from step 4.5.
                        // use a string similar to this: "\n port collection count = "
                        ed.WriteMessage("\n port collection count = " + portCol.Count);

                        // 4.7 Declare a ConnectionManager variable. 
                        // (Autodesk.ProcessPower.PnP3dObjects.ConnectionManager)
                        // Instantiate the ConnectionManager variable by making it
                        // equal to a new Autodesk.ProcessPower.PnP3dObjects.ConnectionManager();
                        ConnectionManager conMgr = new Autodesk.ProcessPower.PnP3dObjects.ConnectionManager();

                        // 4.8 Declare a bool variable named bPartIsConnected and make it false
                        bool bPartIsConnected = false;


                        // 4.9 Use a foreach loop and iterate through all of the Port in
                        // the PortCollection from step 4.5.
                        // Note: Put the closing curly brace below step 4.18
                        foreach (Port pPort in portCol)
                        {
                            // 4.10 Use the WriteMessage function of the Editor created above (ed)
                            // print the Name property of the Port (looping through the ports) 
                            // use a string similar to this: "\nName of this Port = " +
                            ed.WriteMessage("\nName of this Port = " + pPort.Name);

                            // 4.11 Use the WriteMessage function of the Editor created above (ed)
                            // print the X property of the Position from the Port
                            // use a string similar to this: "\nX of this Port = " + 
                            ed.WriteMessage("\nX of this Port = " + pPort.Position.X.ToString());

                            // 4.12 Declare a variable as a Pair and make it equal to a 
                            // new Pair().
                            Pair pair1 = new Pair();

                            // 4.13 Make the ObjectId property of the Pair created in step 4.10 
                            // equal to the ObjectId of the selected Part (entId)
                            pair1.ObjectId = entId;

                            // 4.14 Make the Port property of the Pair created in step 4.10
                            // equal to the port from the foreach cycle (step 4.7)
                            pair1.Port = pPort;


                            // 4.15 Use an if else and the IsConnected method of the ConnectionManager
                            // from step 4.7. Pass in the Pair from step 4.12
                            // Note: Put the else statement below step 4.17 and the closing curly
                            // brace for the else below step 4.18
                            if (conMgr.IsConnected(pair1))
                            {
                                // 4.16 Use the WriteMessage function of the Editor (ed)
                                // and put this on the command line:
                                // "\n Pair is connected "
                                ed.WriteMessage("\n Pair is connected ");

                                // 4.17 Make the bool from step 4.8 equal to true.
                                // This is used in an if statement in step 4.19.
                                bPartIsConnected = true;
                            }
                            else
                            {
                                // 4.18 Use the WriteMessage function of the Editor (ed)
                                // and put this on the command line:
                                // "\n Pair is NOT connected "
                                ed.WriteMessage("\n Pair is NOT connected ");
                            }

                        }


                        // 4.19 Use an If statement and the bool from step 4.8. This will be 
                        // true if one of the pairs tested in loop above loop was connected. 
                        // Note: Put the closing curly brace after step 4.26
                        if (bPartIsConnected)
                        {

                            // 4.20 Declare an ObjectId named curObjID make it 
                            // equal to ObjectId.Null
                            ObjectId curObjId = ObjectId.Null;


                            // 4.21 Declare an int name it rowId 
                            int rowId;

                            // 4.22 Declare a variable as a  ConnectionIterator instantiate it
                            // using the NewIterator method of ConnectionIterator (Autodesk.ProcessPower.PnP3dObjects.)
                            // Use the ObjectId property of the Part from step 4.4 
                            ConnectionIterator connectIter = ConnectionIterator.NewIterator(pPart.ObjectId);                       //need PnP3dObjectsMgd.dll

                            // You could Also use this, need to ensure that pPort is connected
                            // Use the ConnectionManager and a Pair as in the example above.
                            // conIter = ConnectionIterator.NewIterator(pPart.ObjectId, pPort);

                            // 4.23 Use a for loop and loop through the connections in the 
                            // ConnectionIterator from step 4.22. The initializer can be empty.
                            // Use !.Done for the condition. use .Next for the iterator.  
                            // Note: Put the closing curly brace after step 4.26
                            for (; !connectIter.Done(); connectIter.Next())
                            {

                                // 4.24 Make the ObjectId from step 4.20 equal to the ObjectId
                                // property of the ConnectionIterator
                                curObjId = connectIter.ObjectId;

                                // 4.25 Make the integer from step 4.21 equal to the return from 
                                // FindAcPpRowId method of the DataLinksManager from step 4.3.
                                // pass in the ObjectId from step 4.24
                                rowId = dlm.FindAcPpRowId(curObjId);

                                //4.26 Use the WriteMessage function of the Editor (ed)
                                // and pring the integer from step 4.25. Use a string similar to this
                                // this on the command line:
                                // "\n PnId = " +
                                ed.WriteMessage("\n PnId = " + rowId);

                            }

                        }
                    }
                    catch (System.Exception ex)
                    {

                        ed.WriteMessage(ex.ToString());
                    }
                }
            }

        }
示例#2
0
        public void pipeWalk()
        {
            // 4.1 Declare a variable as a PlantProject. Instantiate it using
            // the CurrentProject of PlantApplication
            PlantProject mainPrj = PlantApplication.CurrentProject;

            // 4.2 Declare a Project and instantiate it using
            // ProjectParts[] of the PlantProject from step 4.1
            // use "Piping" for the name. This will get the Piping project
            Project prj = mainPrj.ProjectParts["Piping"];

            // 4.3 Declare a variable as a DataLinksManager. Instantiate it using
            // the DataLinksManager property of the Project from 4.2.
            DataLinksManager dlm = prj.DataLinksManager;

            //  PipingProject pipingPrj = (PipingProject) mainPrj.ProjectParts["Piping"];
            //  DataLinksManager dlm = pipingPrj.DataLinksManager;


            // Get the TransactionManager
            TransactionManager tm =
                AcadApp.DocumentManager.MdiActiveDocument.Database.TransactionManager;

            // Get the AutoCAD editor
            Editor ed = AcadApp.DocumentManager.MdiActiveDocument.Editor;

            // Prompt the user to select a pipe entity
            PromptEntityOptions pmtEntOpts = new PromptEntityOptions("Select a Pipe : ");
            PromptEntityResult  pmtEntRes  = ed.GetEntity(pmtEntOpts);

            if (pmtEntRes.Status == PromptStatus.OK)
            {
                // Get the ObjectId of the selected entity
                ObjectId entId = pmtEntRes.ObjectId;

                // Use the using statement and start a transaction
                // Use the transactionManager created above (tm)
                using (Transaction tr = tm.StartTransaction())
                {
                    try
                    {
                        // 4.4 Declare a variable as a Part. Instantiate it using
                        // the GetObject Method of the Transaction created above (tr)
                        // for the ObjectId argument use the ObjectId from above (entId)
                        // Open it for read. (need to cast it to Part)
                        Part pPart = (Part)tr.GetObject(entId, OpenMode.ForRead);

                        // 4.5 Declare a variable as a PortCollection. Instantiate it
                        // using the GetPorts method of the Part from step 4.4.
                        // use PortType.All for the PortType.
                        PortCollection portCol = pPart.GetPorts(PortType.All); // (PortType.Both);

                        // 4.6 Use the WriteMessage function of the Editor created above (ed)
                        // print the Count property of the PortCollection from step 4.5.
                        // use a string similar to this: "\n port collection count = "
                        ed.WriteMessage("\n port collection count = " + portCol.Count);

                        // 4.7 Declare a ConnectionManager variable.
                        // (Autodesk.ProcessPower.PnP3dObjects.ConnectionManager)
                        // Instantiate the ConnectionManager variable by making it
                        // equal to a new Autodesk.ProcessPower.PnP3dObjects.ConnectionManager();
                        ConnectionManager conMgr = new Autodesk.ProcessPower.PnP3dObjects.ConnectionManager();

                        // 4.8 Declare a bool variable named bPartIsConnected and make it false
                        bool bPartIsConnected = false;


                        // 4.9 Use a foreach loop and iterate through all of the Port in
                        // the PortCollection from step 4.5.
                        // Note: Put the closing curly brace below step 4.18
                        foreach (Port pPort in portCol)
                        {
                            // 4.10 Use the WriteMessage function of the Editor created above (ed)
                            // print the Name property of the Port (looping through the ports)
                            // use a string similar to this: "\nName of this Port = " +
                            ed.WriteMessage("\nName of this Port = " + pPort.Name);

                            // 4.11 Use the WriteMessage function of the Editor created above (ed)
                            // print the X property of the Position from the Port
                            // use a string similar to this: "\nX of this Port = " +
                            ed.WriteMessage("\nX of this Port = " + pPort.Position.X.ToString());

                            // 4.12 Declare a variable as a Pair and make it equal to a
                            // new Pair().
                            Pair pair1 = new Pair();

                            // 4.13 Make the ObjectId property of the Pair created in step 4.10
                            // equal to the ObjectId of the selected Part (entId)
                            pair1.ObjectId = entId;

                            // 4.14 Make the Port property of the Pair created in step 4.10
                            // equal to the port from the foreach cycle (step 4.7)
                            pair1.Port = pPort;


                            // 4.15 Use an if else and the IsConnected method of the ConnectionManager
                            // from step 4.7. Pass in the Pair from step 4.12
                            // Note: Put the else statement below step 4.17 and the closing curly
                            // brace for the else below step 4.18
                            if (conMgr.IsConnected(pair1))
                            {
                                // 4.16 Use the WriteMessage function of the Editor (ed)
                                // and put this on the command line:
                                // "\n Pair is connected "
                                ed.WriteMessage("\n Pair is connected ");

                                // 4.17 Make the bool from step 4.8 equal to true.
                                // This is used in an if statement in step 4.19.
                                bPartIsConnected = true;
                            }
                            else
                            {
                                // 4.18 Use the WriteMessage function of the Editor (ed)
                                // and put this on the command line:
                                // "\n Pair is NOT connected "
                                ed.WriteMessage("\n Pair is NOT connected ");
                            }
                        }


                        // 4.19 Use an If statement and the bool from step 4.8. This will be
                        // true if one of the pairs tested in loop above loop was connected.
                        // Note: Put the closing curly brace after step 4.26
                        if (bPartIsConnected)
                        {
                            // 4.20 Declare an ObjectId named curObjID make it
                            // equal to ObjectId.Null
                            ObjectId curObjId = ObjectId.Null;


                            // 4.21 Declare an int name it rowId
                            int rowId;

                            // 4.22 Declare a variable as a  ConnectionIterator instantiate it
                            // using the NewIterator method of ConnectionIterator (Autodesk.ProcessPower.PnP3dObjects.)
                            // Use the ObjectId property of the Part from step 4.4
                            ConnectionIterator connectIter = ConnectionIterator.NewIterator(pPart.ObjectId);                       //need PnP3dObjectsMgd.dll

                            // You could Also use this, need to ensure that pPort is connected
                            // Use the ConnectionManager and a Pair as in the example above.
                            // conIter = ConnectionIterator.NewIterator(pPart.ObjectId, pPort);

                            // 4.23 Use a for loop and loop through the connections in the
                            // ConnectionIterator from step 4.22. The initializer can be empty.
                            // Use !.Done for the condition. use .Next for the iterator.
                            // Note: Put the closing curly brace after step 4.26
                            for (; !connectIter.Done(); connectIter.Next())
                            {
                                // 4.24 Make the ObjectId from step 4.20 equal to the ObjectId
                                // property of the ConnectionIterator
                                curObjId = connectIter.ObjectId;

                                // 4.25 Make the integer from step 4.21 equal to the return from
                                // FindAcPpRowId method of the DataLinksManager from step 4.3.
                                // pass in the ObjectId from step 4.24
                                rowId = dlm.FindAcPpRowId(curObjId);

                                //4.26 Use the WriteMessage function of the Editor (ed)
                                // and pring the integer from step 4.25. Use a string similar to this
                                // this on the command line:
                                // "\n PnId = " +
                                ed.WriteMessage("\n PnId = " + rowId);
                            }
                        }
                    }
                    catch (System.Exception ex)
                    {
                        ed.WriteMessage(ex.ToString());
                    }
                }
            }
        }