C# и Sharp Develop

Главная Форумы Задать вопрос C# и Sharp Develop

Просмотр 9 сообщений - с 31 по 39 (из 39 всего)
  • Автор
    Сообщения
  • #7439 Score: 0
    txt
    Модератор
    86 pts

    #7440 Score: 0
    txt
    Модератор
    86 pts

    Несколько выбранных элементов в Ревит:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.ApplicationServices;
    using Autodesk.Revit.UI.Selection;
    [Transaction(TransactionMode.Manual)]
    public class swaat : IExternalCommand
    {
    public Result Execute(
    ExternalCommandData commandData,
    ref string message,
    ElementSet elements)
    {
    UIApplication rvtUiApp = commandData.Application;
    Application rvtApp = rvtUiApp.Application;
    UIDocument rvtUiDoc = rvtUiApp.ActiveUIDocument;
    Document rvtDoc = rvtUiDoc.Document;
    {
    var element = rvtUiDoc.Selection.GetElementIds();
    var lst_ = new List<string>();
    foreach (var elem in rvtUiDoc.Selection.GetElementIds())
    foreach (var bic in Enum.GetValues(typeof(BuiltInCategory)))
    {
    if (rvtDoc.GetElement(elem).Category.Id.IntegerValue == (int)bic)
    {
    lst_.Add(rvtDoc.GetElement(elem).Category.Name.ToString());
    lst_.Add(bic.ToString());
    lst_.Add(rvtDoc.GetElement(elem).LookupParameter("Комментарии").AsString());
    }
    };
    TaskDialog.Show("Bic", string.Join(" ;", lst_));
    }
    return Result.Succeeded;
    }
    }

    #7441 Score: 0
    txt
    Модератор
    86 pts

    Все типы труб в проекте

    [Transaction(TransactionMode.ReadOnly)]
    public class swaat : IExternalCommand
    {
    public Result Execute(
    ExternalCommandData commandData,
    ref string message,
    ElementSet elements)
    {
    UIApplication rvtUiApp = commandData.Application;
    Application rvtApp = rvtUiApp.Application;
    UIDocument rvtUiDoc = rvtUiApp.ActiveUIDocument;
    Document rvtDoc = rvtUiDoc.Document;
    FilteredElementCollector collector = new FilteredElementCollector(rvtDoc);
    collector.OfCategory(BuiltInCategory.OST_PipeCurves);
    string s = "";
    foreach (Element pipe_type in collector)
    {
    s += pipe_type.Name + "\r\n";
    }
    TaskDialog.Show(
    "Info",
    "Pipe Types:\n\n" + s);
    return Result.Succeeded;
    }
    }

    #7442 Score: 0
    txt
    Модератор
    86 pts

    помимо клика мышью есть еще способы выборки элементов в модели ревит через С# ? Например, выбор рамкой? (аналогично работе нода select model elements )

    Нашел …

    [Transaction(TransactionMode.Manual)]
    public class swaat : IExternalCommand
    {
    public Result Execute(
    ExternalCommandData commandData,
    ref string message,
    ElementSet elements)
    {
    UIApplication rvtUiApp = commandData.Application;
    Application rvtApp = rvtUiApp.Application;
    UIDocument rvtUiDoc = rvtUiApp.ActiveUIDocument;
    Document rvtDoc = rvtUiDoc.Document;
    {
    var elements_ = (rvtUiDoc.Selection.PickElementsByRectangle("Select model elements"));
    string lst_ = "";
    foreach (var elem in elements_)
    foreach (var bic in Enum.GetValues(typeof(BuiltInCategory)))
    {
    if (elem.Category.Id.IntegerValue == (int)bic)
    {
    lst_ += bic.ToString() + elem.Category.Name.ToString() + elem.LookupParameter("Комментарии").AsString() + "\r\n";
    }
    };
    TaskDialog.Show("Bic", lst_);
    }
    return Result.Succeeded;
    }
    }

    Мне было интересно сравнить различие написания кода в SharpDevelop и VisualStudio (VS)
    на сей момент вот что обнаружил:


    using System;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI.Selection;
    using System.Collections.Generic;
    using System.Linq;
    //using Autodesk.Revit.Attributes; //для использования Transaction в VisualStudio
    //using Autodesk.Revit.ApplicationServices; //для использования Application в VisualStudio

    namespace мой_модуль_1
    {
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.DB.Macros.AddInId("5B73FFA7-C59D-4E7B-BECD-3410D9EB405F")]
    public partial class ThisDocument
    {
    private void Module_Startup(object sender, EventArgs e)
    {

    }

    private void Module_Shutdown(object sender, EventArgs e)
    {

    }

    #region Revit Macros generated code
    private void InternalStartup()
    {
    this.Startup += new System.EventHandler(Module_Startup);
    this.Shutdown += new System.EventHandler(Module_Shutdown);
    }
    #endregion

    /////////////////// здесь начинается код, все что выше создается автоматом в шарпе /////////////////////////////
    public void swaat()

    {
    UIDocument rvtUiDoc = this.Application.ActiveUIDocument;
    //Document rvtDoc = this.Document;
    var elements_ = (rvtUiDoc.Selection.PickElementsByRectangle("Select model elements"));
    string lst_ = "";
    foreach (var elem in elements_)
    foreach (var bic in Enum.GetValues(typeof(BuiltInCategory)))

    {
    if (elem.Category.Id.IntegerValue == (int)bic)
    {
    lst_ += bic.ToString() + elem.Category.Name.ToString() + elem.LookupParameter("Комментарии").AsString() + "\r\n";
    }
    };
    TaskDialog.Show("Bic", lst_);
    }
    //return Result.Succeeded;
    }
    }

    #7443 Score: 0
    txt
    Модератор
    86 pts

    Legantmar
    я так понимаю вставить напрямую код C# (из которого в VS производится сборка dll ) , либо код из шарпа в динамо нельзя?

    #7445 Score: 0
    txt
    Модератор
    86 pts

    В качестве продолжения изучения выборки и фильтрации :

    как получить ICollections из списка Id элементов АПИ пишет тут:
    http://www.revitapidocs.com/2017.1/31b73d46-7d67-5dbb-4dad-80aa597c9afc.htm

    использование метода FilteredElementCollector Constructor (Document, ICollection(ElementId)) тут:
    http://www.revitapidocs.com/2017.1/901f78a0-1f6c-217b-ea48-8b404324e88b.htm

    Смысл какой: выбрали рамкой кучу элементов, из них отфильтровались трубы

    код шарпа:

    public void give_me_pipes()
    {
    UIDocument uidoc=this.Application.ActiveUIDocument;
    var els_ = (uidoc.Selection.PickElementsByRectangle("Select model elements"));
    var lst_ = new List<ElementId>();
    foreach (Element i in els_)
    {
    var k = this.Document.GetElement(i.Id);
    lst_.Add(k.Id);
    }

    ICollection<ElementId> selectedIds = lst_ ;
    FilteredElementCollector collector = new FilteredElementCollector(this.Document, selectedIds);
    collector.OfCategory(BuiltInCategory.OST_PipeCurves);
    string s = "";
    foreach (Element x in collector)
    {
    s += x.Name + "\r\n";
    }
    TaskDialog.Show("Info", "Pipe Types:\n\n" + s);

    }
    }
    }

    #7446 Score: 0
    txt
    Модератор
    86 pts

    Приложение для отладки кода в VS (ура , оно существует)

    https://knowledge.autodesk.com/support/revit-products/learn-explore/caas/screencast/Main/Details/f673fea8-6f8a-401d-8d54-ed869feb87d2.html

    #7485 Score: 1
    Арсений
    Участник
    1 pt

    txt – может пригодится – “Revit API. Шаблоны проектов Visual Studio для Revit”

    Под видео – ссылка на блог с описанием. В общем информации для переваривания предостаточно если кликать по ссылкам)

    #7486 Score: 0
    txt
    Модератор
    86 pts

    Арсений

    Спасибо за ресурс ! ) С удовольствием посмотрю (картинка многообещающая XD)

     

Просмотр 9 сообщений - с 31 по 39 (из 39 всего)
  • Для ответа в этой теме необходимо авторизоваться.