BuildingCoder.CmdUnrotateNorth.Execute C# (CSharp) Метод

Execute() публичный Метод

public Execute ( ExternalCommandData commandData, string &message, ElementSet elements ) : System.Result
commandData ExternalCommandData
message string
elements ElementSet
Результат System.Result
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication app = commandData.Application;
              UIDocument uidoc = app.ActiveUIDocument;
              Document doc = uidoc.Document;

              #region Determine true north rotation

              Element projectInfoElement
            = new FilteredElementCollector( doc )
              .OfCategory( BuiltInCategory.OST_ProjectBasePoint )
              .FirstElement();

              BuiltInParameter bipAtn
            = BuiltInParameter.BASEPOINT_ANGLETON_PARAM;

              Parameter patn = projectInfoElement.get_Parameter(
            bipAtn );

              double atn = patn.AsDouble();

              Debug.Print(
            "Angle to north from project info: {0}",
            Util.AngleString( atn ) );

              #endregion // Determine true north rotation

              //ElementSet els = uidoc.Selection.Elements; // 2014

              ICollection<ElementId> ids = uidoc.Selection.GetElementIds(); // 2015

              if( 1 != ids.Count )
              {
            message = "Please select a single element.";
              }
              else
              {
            //ElementSetIterator it = els.ForwardIterator();
            //it.MoveNext();
            //Element e = it.Current as Element; // 2014

            Element e = doc.GetElement( ids.First() ); // 2015

            XYZ p;
            if( !Util.GetElementLocation( out p, e ) )
            {
              message
            = "Selected element has no location defined.";

              Debug.Print( message );
            }
            else
            {
              string msg
            = "Selected element location: "
            + Util.PointString( p );

              XYZ pnp;
              double x, y, pna;

              foreach( ProjectLocation location
            in doc.ProjectLocations )
              {
            ProjectPosition projectPosition
              = location.get_ProjectPosition( XYZ.Zero );

            x = projectPosition.EastWest;
            y = projectPosition.NorthSouth;
            pnp = new XYZ( x, y, 0.0 );
            pna = projectPosition.Angle;

            msg +=
              "\nAngle between project north and true north: "
              + Util.AngleString( pna );

            // Transform tr = Transform.get_Rotation( XYZ.Zero, XYZ.BasisZ, pna ); // 2013
            Transform tr = Transform.CreateRotation( XYZ.BasisZ, pna ); // 2014

            //Transform tt = Transform.get_Translation( pnp ); // 2013
            Transform tt = Transform.CreateTranslation( pnp ); // 2014

            Transform t = tt.Multiply( tr );

            msg +=
              "\nUnrotated element location: "
              + Util.PointString( tr.OfPoint( p ) ) + " "
              + Util.PointString( tt.OfPoint( p ) ) + " "
              + Util.PointString( t.OfPoint( p ) );

            Util.InfoMsg( msg );
              }
            }
              }
              return Result.Failed;
        }