BuildingCoder.Command.WriteElementGeometry C# (CSharp) Method

WriteElementGeometry() private method

private WriteElementGeometry ( int elementId ) : void
elementId int
return void
        private void WriteElementGeometry( int elementId )
        {
            FilteredElementCollector viewCollector = new FilteredElementCollector( m_doc );
              viewCollector.OfClass( typeof( ViewPlan ) );
              Func<ViewPlan, bool> isLevel1FloorPlan = v => !v.IsTemplate && v.Name == "Level 1" && v.ViewType == ViewType.FloorPlan;

              m_targetView = viewCollector.Cast<ViewPlan>().First<ViewPlan>( isLevel1FloorPlan );

              Transaction createCurve = new Transaction( m_doc, "Create reference curves" );
              createCurve.Start();
              const double xReferenceLocation = 30;
              Line vLine = Line.CreateBound( new XYZ( xReferenceLocation, 0, 0 ), new XYZ( xReferenceLocation, 20, 0 ) );
              m_vLine = m_doc.Create.NewDetailCurve( m_targetView, vLine );

              const double yReferenceLocation = -10;
              Line hLine = Line.CreateBound( new XYZ( 0, yReferenceLocation, 0 ), new XYZ( 20, yReferenceLocation, 0 ) );
              m_hLine = m_doc.Create.NewDetailCurve( m_targetView, hLine );
              createCurve.Commit();

              Element e = m_doc.GetElement( new ElementId( elementId ) );

              Options options = new Options();
              options.ComputeReferences = true;
              options.IncludeNonVisibleObjects = true;
              options.View = m_targetView;

              GeometryElement geomElem = e.get_Geometry( options );

              foreach( GeometryObject geomObj in geomElem )
              {
            if( geomObj is Solid )
            {
              WriteSolid( (Solid) geomObj );
            }
            else if( geomObj is GeometryInstance )
            {
              TraverseGeometryInstance( (GeometryInstance) geomObj );
            }
            else
            {
              m_writer.WriteLine( "Something else - " + geomObj.GetType().Name );
            }
              }

              foreach( Curve curve in m_referencePlaneReferences )
              {
            // Try to get the geometry object from reference
            Reference curveReference = curve.Reference;
            GeometryObject geomObj = e.GetGeometryObjectFromReference( curveReference );

            if( geomObj != null )
            {
              m_writer.WriteLine( "Curve reference leads to: " + geomObj.GetType().Name );
            }
              }

              // Dimension to reference curves
              foreach( Curve curve in m_referencePlaneReferences )
              {
            DetailCurve targetLine = m_vLine;

            Line line = (Line) curve;
            XYZ lineStartPoint = line.GetEndPoint( 0 );
            XYZ lineEndPoint = line.GetEndPoint( 1 );
            XYZ direction = lineEndPoint - lineStartPoint;
            Line dimensionLine = null;
            if( Math.Abs( direction.Y ) < 0.0001 )
            {
              targetLine = m_hLine;
              XYZ dimensionLineStart = new XYZ( lineStartPoint.X + 5, lineStartPoint.Y, 0 );
              XYZ dimensionLineEnd = new XYZ( dimensionLineStart.X, dimensionLineStart.Y + 10, 0 );

              dimensionLine = Line.CreateBound( dimensionLineStart, dimensionLineEnd );
            }
            else
            {
              targetLine = m_vLine;
              XYZ dimensionLineStart = new XYZ( lineStartPoint.X, lineStartPoint.Y + 5, 0 );
              XYZ dimensionLineEnd = new XYZ( dimensionLineStart.X + 10, dimensionLineStart.Y, 0 );
              dimensionLine = Line.CreateBound( dimensionLineStart, dimensionLineEnd );
            }

            ReferenceArray references = new ReferenceArray();
            references.Append( curve.Reference );
            references.Append( targetLine.GeometryCurve.Reference );

            Transaction t = new Transaction( m_doc, "Create dimension" );
            t.Start();
            m_doc.Create.NewDimension( m_targetView, dimensionLine, references );
            t.Commit();
              }
        }