Какую переменную передать в FamilySymbol

Автор Тема: Какую переменную передать в FamilySymbol  (Прочитано 5137 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн DilLemonАвтор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Всем привет!
Я впервые работаю с RevitAPI и ещё не со всем разобрался. У меня есть задача написать плагин, который будет считывать имена чекбоксов в txt файл, а затем по нажатию кнопки будет ставить семейство, если его имя есть в этом txt файле.
Не понимаю что нужно писать в строке symbol = '' as FamilySymbol, чтобы вставлялось семейство с именем Content.

Код - C# [Выбрать]
  1. #region Namespaces
  2. using Autodesk.Revit.ApplicationServices;
  3. using Autodesk.Revit.Attributes;
  4. using Autodesk.Revit.DB;
  5. using Autodesk.Revit.UI;
  6. using Autodesk.Revit.UI.Selection;
  7. using System;
  8. using System.IO;
  9. using IronPython.Hosting;
  10. using Microsoft.Scripting.Hosting;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.Linq;
  14. using System.Windows.Controls;
  15. using Autodesk.Revit.UI.Events;
  16. using System.Windows.Forms;
  17. using System.Windows.Media.Animation;
  18. using IronPython.Compiler.Ast;
  19. #endregion
  20.  
  21. namespace AutoPanel
  22. {
  23.     [Transaction(TransactionMode.Manual)]
  24.     public class Place : IExternalCommand
  25.     {
  26.  
  27.  
  28.  
  29.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  30.         {
  31.             string path = @"C:\Users\EGrigoryan\Documents\CROC SKS\AutoPluginRevit\AutoPanel\list.txt";
  32.             string[] CB_List = File.ReadAllLines(path);
  33.  
  34.             UIApplication uiapp = commandData.Application;
  35.             UIDocument uidoc = uiapp.ActiveUIDocument;
  36.             Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
  37.             Document doc = uidoc.Document;
  38.  
  39.  
  40.             //Retrieve elements from database
  41.            FilteredElementCollector col = new FilteredElementCollector(doc);
  42.             IList<Element> symbols = col.OfClass(typeof(FamilySymbol)).WhereElementIsElementType().ToElements();
  43.             FamilySymbol symbol = null;
  44.  
  45.             string Content = "Фильтр 1";
  46.             try
  47.             {
  48.                 foreach (Element ele in symbols)
  49.                 {
  50.                     for (int j = 0; j < 6; j++)
  51.                     {
  52.                         if (CB_List[j].Contains(Content))
  53.                         {
  54.                             symbol =  as FamilySymbol;
  55.                             break;
  56.                         }
  57.                     }
  58.                 }
  59.  
  60.                 using (Transaction tx = new Transaction(doc))
  61.                 {
  62.                     tx.Start("Делаю");
  63.                     FamilyInstance instance = doc.Create.NewFamilyInstance(new XYZ(0, 0, 0), symbol, doc.ActiveView);
  64.                     MessageBox.Show("Сделано, босс");
  65.                     tx.Commit();
  66.                 }
  67.                 return Result.Succeeded;
  68.             }
  69.  
  70.             catch
  71.             {
  72.                 var s = "ОшибОчка";
  73.                 MessageBox.Show(s);
  74.             }
  75.             return Result.Failed;
  76.         }
  77.     }
  78. }
  79.  
  80.  
« Последнее редактирование: 26-04-2023, 14:23:18 от Александр Ривилис »

Оффлайн anko_fl

  • ADN OPEN
  • Сообщений: 5
  • Карма: 0
А что находится в чек-боксах? Ну, т.е. в случае нажатия на чек бокс соответсвующий определённому FamilySymbol, что мы получим? Его ElementId, или Имя и Тип семейства ? Отправте скрин формы с чекбоксами и их значениями

Оффлайн DilLemonАвтор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Получим имя семейства, вернее типоразмера семейства, которое совпадает с именем чекбокса



Отмечено как Решение DilLemon 26-04-2023, 14:32:31

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Нужно что-то типа того (пишу по памяти, могут быть опечатки):
Код - C# [Выбрать]
  1. symbol = new FilteredElementCollector(doc)
  2.                       .WhereElementIsElementType()
  3.                       .OfType<FamilySymbol>
  4.                       .FirstOrDefault(s => s.Name == "name")
где name - имя типоразмера семейства

Оффлайн DilLemonАвтор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Спасибо огромное!!!
Наконец-то заработало!