private ElementTransformParams ExtractTransformParameters()
        {
            ElementTransformParams TransFormParams = new ElementTransformParams();

            if (!string.IsNullOrEmpty(this.HorizontalDistancetext.Text))
            {
                TransFormParams.HorizontalDistance = double.Parse(this.HorizontalDistancetext.Text);
            }
            if (!string.IsNullOrEmpty(this.ElevationTxt.Text))
            {
                TransFormParams.ElevationFromAlignment = double.Parse(this.ElevationTxt.Text);
            }
            if (!string.IsNullOrEmpty(this.DegreesTxt.Text))
            {
                TransFormParams.RotationAngleInPlane = double.Parse(this.DegreesTxt.Text);
            }
            if (!string.IsNullOrEmpty(this.InclinationTxt.Text))
            {
                TransFormParams.InclinationAngleInXZPlane = double.Parse(this.InclinationTxt.Text);
            }
            if (!string.IsNullOrEmpty(this.StationDistanceTxt.Text))
            {
                TransFormParams.DistanceBetweenStations = double.Parse(this.StationDistanceTxt.Text);
            }
            TransFormParams.RotateWithAlignment = RotateWithAlignment.IsChecked;
            TransFormParams.CreateAlignment     = CreateAlignmentInModelCheck.IsChecked;
            TransFormParams.CreateStationsAtEndAndStartCheck = CreateStationsAtEndAndStartCheck.IsChecked;

            TransFormParams.StationToStartFrom = ExtractStationPlacmentStart();
            TransFormParams.StationToEndAt     = ExtractStationPlacmentEnd();

            return(TransFormParams);
        }
        public ParameterValues(List <RevitPlacmenElement> revitPlaceMentPoints, string familypath, ElementTransformParams transForm)
        {
            InitializeComponent();
            RevitPlaceMentPoints = revitPlaceMentPoints;
            FamilyPath           = familypath;
            Transform            = transForm;

            var           FamDoc    = Command.uiapp.Application.OpenDocumentFile(FamilyPath).FamilyManager;
            List <string> TypeNames = new List <string>();

            foreach (FamilyType item in FamDoc.Types)
            {
                if (!String.IsNullOrWhiteSpace(item.Name))
                {
                    TypeNames.Add(item.Name);
                }
            }
            TypeNames.Sort();
            TypesCmb.ItemsSource   = TypeNames;
            TypesCmb.SelectedIndex = 0;

            ParamNames = new List <ParameterElement>();
            foreach (FamilyParameter Famparam in FamDoc.Parameters)
            {
                //var Param = new (string, string)(Famparam.Definition.Name,"");
                ParamNames.Add(new ParameterElement(Famparam.Definition.Name, ""));
            }
            ParamValsDG.ItemsSource = ParamNames;
        }
        private void Run_click(object sender, RoutedEventArgs e)
        {
            TransForm = ExtractTransformParameters();
            var RevitPlaceMentPoints = LandXmlParser.ParseLandXml(LandXmlPath.Text);


            ParameterValues W = new ParameterValues(RevitPlaceMentPoints, FamilyPath.Text, TransForm);

            W.ShowDialog();
            //RevitHelper.PlaceRevitFamilies(RevitPlaceMentPoints, uiDoc, FamilyPath.Text);
        }
        internal static List <(FamilyInstance, RevitPlacmenElement)> PlaceRevitFamilies(List <RevitPlacmenElement> RevitPlacmentPoints, UIDocument uiDoc, string FamilyPath, string TypeName, ElementTransformParams transform)
        {
            List <(FamilyInstance, RevitPlacmenElement)> CreatedInstances = new List <(FamilyInstance, RevitPlacmenElement)>();
            string FamilyName = string.Empty;

            RevitPlacmentPoints = RevitPlacmentPoints.Distinct(new ComparePlacmentPoints()).ToList();
            RevitPlacmentPoints.Sort(delegate(RevitPlacmenElement c1, RevitPlacmenElement c2) { return(c1.Station.CompareTo(c2.Station)); });
            using (Transaction T = new Transaction(uiDoc.Document, "Place Objects"))
            {
                T.Start();
                try
                {
                    uiDoc.Document.LoadFamily(FamilyPath);
                    FamilyName = System.IO.Path.GetFileNameWithoutExtension(FamilyPath);
                }
                catch (Exception) { }
                try
                {
                    FamilySymbol Fam = new FilteredElementCollector(uiDoc.Document).OfClass(typeof(FamilySymbol)).Cast <FamilySymbol>().FirstOrDefault(F => F.Name == TypeName && F.FamilyName == FamilyName);
                    Fam.Activate();

                    if (transform.StationToStartFrom != default(double))
                    {
                        RevitPlacmentPoints.RemoveAll(E => E.Station < transform.StationToStartFrom);
                    }
                    if (transform.StationToEndAt != default(double))
                    {
                        RevitPlacmentPoints.RemoveAll(E => E.Station > transform.StationToEndAt);
                    }

                    for (int i = 0; i < RevitPlacmentPoints.Count; i++)
                    {
                        FamilyInstance FamIns = uiDoc.Document.Create.NewFamilyInstance(RevitPlacmenElement.ConvertPointToInternal(RevitPlacmentPoints[i].PlacementPoint), Fam, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
                        RevitPlacmentPoints[i].FillAttributes(FamIns);

                        CreatedInstances.Add((FamIns, RevitPlacmentPoints[i]));