Ejemplo n.º 1
0
        /// <summary>
        /// Make a line from start point to end point with the direction and style
        /// </summary>
        /// <param name="startpt">start point</param>
        /// <param name="endpt">end point</param>
        /// <param name="direction">the direction which decide the plane</param>
        /// <param name="style">line style name</param>
        public void MakeLine(Autodesk.Revit.DB.XYZ startpt, Autodesk.Revit.DB.XYZ endpt, Autodesk.Revit.DB.XYZ direction, string style)
        {
            try
             {
            m_LineCount = m_LineCount + 1;
            Line line = m_app.Application.Create.NewLineBound(startpt, endpt);
            // Line must lie in the sketch plane.  Use the direction of the line to construct a plane that hosts the target line.
            XYZ rotatedDirection = XYZ.BasisX;

            // If the direction is not vertical, cross the direction vector with Z to get a vector rotated ninety degrees.  That vector,
            // plus the original vector, form the axes of the sketch plane.
            if (!direction.IsAlmostEqualTo(XYZ.BasisZ) && !direction.IsAlmostEqualTo(-XYZ.BasisZ))
            {
                rotatedDirection = direction.Normalize().CrossProduct(XYZ.BasisZ);
            }
            Plane geometryPlane = m_app.Application.Create.NewPlane(direction, rotatedDirection, startpt);
            SketchPlane skplane = m_app.ActiveUIDocument.Document.Create.NewSketchPlane(geometryPlane);
            ModelCurve mcurve = m_app.ActiveUIDocument.Document.Create.NewModelCurve(line, skplane);
            m_app.ActiveUIDocument.Document.Regenerate();
            ElementArray lsArr = mcurve.LineStyles;
            foreach (Autodesk.Revit.DB.Element e in lsArr)
            {
               if (e.Name == style)
               {
                  mcurve.LineStyle = e;
                  break;
               }
            }
            m_app.ActiveUIDocument.Document.Regenerate();
             }
             catch (System.Exception ex)
             {
            m_outputInfo.Add("Failed to create lines: " + ex.ToString());
             }
        }
    /// <summary>
    /// Draw a small line for debug porpouse
    /// </summary>
    public static void MakeLine(Autodesk.Revit.UI.UIApplication app,
      Autodesk.Revit.DB.XYZ startpt, Autodesk.Revit.DB.XYZ endpt, 
      Autodesk.Revit.DB.XYZ direction, string style)
    {
      try
      {
        Line line = app.Application.Create.NewLineBound(startpt,
          endpt);
        XYZ rotatedDirection = XYZ.BasisX;
        if (!direction.IsAlmostEqualTo(XYZ.BasisZ) && 
          !direction.IsAlmostEqualTo(-XYZ.BasisZ))
        {
          rotatedDirection = 
            direction.Normalize().CrossProduct(XYZ.BasisZ);
        }

        Plane geometryPlane = app.Application.Create.NewPlane
          (direction, rotatedDirection, startpt);
        SketchPlane skplane = app.ActiveUIDocument.Document.
          Create.NewSketchPlane(geometryPlane);
        ModelCurve mcurve = app.ActiveUIDocument.Document.Create.
          NewModelCurve(line, skplane);
        ElementArray lsArr = mcurve.LineStyles;
        foreach (Autodesk.Revit.DB.Element e in lsArr)
        {
          if (e.Name == style)
          {
            mcurve.LineStyle = e;
            break;
          }
        }
      }
      catch (System.Exception e)
      {
      }
    }
Ejemplo n.º 3
0
        /// <summary>
        /// Get an edge from the form by its endpoints
        /// </summary>
        /// <param name="form">The form contains the edge</param>
        /// <param name="startPoint">Start point of the edge</param>
        /// <param name="endPoint">End point of the edge</param>
        /// <returns>The edge found</returns>
        private Edge GetEdgeByEndPoints(Form form, Autodesk.Revit.DB.XYZ startPoint, Autodesk.Revit.DB.XYZ endPoint)
        {
            Edge edge = null;

             // Get all edges of the form
             EdgeArray edges = null;
             Options geoOptions = m_revitApp.Create.NewGeometryOptions();
             geoOptions.ComputeReferences = true;
             Autodesk.Revit.DB.GeometryElement geoElement = form.get_Geometry(geoOptions);
             foreach (GeometryObject geoObject in geoElement.Objects)
             {
            Solid solid = geoObject as Solid;
            if (null == solid)
               continue;
            edges = solid.Edges;
             }

             // Traverse the edges and look for the edge with the right endpoints
             foreach (Edge ed in edges)
             {
            Autodesk.Revit.DB.XYZ rpPos1 = ed.Evaluate(0);
            Autodesk.Revit.DB.XYZ rpPos2 = ed.Evaluate(1);
            if ((startPoint.IsAlmostEqualTo(rpPos1) && endPoint.IsAlmostEqualTo(rpPos2)) ||
                (startPoint.IsAlmostEqualTo(rpPos2) && endPoint.IsAlmostEqualTo(rpPos1)))
            {
               edge = ed;
               break;
            }
             }

             return edge;
        }