Example #1
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            // Get application and document objects
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp?.ActiveUIDocument;
            Document      doc   = uidoc?.Document;
            Document      docAR = null;

            ElementId selectedId = uidoc.Selection.GetElementIds().First();

            var elem = doc.GetElement(selectedId);



            try
            {
                using (Transaction t = new Transaction(doc, "TEST"))
                {
                    t.Start();

                    SchemaMethods sm = new SchemaMethods("2b6a75d7-a580-4786-9d6c-6739437c2170", "TestSchema");
                    sm.setValueToEntity(elem, "Dict_String", 0, "lal kek cheburek");
                    sm.setValueToEntity(elem, "Dict_Double", 0, 15.2);
                    sm.setValueToEntity(elem, "Dict_XYZ", 0, new XYZ(10.0, 0.0, 15.3));

                    XYZ ret = (XYZ)sm.getSchemaDictValue <XYZ>(elem, "Dict_XYZ", 0);
                    Util.InfoMsg2("Результат:", ret.ToString());

                    t.Commit();
                }



                return(Result.Succeeded);
            }
            // This is where we "catch" potential errors and define how to deal with them
            catch (Autodesk.Revit.Exceptions.OperationCanceledException)
            {
                // If user decided to cancel the operation return Result.Canceled
                return(Result.Cancelled);
            }
            catch (Exception ex)
            {
                // If something went wrong return Result.Failed
                message = ex.Message;
                return(Result.Failed);
            }
        }
Example #2
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp      = commandData.Application;
            UIDocument    uidoc      = uiApp.ActiveUIDocument;
            Application   app        = uiApp.Application;
            Document      doc        = uidoc.Document;
            Schema        sch        = null;
            string        SchemaGuid = "ea07dfeb-9c7f-4233-b516-6621abc6744e";
            ObjectType    obt        = ObjectType.Element;
            Reference     refElemLinked;

            while (true)
            {
                try
                {
                    Dictionary <string, string> param = new Dictionary <string, string>
                    {
                        ["Задание ЭМ"] = "893e72a1-b208-4d12-bb26-6bcc4a444d0c",
                        ["Новый"]      = "bf28d2b7-3b97-4f90-8c2a-590a92a654c6",
                        ["Перемещен"]  = "7ad4d050-bedd-42fa-98c4-6cff9e953460",
                        ["Удален"]     = "f2b4ac9f-4ae4-49c3-9c84-e043de20d814"
                    };
                    FilteredElementCollector collector       = new FilteredElementCollector(doc);
                    ISelectionFilter         selectionFilter = new LinkPickFilter(doc);
                    refElemLinked = uidoc.Selection.PickObject(obt, selectionFilter, "Выберите связь");
                    RevitLinkInstance linkInstance = doc.GetElement(refElemLinked.ElementId) as RevitLinkInstance;
                    Document          docLinked    = linkInstance.GetLinkDocument();
                    string            famname1     = "ME_Точка_подключения_(1 фазная сеть)";
                    string            famname2     = "ME_Точка_подключения_(2 коннектора, 3 фазная сеть)";
                    string            famname3     = "ME_Точка_подключения_(3 фазная сеть)";
                    var LinkInstUniq = linkInstance.UniqueId;
                    var LinkName     = docLinked.Title;
                    var LinkPath     = docLinked.PathName;
                    //TaskDialog.Show("Информация ", "Связь:  " + LinkName + "\r\n");

                    FilteredElementCollector collectorlink = new FilteredElementCollector(docLinked);
                    IList <Element>          CatsElems     = new List <Element>();
                    collectorlink.WherePasses(new LogicalOrFilter(new List <ElementFilter>
                    {
                        new ElementCategoryFilter(BuiltInCategory.OST_DuctAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_PipeAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_Furniture),
                        new ElementCategoryFilter(BuiltInCategory.OST_GenericModel),
                        new ElementCategoryFilter(BuiltInCategory.OST_LightingFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_SecurityDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_FireAlarmDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_CommunicationDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_MechanicalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_Casework)
                    }));
                    CatsElems = collectorlink.WhereElementIsNotElementType().ToElements();                                                                                       //элементы по категориям
                    var elems = CatsElems.Where(f => f.get_Parameter(new Guid(param["Задание ЭМ"])) != null && f.get_Parameter(new Guid(param["Задание ЭМ"])).AsInteger() == 1); //фильтр по параметру "Задание ЭМ"

                    FilteredElementCollector collfams = collector.OfClass(typeof(Family));
                    Family fam1 = collfams.FirstOrDefault(e => e.Name.Equals(famname1)) as Family;
                    Family fam2 = collfams.FirstOrDefault(e => e.Name.Equals(famname2)) as Family;
                    Family fam3 = collfams.FirstOrDefault(e => e.Name.Equals(famname3)) as Family;
                    FilteredElementCollector MEcollector = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_MechanicalEquipment).WhereElementIsNotElementType();
                    sm  = new SchemaMethods(SchemaGuid, "Ag_Schema");
                    sch = sm.Schema;
                    var targetElems = MEcollector.Where(i => (i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname1 ||
                                                              i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname2 || i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname3) && (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Element_UniqueId) == i.UniqueId && (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Link_Name) == LinkName);

                    var NSE       = 0;
                    var PSE       = 0;
                    var countId   = 0;
                    int countLink = elems.Count();
                    using (Transaction tr = new Transaction(doc, "Проверка элементов из связи"))
                    {
                        tr.Start();
                        foreach (Element targEL in targetElems)
                        {
                            var cntEl = 0;
                            foreach (Element origElement in elems)
                            {
                                LocationPoint pPoint    = origElement.Location as LocationPoint;
                                XYZ           pointLink = pPoint.Point;
                                var           ElemUniq  = origElement.UniqueId;
                                string        LinkUniq  = (string)sm.getSchemaDictValue <string>(targEL, "Dict_String", (int)Keys.Linked_Element_UniqueId);
                                if (LinkUniq == null || LinkUniq == string.Empty)
                                {
                                    continue;
                                }
                                if (LinkUniq == ElemUniq)
                                {
                                    cntEl++;
                                    countId++;
                                    LocationPoint locEl   = targEL.Location as LocationPoint;
                                    XYZ           pointEl = locEl.Point;
                                    if (pointEl.ToString() == pointLink.ToString())
                                    {
                                        PSE++;
                                    }
                                    if (pointEl.ToString() != pointLink.ToString())
                                    {
                                        NSE++;
                                        targEL.get_Parameter(new Guid(param["Перемещен"])).Set(1);
                                        targEL.get_Parameter(new Guid(param["Новый"])).Set(0);
                                        //targEL.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).Set("Элемент перемещен!!!");
                                    }
                                }
                            }
                            if (cntEl == 0)
                            {
                                NSE++;
                                targEL.get_Parameter(new Guid(param["Удален"])).Set(1);
                                targEL.get_Parameter(new Guid(param["Перемещен"])).Set(0);
                                targEL.get_Parameter(new Guid(param["Новый"])).Set(0);
                                //targEL.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).Set("Элемент удален!!!");
                            }
                        }
                        string U1, U2, U3; U1 = string.Empty; U2 = string.Empty; U3 = string.Empty;
                        if (countLink > countId)
                        {
                            var q = countLink - countId;
                            U1 = "Не размещено " + q + " элементов" + " \n";
                        }
                        if (NSE > 0)
                        {
                            U2 = "Неправильно размещенных элементов: " + NSE + " \n";
                        }
                        if (NSE == 0)
                        {
                            U3 = "Нет неправильно размещенных элементов \n";
                        }
                        var U4 = "На своих местах: " + PSE + " из " + countLink;
                        InfoMsg("Связь: " + LinkName + "\n" + "Количество элементов в связи: " + elems.Count().ToString() + " \n \n" + U1 + U2 + U3 + U4);
                        tr.Commit();
                    }
                }
                catch (Autodesk.Revit.Exceptions.OperationCanceledException)
                {
                    break;
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                    return(Result.Failed);
                }
                break;
            }

            return(Result.Succeeded);
        }
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp = commandData.Application;
            UIDocument    uidoc = uiApp.ActiveUIDocument;
            //Application app = uiApp.Application;
            Document   doc        = uidoc.Document;
            Schema     sch        = null;
            string     SchemaGuid = "ea07dfeb-9c7f-4233-b516-6621abc6744e";
            ObjectType obt        = ObjectType.Element;
            Reference  refElemLinked;

            while (true)
            {
                try
                {
                    Dictionary <string, string> param = new Dictionary <string, string>
                    {
                        ["Задание СС"]          = "d30b8343-4a2d-4457-9137-e34e511d7233",
                        ["Новый"]               = "bf28d2b7-3b97-4f90-8c2a-590a92a654c6",
                        ["Перемещен"]           = "7ad4d050-bedd-42fa-98c4-6cff9e953460",
                        ["Удален"]              = "f2b4ac9f-4ae4-49c3-9c84-e043de20d814",
                        ["Этаж"]                = "4857fa3b-e80e-4167-9b66-f40cd5992680",
                        ["Имя Системы"]         = "303f67e6-3fd6-469b-9356-dccb116a3277",
                        ["OUT"]                 = "478914c0-6c06-4dd6-8c41-fa1122140e87",
                        ["IN"]                  = "cf610632-14a9-4c8d-84ae-79053ba99593",
                        ["Тип подключения"]     = "d512be5c-4315-4b86-aad1-74e7648760ef",
                        ["Нормально отк/закр."] = "ce22f60b-9ae0-4c79-a624-873f39099510",
                        ["Наименование"]        = "b4cfdcbd-5668-4572-bcd6-3d504043bd65"
                    };
                    FilteredElementCollector collector = new FilteredElementCollector(doc);
                    IList <Element>          links     = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_RvtLinks)
                                                         .WhereElementIsNotElementType().ToElements();
                    var linkName = PlaceEquip.SelectLink(links);
                    var link     = links.Where(i => i.get_Parameter(BuiltInParameter.ELEM_TYPE_PARAM).AsValueString() == linkName);
                    RevitLinkInstance linkInstance = link.First() as RevitLinkInstance;
                    Document          docLinked    = linkInstance.GetLinkDocument();
                    string            famname1     = "Задание для СС";
                    var LinkInstUniq = linkInstance.UniqueId;
                    var LinkName     = docLinked.Title;
                    var LinkPath     = docLinked.PathName;
                    //TaskDialog.Show("Информация ", "Связь:  " + LinkName + "\r\n");

                    FilteredElementCollector collectorlink = new FilteredElementCollector(docLinked);
                    IList <Element>          CatsElems     = new List <Element>();
                    collectorlink.WherePasses(new LogicalOrFilter(new List <ElementFilter>
                    {
                        new ElementCategoryFilter(BuiltInCategory.OST_DuctAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_PipeAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_Furniture),
                        new ElementCategoryFilter(BuiltInCategory.OST_GenericModel),
                        new ElementCategoryFilter(BuiltInCategory.OST_LightingFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_SecurityDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_FireAlarmDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_CommunicationDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_MechanicalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_Casework)
                    }));
                    CatsElems = collectorlink.WhereElementIsNotElementType().ToElements(); //элементы по категориям
                    var elems = CatsElems.Where(f =>
                                                f.get_Parameter(new Guid(param["Задание СС"])) != null &&
                                                f.get_Parameter(new Guid(param["Задание СС"])).AsInteger() == 1); //фильтр по параметру "Задание ЭМ"

                    FilteredElementCollector collfams = collector.OfClass(typeof(Family));
                    Family fam1 = collfams.FirstOrDefault <Element>(e => e.Name.Equals(famname1)) as Family;
                    FilteredElementCollector MEcollector = new FilteredElementCollector(doc)
                                                           .OfCategory(BuiltInCategory.OST_MechanicalEquipment).WhereElementIsNotElementType();
                    sm  = new SchemaMethods(SchemaGuid, "Ag_Schema");
                    sch = sm.Schema;
                    var targetElems = MEcollector.Where(i =>
                                                        i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname1 &&
                                                        (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Element_UniqueId) == i.UniqueId &&
                                                        (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Link_Name) == LinkName);

                    var    NSE       = 0;
                    var    PSE       = 0;
                    var    countId   = 0;
                    var    Del       = 0;
                    string tdelems   = "Этажи на которых есть неправильные элементы:" + "\n";
                    int    countLink = elems.Count();
                    foreach (Element targEL in targetElems)
                    {
                        var cntEl = 0; //удаленный элемент
                        foreach (Element origElement in elems)
                        {
                            LocationPoint pPoint    = origElement.Location as LocationPoint;
                            XYZ           pointLink = pPoint.Point;
                            var           ElemUniq  = origElement.UniqueId;
                            string        LinkUniq  = (string)sm.getSchemaDictValue <string>(targEL, "Dict_String", (int)Keys.Linked_Element_UniqueId);
                            if (LinkUniq == null || LinkUniq == string.Empty)
                            {
                                continue;
                            }
                            if (LinkUniq == ElemUniq)
                            {
                                countId++;
                                cntEl++;
                                LocationPoint locEl   = targEL.Location as LocationPoint;
                                XYZ           pointEl = locEl.Point;
                                if (pointEl.ToString() == pointLink.ToString())
                                {
                                    PSE++;
                                }

                                if (pointEl.ToString() != pointLink.ToString())
                                {
                                    NSE++;
                                    var lvl = targEL.get_Parameter(new Guid(param["Этаж"])).AsString();
                                    if (!tdelems.Contains(lvl))
                                    {
                                        tdelems = tdelems + "[" + targEL.get_Parameter(new Guid(param["Этаж"])).AsString() + "]" + "\n";
                                    }
                                }
                                ////
                            }
                        }

                        if (cntEl == 0)
                        {
                            Del++;
                            var lvl = targEL.get_Parameter(new Guid(param["Этаж"])).AsString();
                            if (!tdelems.Contains(lvl))
                            {
                                tdelems = tdelems + "[" + targEL.get_Parameter(new Guid(param["Этаж"])).AsString() + "]" + "\n";
                            }
                        }
                    }
                    string U1, U2, U3, U5;
                    U1 = string.Empty;
                    U2 = string.Empty;
                    U3 = string.Empty;
                    U5 = string.Empty;
                    TaskDialog td  = new TaskDialog("Информация");
                    bool       Not = true;
                    if (countLink > countId)
                    {
                        var q  = countLink - countId;
                        var st = string.Empty;
                        switch (q)
                        {
                        case 1:
                            st = " элемент";
                            break;

                        case 2:
                        case 3:
                        case 4:
                            st = " элементa";
                            break;

                        default:
                            st = " элементов";
                            break;
                        }
                        U1  = "Не размещено:  " + q + st + " \n";
                        Not = false;
                    }
                    if (NSE > 0)
                    {
                        U2 = "Неправильно размещенных элементов: " + NSE + " \n";
                    }

                    if (NSE == 0)
                    {
                        U3 = "Нет неправильно размещенных элементов \n";
                    }
                    if (Del != 0)
                    {
                        U5 = "Удаленных элементов: " + Del + " \n";
                    }
                    var U4 = "На своих местах: " + PSE + " из " + countLink;
                    if (Del == 0 && NSE == 0)
                    {
                        tdelems = String.Empty;
                    }
                    td.Title             = "Информация";
                    td.TitleAutoPrefix   = false;
                    td.AllowCancellation = true;
                    td.MainInstruction   = "Связь: " + LinkName;
                    td.MainContent       = U1 + U2 + U3 + U5 + U4;
                    td.FooterText        = "Количество элементов в связи: ";

                    //td.ExtraCheckBoxText = "Переместить неправильные на свои места";
                    td.ExpandedContent = tdelems;
                    if (NSE != 0 || Del != 0)
                    {
                        td.MainIcon = TaskDialogIcon.TaskDialogIconWarning;
                        td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Отметить неправильно размещенные");
                        td.VerificationText = "Переместить неправильные на свои места";
                        if (Not == false)
                        {
                            td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Отметить неправильные и добавить новые");
                        }
                    }
                    else
                    {
                        if (Not == false)
                        {
                            td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Добавить новые элементы");
                        }
                        td.MainIcon = TaskDialogIcon.TaskDialogIconInformation;
                    }

                    td.CommonButtons = TaskDialogCommonButtons.Close;
                    TaskDialogResult tdRes = td.Show();
                    Stream           myStream;
                    SaveFileDialog   saveFileDialog1 = new SaveFileDialog();

                    saveFileDialog1.Filter           = "Excel files (*.xlsx )|*.xlsx |All files (*.*)|*.*";
                    saveFileDialog1.FilterIndex      = 2;
                    saveFileDialog1.RestoreDirectory = true;

                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {
                        if ((myStream = saveFileDialog1.OpenFile()) != null)
                        {
                            // Code to write the stream goes here.
                            myStream.Close();
                        }
                    }
                    using (ExcelPackage excel = new ExcelPackage())
                    {
                        ExcelWorksheet  ws = excel.Workbook.Worksheets.Add("Параметры");
                        List <string[]> NamesParameters = new List <string[]>()
                        {
                            new string[]
                            {
                                "Наименование",
                                "Нормально отк/закр.",
                                "Комментарии",
                                "Имя системы",
                                "Имя панели",
                                "Количество сигналов(IN)",
                                "Количество сигналов(OUT)",
                                "Тип подключения",
                                "Марка",
                                "Маркировка типоразмера",
                                "Комментарии к типоразмеру"
                            }
                        };
                        int
                        string oldValues = "A2:" + Char.ConvertFromUtf32(NamesParameters[0].Length + 64) + "2";
                        string newValues = "L2:" + Char.ConvertFromUtf32(NamesParameters[0].Length * 2 + 64) + "2";
                        ws.Cells[oldValues].LoadFromArrays(NamesParameters);
                        ws.Cells[oldValues].Style.Border.BorderAround(ExcelBorderStyle.Thin);
                        //ws.Cells[oldValues].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        //ws.Cells[oldValues].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 200, 206));
                        //ws.Cells[oldValues].Style.Font.Color.SetColor(System.Drawing.Color.FromArgb(156, 0, 6));
                        ws.Cells[newValues].LoadFromArrays(NamesParameters);
                        ws.Cells[newValues].Style.Border.BorderAround(ExcelBorderStyle.Thin);
                        SetStyleCells(ws, oldValues, Color.FromArgb(255, 243, 243), Color.FromArgb(0, 0, 0));
                        SetStyleCells(ws, newValues, Color.FromArgb(243, 255, 243), Color.FromArgb(0, 0, 0));
                        ws.Cells[oldValues].Style.Font.Bold = true;
                        ws.Cells[newValues].Style.Font.Bold = true;
                        //ws.Cells[newValues].Style.Fill.PatternType = ExcelFillStyle.Solid;
                        //ws.Cells[newValues].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(198, 239, 206));
                        //ws.Cells[newValues].Style.Font.Color.SetColor(System.Drawing.Color.FromArgb(0, 97, 0));
                        ws.Cells.AutoFitColumns(0);
                        FileInfo excelFile = new FileInfo(saveFileDialog1.FileName);
                        excel.SaveAs(excelFile);
                        bool isExcelInstalled = Type.GetTypeFromProgID("Excel.Application") != null ? true : false;
                        if (isExcelInstalled)
                        {
                            System.Diagnostics.Process.Start(excelFile.ToString());
                        }
                    }
                    if (tdRes == TaskDialogResult.CommandLink1 || tdRes == TaskDialogResult.CommandLink2 || tdRes == TaskDialogResult.CommandLink3)
                    {
                        using (Transaction tr = new Transaction(doc, "Проверка элементов из связи"))
                        {
                            tr.Start();

                            foreach (Element targEL in targetElems)    // перебираем элементы проекта
                            {
                                var cntEl = 0;                         //удаленный элемент
                                foreach (Element origElement in elems) //перебираем элементы связи
                                {
                                    LocationPoint pPoint    = origElement.Location as LocationPoint;
                                    XYZ           pointLink = pPoint.Point;
                                    var           ElemUniq  = origElement.UniqueId;
                                    string        LinkUniq  =
                                        (string)sm.getSchemaDictValue <string>(targEL, "Dict_String", (int)Keys.Linked_Element_UniqueId);
                                    if (LinkUniq == null || LinkUniq == string.Empty)
                                    {
                                        continue;
                                    }
                                    if (LinkUniq == ElemUniq) //уник номер проекта и связи равны
                                    {
                                        cntEl++;
                                        LocationPoint locEl   = targEL.Location as LocationPoint;
                                        XYZ           pointEl = locEl.Point;
                                        if (pointEl.ToString() != pointLink.ToString()) //координаты не равны
                                        {
                                            targEL.get_Parameter(new Guid(param["Перемещен"])).Set(1);
                                            targEL.get_Parameter(new Guid(param["Новый"])).Set(0);
                                            if (td.WasVerificationChecked())
                                            {
                                                XYZ newPoint = pointLink - pointEl;
                                                ElementTransformUtils.MoveElement(doc, targEL.Id, newPoint);
                                            }
                                        }
                                    }
                                }

                                if (cntEl == 0)
                                {
                                    targEL.get_Parameter(new Guid(param["Удален"])).Set(1);
                                    targEL.get_Parameter(new Guid(param["Перемещен"])).Set(0);
                                    targEL.get_Parameter(new Guid(param["Новый"])).Set(0);
                                }
                            }
                            tr.Commit();
                        }
                        if (tdRes == TaskDialogResult.CommandLink2)
                        {
                            PlaceEquip ss = new PlaceEquip(doc, linkName);
                        }
                    }
                }
                catch (Autodesk.Revit.Exceptions.OperationCanceledException)
                {
                    break;
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                    return(Result.Failed);
                }

                break;
            }

            return(Result.Succeeded);
        }
Example #4
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIApplication uiApp      = commandData.Application;
            UIDocument    uidoc      = uiApp.ActiveUIDocument;
            Document      doc        = uidoc.Document;
            Schema        sch        = null;
            string        SchemaGuid = "ce827518-2247-4eda-b76d-c7dfb4681f3c";
            ObjectType    obt        = ObjectType.Element;
            Reference     refElemLinked;

            while (true)
            {
                try
                {
                    IList <string> Guids = new List <string>    // общие параметры
                    {
                        "303f67e6-3fd6-469b-9356-dccb116a3277", // "Имя системы"
                        "7e243149-8b16-4c8b-8161-cd7780048c99", // "Ток"
                        "be29221e-5b74-4a61-a253-4eb5f3b532d9", // "Напряжение"
                        "b4d13aad-0763-4481-b015-63137342d077", // "Номинальная мощность"
                        "0e7bcec3-7a44-43a9-b8ef-0dee369c4efc", // ["Кат. электроснабжения"]
                        "d512be5c-4315-4b86-aad1-74e7648760ef"  // ["тип подключения"]
                        //"478914c0-6c06-4dd6-8c41-fa1122140e87", // [OUT]сигналы
                        //"cf610632-14a9-4c8d-84ae-79053ba99593"  // [IN]сигналы
                    };
                    IList <string> NamesParam = new List <string> // параметры семейства
                    {
                        "Ввод1_Номинальная_мощность",
                        "Ввод1_Коэффициент_мощности",
                        "Ввод1_Напряжение",
                        "Ввод2_Номинальная_мощность",
                        "Ввод2_Коэффициент_мощности",
                        "Ввод2_Напряжение"
                    };
                    FilteredElementCollector collector = new FilteredElementCollector(doc);
                    string famname1 = "ME_Точка_подключения_(1 фазная сеть)";
                    string famname2 = "ME_Точка_подключения_(2 коннектора, 3 фазная сеть)";
                    string famname3 = "ME_Точка_подключения_(3 фазная сеть)";
                    FilteredElementCollector collfams = collector.OfClass(typeof(Family));
                    Family fam1 = collfams.FirstOrDefault <Element>(e => e.Name.Equals(famname1)) as Family;
                    Family fam2 = collfams.FirstOrDefault <Element>(e => e.Name.Equals(famname2)) as Family;
                    Family fam3 = collfams.FirstOrDefault <Element>(e => e.Name.Equals(famname3)) as Family;
                    if (fam1 == null || fam2 == null || fam3 == null)
                    {
                        string n1, n2, n3; n1 = ""; n2 = ""; n3 = "";
                        if (fam1 == null)
                        {
                            n1 = famname1 + "\n ";
                        }
                        if (fam2 == null)
                        {
                            n2 = famname2 + "\n ";
                        }
                        if (fam3 == null)
                        {
                            n3 = famname3 + "\n ";
                        }
                        var DiagRes = FamErrorMsg("Не загружены семейства:\n " + n1 + n3 + n2 + "\n Загрузить ?");
                        if (DiagRes == true)
                        {
                            using (Transaction t = new Transaction(doc, "Загрузить семейство"))
                            {
                                t.Start();
                                string path1 = @"\\arena\ARMO-GROUP\ИПУ\ЛИЧНЫЕ\САПРомания\RVT\02-БИБЛИОТЕКА\10-Семейства\90-Электрооборудование и освещение (ЭО)\Оборудование\ME_Точка_подключения_(1 фазная сеть).rfa";
                                string path2 = @"\\arena\ARMO-GROUP\ИПУ\ЛИЧНЫЕ\САПРомания\RVT\02-БИБЛИОТЕКА\10-Семейства\90-Электрооборудование и освещение (ЭО)\Оборудование\ME_Точка_подключения_(2 коннектора, 3 фазная сеть).rfa";
                                string path3 = @"\\arena\ARMO-GROUP\ИПУ\ЛИЧНЫЕ\САПРомания\RVT\02-БИБЛИОТЕКА\10-Семейства\90-Электрооборудование и освещение (ЭО)\Оборудование\ME_Точка_подключения_(3 фазная сеть).rfa";
                                if (fam1 == null)
                                {
                                    doc.LoadFamily(path1, out fam1);
                                }
                                if (fam2 == null)
                                {
                                    doc.LoadFamily(path2, out fam2);
                                }
                                if (fam3 == null)
                                {
                                    doc.LoadFamily(path3, out fam3);
                                }
                                t.Commit();
                            }
                        }
                        if (DiagRes == false)
                        {
                            return(Result.Cancelled);
                        }
                        //TaskDialog.Show("Предупреждение", "Не загружены семейства:\n " + n1 + n3 + n2);
                        //return Result.Cancelled;
                    }
                    ISelectionFilter selectionFilter = new LinkPickFilter(doc);
                    refElemLinked = uidoc.Selection.PickObject(obt, selectionFilter, "Выберите связь");
                    RevitLinkInstance linkInstance = doc.GetElement(refElemLinked.ElementId) as RevitLinkInstance;
                    Document          docLinked    = linkInstance.GetLinkDocument();
                    var checkLinkInst = false;
                    var LinkUniq      = linkInstance.UniqueId; //UniqId экземпляра связи
                    var LinkName      = docLinked.Title;       //Имя связи
                    var LinkPath      = docLinked.PathName;    //Путь к связи
                    FilteredElementCollector collectorlink = new FilteredElementCollector(docLinked);
                    IList <Element>          CatsElems     = new List <Element>();
                    collectorlink.WherePasses(new LogicalOrFilter(new List <ElementFilter>
                    {
                        new ElementCategoryFilter(BuiltInCategory.OST_DuctAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_PipeAccessory),
                        new ElementCategoryFilter(BuiltInCategory.OST_Furniture),
                        new ElementCategoryFilter(BuiltInCategory.OST_GenericModel),
                        new ElementCategoryFilter(BuiltInCategory.OST_LightingFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalFixtures),
                        new ElementCategoryFilter(BuiltInCategory.OST_SecurityDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_FireAlarmDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_CommunicationDevices),
                        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_MechanicalEquipment),
                        new ElementCategoryFilter(BuiltInCategory.OST_Casework)
                    }));
                    CatsElems = collectorlink.WhereElementIsNotElementType().ToElements();                              //элементы по категориям
                    var elems = CatsElems.Where(f => f.get_Parameter(new Guid(param["Задание ЭМ"])) != null && f.get_Parameter(new Guid(param["Задание ЭМ"])).AsInteger() == 1);
                    InfoMsg("Связь: " + LinkName + "\n" + "Количество элементов в связи: " + elems.Count().ToString()); // MessageBox
                    ISet <ElementId> elementSet1 = fam1.GetFamilySymbolIds();
                    ISet <ElementId> elementSet2 = fam2.GetFamilySymbolIds();
                    ISet <ElementId> elementSet3 = fam3.GetFamilySymbolIds();
                    FamilySymbol     type1       = doc.GetElement(elementSet1.First()) as FamilySymbol;
                    FamilySymbol     type2       = doc.GetElement(elementSet2.First()) as FamilySymbol;
                    FamilySymbol     type3       = doc.GetElement(elementSet3.First()) as FamilySymbol;
                    sm  = new SchemaMethods(SchemaGuid, "Ag_Schema"); //создание схемы ExStorage
                    sch = sm.Schema;
                    FilteredElementCollector MEcollector = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_MechanicalEquipment).WhereElementIsNotElementType();
                    var targetElems = MEcollector.Where(i => (i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname1

                                                              || i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname3) && (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Element_UniqueId) == i.UniqueId &&
                                                        (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Link_Name) == LinkName);  // коллектор по UniqId элемента и имени связи для 1 ТП
                    var targetElems2 = MEcollector.Where(i => i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname2 && (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Element_UniqueId) == i.UniqueId &&
                                                         (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Link_Name) == LinkName); // коллектор по UniqId элемента и имени связи для семейства с двумя ТП
                    if (targetElems.Count() != 0 || targetElems2.Count() != 0)
                    {
                        checkLinkInst = true;
                    }                                                                           //проверка новый ли это элемент, если новый то пишем в параметр
                    using (Transaction t = new Transaction(doc, "Размещение элементов"))
                    {
                        t.Start();
                        type1.Activate();
                        type2.Activate();
                        type3.Activate();
                        var countTarget = 0;                   //количество размещаемых элементов
                        foreach (Element origElement in elems) //перебираем элементы из связи
                        {
                            LocationPoint pPoint       = origElement.Location as LocationPoint;
                            XYZ           coords       = pPoint.Point;                                                                                                                         //координаты экземпляра в связи
                            var           FamSymbol    = (origElement as FamilyInstance).Symbol;                                                                                               // FamilySymbol элементов связи
                            var           linkElemUniq = origElement.UniqueId;
                            var           famname      = origElement.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString();                                                        //имя семейства в связи
                            var           typename     = famname + "_/" + origElement.Name; typename = typename.Replace("[", "("); typename = typename.Replace("]", ")");                      // имя семейства + имя типоразмера (заменяем скобки [])
                            var           target       = targetElems.Where(i => (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Linked_Element_UniqueId) == linkElemUniq);  //коллектор по совпадающим UniqId (1 ТП)
                            var           target2      = targetElems2.Where(i => (string)sm.getSchemaDictValue <string>(i, "Dict_String", (int)Keys.Linked_Element_UniqueId) == linkElemUniq); //коллектор по совпадающим UniqId (2 ТП)
                            if (target.Count() != 0 || target2.Count() != 0)
                            {
                                continue;
                            }                                                                                                                           // проверка по UniqID в связи и в проекте
                            if (typename.Contains("(380-2)"))                                                                                           // для семейства с двумя ТП
                            {
                                FamilySymbol Newtype     = Util.GetFamilySymbolByName(doc, typename) as FamilySymbol ?? CreateNewType(type2, typename); //проверка есть ли типоразмер в проекте если нет создаем
                                var          targElement = doc.Create.NewFamilyInstance(coords, Newtype, StructuralType.NonStructural);
                                if (checkLinkInst != false)
                                {
                                    targElement.get_Parameter(new Guid(param["Новый"])).Set(1);
                                }                                                                                                           //проверка новый ли элемент, если новый то пишем в параметр
                                ElemUniq = targElement.UniqueId;
                                SetValueToFields(targElement, ElemUniq, linkElemUniq, LinkUniq, LinkName, LinkPath, typename, coords, sch); //запись параметров в ExStorage
                                foreach (string nameparam in NamesParam)                                                                    //записываем значения параметров семейства с двумя ТП
                                {
                                    if (FamSymbol.LookupParameter(nameparam) != null)                                                       //параметры типа
                                    {
                                        var origParam = FamSymbol.LookupParameter(nameparam).AsDouble();
                                        targElement.LookupParameter(nameparam).Set(origParam);
                                    }
                                    if (origElement.LookupParameter(nameparam) != null) //параметры экземпляра
                                    {
                                        var origParam = origElement.LookupParameter(nameparam).AsDouble();
                                        targElement.LookupParameter(nameparam).Set(origParam);
                                    }
                                }
                                NameSystemParameter(origElement, targElement, Guids[0]); // параметр "имя системы"
                                SetParameters(origElement, targElement, LinkName);
                                continue;
                            }
                            FamilyInstance targetElement = null;
                            if (FamSymbol.get_Parameter(new Guid(param["Количетсво полюсов"])) != null || origElement.get_Parameter(new Guid(param["Количетсво полюсов"])) != null)                         //проверяем количество полюсов
                            {
                                if (origElement.get_Parameter(new Guid(param["Количетсво полюсов"]))?.AsInteger() == 1 || FamSymbol.get_Parameter(new Guid(param["Количетсво полюсов"]))?.AsInteger() == 1) //1 фазная
                                {
                                    FamilySymbol Newtype = Util.GetFamilySymbolByName(doc, typename) as FamilySymbol ?? CreateNewType(type1, typename);                                                     //проверка есть ли типоразмер в проекте если нет создаем
                                    targetElement = doc.Create.NewFamilyInstance(coords, Newtype, StructuralType.NonStructural);
                                    countTarget++;
                                }
                                if (origElement.get_Parameter(new Guid(param["Количетсво полюсов"]))?.AsInteger() == 3 || FamSymbol.get_Parameter(new Guid(param["Количетсво полюсов"]))?.AsInteger() == 3) //3 фазная
                                {
                                    FamilySymbol Newtype = Util.GetFamilySymbolByName(doc, typename) as FamilySymbol ?? CreateNewType(type3, typename);                                                     //проверка есть ли типоразмер в проекте если нет создаем
                                    targetElement = doc.Create.NewFamilyInstance(coords, Newtype, StructuralType.NonStructural);
                                    countTarget++;
                                }
                            }
                            else
                            {
                                continue;
                            }
                            if (checkLinkInst != false)
                            {
                                targetElement.get_Parameter(new Guid(param["Новый"])).Set(1);
                            }
                            ElemUniq = targetElement.UniqueId;
                            Ozk(origElement, targetElement);
                            foreach (string guid in Guids) //записываем значения параметров семейства с 1 ТП
                            {
                                if (guid == Guids[0])      //по параметру "имя системы"
                                {
                                    NameSystemParameter(origElement, targetElement, guid);
                                    continue;
                                }
                                SetParameterToInstance(guid, origElement, targetElement);
                                SetParameterToType(guid, origElement, targetElement);
                            }
                            SetValueToFields(targetElement, ElemUniq, linkElemUniq, LinkUniq, LinkName, LinkPath, typename, coords, sch);//запись параметров в ExStorage
                            SetParameters(origElement, targetElement, LinkName);
                            SetParameterToInstance(param["Коэф. мощности"], origElement, targetElement);
                            GSymbol(typename, "Вентилятор", "УГО_Двигатель", targetElement);
                            GSymbol(typename, "МДУ", "УГО_МДУ", targetElement);
                            GSymbol(typename, "Щит_автоматики", "УГО_ЩА", targetElement);
                        }
                        t.Commit();
                        if (countTarget == 0)
                        {
                            WinForms.MessageBox.Show("Нет элементов для размещения!", "Предупреждение", WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Warning);
                            break;
                        }
                        InfoMsg("Элементов размещено в проекте: " + countTarget);
                        break;
                    }
                }
                catch (Autodesk.Revit.Exceptions.OperationCanceledException)
                {
                    break;
                }
                catch (Exception ex)
                {
                    message = ex.Message;
                    return(Result.Failed);
                }
            }
            return(Result.Succeeded);
        }
Example #5
0
    public Result Run()
    {
      Schema sch = null;
      string SchemaGuid = "ce827518-2247-4eda-b76d-c7dfb4681f3c";

      FilteredElementCollector collector = new FilteredElementCollector(doc);
      string famname1 = "Задание для СС";
      FilteredElementCollector collfams = collector.OfClass(typeof(Family));

      Family fam1 = collfams.FirstOrDefault<Element>(e => e.Name.Equals(famname1)) as Family;
      if (fam1 == null)
      {
        string path1 =
          @"\\arena\ARMO-GROUP\ИПУ\ЛИЧНЫЕ\САПРомания\RVT\02-БИБЛИОТЕКА\10-Семейства\70-Слаботочные системы (СС)\Оборудование\Задание для СС.rfa";
        var tdRes = TDFamLoad(path1, famname1);
        if (tdRes == TaskDialogResult.Yes)
        {
          using (Transaction t = new Transaction(doc, "Загрузить семейство"))
          {
            t.Start();

            if (fam1 == null)
            {
              doc.LoadFamily(path1, out fam1);
            }

            t.Commit();
          }
        }

        if (tdRes == TaskDialogResult.No)
        {
          return Result.Failed;
        }

        if (tdRes == TaskDialogResult.Close)
        {
          return Result.Failed;
        }
      }

      IList<Element> links = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_RvtLinks)
        .WhereElementIsNotElementType().ToElements();
      if (linkN == null)
      {
        linkName = SelectLink(links);
      }
      else
      {
        linkName = linkN;
      }
      var link = links.Where(i => i.get_Parameter(BuiltInParameter.ELEM_TYPE_PARAM).AsValueString() == linkName);
      RevitLinkInstance linkInstance = link.First() as RevitLinkInstance;
      Document docLinked = linkInstance.GetLinkDocument();
      var checkLinkInst = false;
      var LinkUniq = linkInstance.UniqueId; //UniqId экземпляра связи
      var LinkName = docLinked.Title; //Имя связи
      var LinkPath = docLinked.PathName; //Путь к связи
      FilteredElementCollector collectorlink = new FilteredElementCollector(docLinked);
      IList<Element> CatsElems = new List<Element>();
      collectorlink.WherePasses(new LogicalOrFilter(new List<ElementFilter>
      {
        new ElementCategoryFilter(BuiltInCategory.OST_DuctAccessory),
        new ElementCategoryFilter(BuiltInCategory.OST_PipeAccessory),
        new ElementCategoryFilter(BuiltInCategory.OST_Furniture),
        new ElementCategoryFilter(BuiltInCategory.OST_GenericModel),
        new ElementCategoryFilter(BuiltInCategory.OST_LightingFixtures),
        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalFixtures),
        new ElementCategoryFilter(BuiltInCategory.OST_SecurityDevices),
        new ElementCategoryFilter(BuiltInCategory.OST_FireAlarmDevices),
        new ElementCategoryFilter(BuiltInCategory.OST_CommunicationDevices),
        new ElementCategoryFilter(BuiltInCategory.OST_ElectricalEquipment),
        new ElementCategoryFilter(BuiltInCategory.OST_MechanicalEquipment),
        new ElementCategoryFilter(BuiltInCategory.OST_Casework)
      }));
      CatsElems = collectorlink.WhereElementIsNotElementType().ToElements(); //элементы по категориям

      IEnumerable<Element> elems = CatsElems.Where(f => f.get_Parameter(new Guid(param["Задание СС"])) != null && f.get_Parameter(new Guid(param["Задание СС"])).AsInteger() == 1);

      ISet<ElementId> elementSet1 = fam1.GetFamilySymbolIds();
      FamilySymbol type1 = doc.GetElement(elementSet1.First()) as FamilySymbol;
      sm = new SchemaMethods(SchemaGuid, "Ag_Schema"); //создание схемы ExStorage
      sch = sm.Schema;
      FilteredElementCollector MEcollector = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_MechanicalEquipment).WhereElementIsNotElementType();
      var targetElems = MEcollector.Where(i =>
        i.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == famname1 &&
        (string)sm.getSchemaDictValue<string>(i, "Dict_String", (int)Keys.Element_UniqueId) == i.UniqueId &&
        (string)sm.getSchemaDictValue<string>(i, "Dict_String", (int)Keys.Link_Name) == LinkName); // коллектор по UniqId элемента и имени связи 
      if (targetElems.Count() != 0)
      {
        checkLinkInst = true;
      } //проверка новый ли это элемент, если новый то пишем в параметр

      var Res = TDInfo(elems, LinkName);
      if (Res == TaskDialogResult.Cancel)
      {
        return Result.Failed;
      }
      if (WSCheck == true)
      {
        checkLinkInst = false;
      }
      using (Transaction t = new Transaction(doc, "Размещение элементов"))
      {
        t.Start();
        type1.Activate();

        var countTarget = 0; //количество размещаемых элементов
        foreach (Element origElement in elems) //перебираем элементы из связи
        {
          LocationPoint pPoint = origElement.Location as LocationPoint;
          XYZ coords = pPoint.Point; //координаты экземпляра в связи
          double rotation = pPoint.Rotation;
          var FamSymbol = (origElement as FamilyInstance).Symbol; // FamilySymbol элементов связи
          var linkElemUniq = origElement.UniqueId;
          var famname = origElement.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString(); //имя семейства в связи
          var typename = famname + "_/_" + origElement.Name;typename = typename.Replace("[", "(");typename = typename.Replace("]", ")"); // имя семейства + имя типоразмера (заменяем скобки []) 
          if (origElement.LookupParameter("Щит аварийного освещения") != null &&origElement.LookupParameter("Щит аварийного освещения").AsInteger() == 1)
          {
            typename = typename + "/Щит аварийного освещения";
          }
          if (origElement.LookupParameter("Щит управления двигателями") != null &&origElement.LookupParameter("Щит управления двигателями").AsInteger() == 1)
          {
            typename = typename + "/Щит управления двигателями";
          }
          if (origElement.LookupParameter("Щит силовой распределительный") != null &&origElement.LookupParameter("Щит силовой распределительный").AsInteger() == 1)
          {
            typename = typename + "/Щит силовой распределительный";
          }
          var target = targetElems.Where(i => (string)sm.getSchemaDictValue<string>(i, "Dict_String", (int)Keys.Linked_Element_UniqueId) == linkElemUniq); //коллектор по совпадающим UniqId (1 ТП)
          if (target.Count() != 0)
          {
            continue;
          } // проверка по UniqID в связи и в проекте

          FamilySymbol Newtype = Util.GetFamilySymbolByName(doc, typename) as FamilySymbol ?? CreateNewType(type1, typename); //проверка есть ли типоразмер в проекте если нет создаем
          //var targetElement = doc.Create.NewFamilyInstance(coords, Newtype, StructuralType.NonStructural);
          XYZ point2 = new XYZ(coords.X, coords.Y, coords.Z + 100);
          Line axis = Line.CreateBound(coords, point2);
          FamilyInstance ins = origElement as FamilyInstance;
          var tr = ins.GetTotalTransform();
          var basX1 = tr.BasisX.X;
          var basX2 = tr.BasisX.Y;
          var basX3 = tr.BasisX.Z;
          var basY1 = tr.BasisY.X;
          var basY2 = tr.BasisY.Y;
          var basY3 = tr.BasisY.Z;
          var basZ1 = tr.BasisZ.X;
          var basZ2 = tr.BasisZ.Y;
          var basZ3 = tr.BasisZ.Z;
          XYZ liner = new XYZ(basX1, basX2, 0);
          if (basZ1 != 0 || basZ2 != 0)
          {
            liner = new XYZ(basZ1, basZ2, 0);
          }
          var targetElement = doc.Create.NewFamilyInstance(coords,Newtype,liner,origElement,StructuralType.NonStructural);
          countTarget++;
          if (checkLinkInst != false)
          {
            targetElement.get_Parameter(new Guid(param["Новый"])).Set(1);
          } //проверка новый ли элемент, если новый то пишем в параметр

          ElemUniq = targetElement.UniqueId;
          SetValueToFields(targetElement, ElemUniq, linkElemUniq, LinkUniq, LinkName, LinkPath, typename, coords,sch); //запись параметров в ExStorage                                
          SetParameters(origElement, targetElement, LinkName); //запись параметров в Instance 
          NameSystemParameter(origElement, targetElement);
          Ozk(origElement, targetElement); //уго озк кду
          GSymbol(typename, "Электрооборудование", "Шкаф", origElement, targetElement);
          GSymbol(typename, "КСК", "УГО_КСК", targetElement);
          GSymbol(typename, "ШПК", "УГО_ПК", targetElement);
          GSymbol(typename, "СОУЭ", "УГО_СОУЭ", targetElement);
          GSymbol(typename, "СПЖ", "УГО_СПЖ", targetElement);
          GSymbol(typename, "ЦПИ", "УГО_ЦПИ", targetElement);
          GSymbol(typename, "Щит_автоматики", "УГО_ЩУ", targetElement);
          GSymbol(typename, "РП", "УГО_СПЖ", targetElement);
        }

        t.Commit();
        if (countTarget == 0)
        {
          TaskDialog tdPr = new TaskDialog("Предупреждение");
          tdPr.MainIcon = TaskDialogIcon.TaskDialogIconWarning;
          tdPr.TitleAutoPrefix = false;
          tdPr.AllowCancellation = true;
          tdPr.MainInstruction = "Нет элементов для размещения!";
          tdPr.CommonButtons = TaskDialogCommonButtons.Close;
          tdPr.DefaultButton = TaskDialogResult.Close;
          TaskDialogResult tdRes = tdPr.Show();
          return Result.Succeeded;
        }
        else
        {
          TaskDialog end = new TaskDialog("Информация");
          end.MainIcon = TaskDialogIcon.TaskDialogIconInformation;
          end.MainInstruction = "Элементов размещено в проекте: " + countTarget;
          end.TitleAutoPrefix = false;
          end.Show();
          return Result.Succeeded;
        }
      }
    }