C# и Sharp Develop
Главная › Форумы › Задать вопрос › C# и Sharp Develop
- В этой теме 38 ответов, 7 участников, последнее обновление 6 лет, 9 месяцев назад сделано txt.
-
АвторСообщения
-
Несколько выбранных элементов в Ревит:
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;
}
}Все типы труб в проекте
[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;
}
}помимо клика мышью есть еще способы выборки элементов в модели ревит через С# ? Например, выбор рамкой? (аналогично работе нода 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 в VisualStudionamespace мой_модуль_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;
}
}
Legantmar
я так понимаю вставить напрямую код C# (из которого в VS производится сборка dll ) , либо код из шарпа в динамо нельзя?В качестве продолжения изучения выборки и фильтрации :
как получить 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);}
}
}Приложение для отладки кода в VS (ура , оно существует)
Арсений
Спасибо за ресурс ! ) С удовольствием посмотрю (картинка многообещающая XD)
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.