Message 1 of 5

Not applicable
05-01-2020
08:30 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Thank you for reading first.
What I'm trying to do is...
I'm going to make the "Revit Elements" into a single solid and write it in "Revit Family".
( The reason I do this is to control the generated solids. Please refer to the picture!! )
Please help me.
#region Namespaces
using System;
using System.Collections.Generic;
using System.Diagnostics;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
#endregion
namespace RibbonButton
{
[Transaction(TransactionMode.Manual)]
public class Commend : IExternalCommand
{
#region
string DirSearch(string start_dir, string filename_pattern)
{
foreach (string d in Directory.GetDirectories(
start_dir))
{
foreach (string f in Directory.GetFiles(
d, filename_pattern))
{
return f;
}
string f2 = DirSearch(d, filename_pattern);
if (null != f2)
{
return f2;
}
}
return null;
}
#endregion
public UIDocument ActiveUIDocument { get; private set; }
public Result Execute(
ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Document doc = uidoc.Document;
// Code Start ↓
// Element selection
IList<Reference> selectedConduits = uidoc.Selection.PickObjects(ObjectType.Element);
// Solid Union
Solid union = null;
foreach (var item in selectedConduits)
{
SolidGeometry solidgeo = item as Solid;
foreach (GeometryObject obj in solidgeo)
{
Solid solid = obj as Solid;
if (null != solid
&& 0 < solid.Faces.Size)
{
if (null == union)
{
union = solid;
}
else
{
union = BooleanOperationsUtils.ExecuteBooleanOperation(union, solid,BooleanOperationsType.Union);
}
}
}
}
// Create Generic Model
using (Transaction trans = new Transaction(doc, "Transaction"))
{
try
{
trans.Start();
DirSearch(app.FamilyTemplatePath, "Metric Generic Model.rft");
trans.Commit();
}
catch { }
}
// Code End ↑
return Result.Succeeded;
}
}
}
Solved! Go to Solution.