There are often multiple good ways to accomplish something with the Revit API. In the case of the “find column closest to a point” challenge, I’ve explained another approach in a new lecture at https://www.udemy.com/revitapi2/?couponCode=49. This one introduces how to use ElementIntersectsSolidFilter & CreateRevolvedGeometry.
Month: January 2014
How to Delete ALL Views
There’s a new lecture at https://www.udemy.com/revitapi2/?couponCode=49 showing how to delete all views in a Revit project.
Find the column closest to a given point
There’s a new lecture at https://www.udemy.com/revitapi2/?couponCode=49 showing how to find the column closest to a given point
Identify elements that would be deleted
A new lecture at https://www.udemy.com/revitapi2/?couponCode=49 shows how to identify the elements that would be deleted when a specified element is deleted.
Create model lines from analytical model lines
Learn how at https://www.udemy.com/revitapi2/?couponCode=49
Multi-select floor/roof supports
The Revit UI forces supports to be selected individually. You can use the Revit API to allow multi-selection of supports, which is great if you have dozens or hundreds to select.
Learn how at https://www.udemy.com/revitapi2/?couponCode=49
Create a Shape Edited Floor from a Toposurface
Use the Revit API to build a shape-edited floor from the geometry of a toposurface.
Learn how this can be done at my new Revit API course at https://www.udemy.com/revitapi2/?couponCode=49
Learn Even More about the Revit API
My Revit API course at Udemy has been a wonderful success! It has been great to have so many people learn about the power and potential of the Revit API through its more than three dozen lectures.
If there are topics of interest to you that are not covered there, or you would like to continue expanding your knowledge of the Revit API, a new course is available at https://www.udemy.com/revitapi2/?couponCode=49.
This new course currently includes lectures on geometry creation and modification, the Revit Error/Warning API, and Site. More courses will be added (up to a total of 5 hours of lectures) based on your requests.
Current introductory pricing is $49 (if you use the coupon link – https://www.udemy.com/revitapi2/?couponCode=49) which includes both the current lectures and those that will be added in the future. The cost of the course will increase as more lectures are added, so enroll now & save!
Creating a mass from Toposurface geometry
Following up this suggestion from Julien, here’s a look at how to create a massing family with geometry built from the mesh of a toposurface.
public void topoToMass()
{
Document doc = this.ActiveUIDocument.Document;
UIDocument uidoc = this.ActiveUIDocument;
Application app = this.Application;
TopographySurface topo = doc.GetElement(uidoc.Selection.PickObject(ObjectType.Element)) as TopographySurface;
Mesh mesh = topo.get_Geometry(new Options()).First(q => q is Mesh) as Mesh;
Document famDoc = app.NewFamilyDocument(@"C:\ProgramData\Autodesk\RAC 2014\Family Templates\English_I\Conceptual Mass\Mass.rft");
using (Transaction t = new Transaction(famDoc,"Create massing surfaces"))
{
t.Start();
for (int i = 0; i < mesh.NumTriangles; i++)
{
MeshTriangle mt = mesh.get_Triangle(i);
makeForm(famDoc, mt.get_Vertex(0), mt.get_Vertex(1), mt.get_Vertex(2));
if (i > 0 && i % 100 == 0)
{
TaskDialog td = new TaskDialog("Form Counter");
td.CommonButtons = TaskDialogCommonButtons.Yes|TaskDialogCommonButtons.No;
td.MainInstruction = i + " out of " + mesh.NumTriangles + " triangles processed. Do you want to continue?";
if (td.Show() == TaskDialogResult.No)
break;
}
}
t.Commit();
}
famDoc.LoadFamily(doc);
}
private Form makeForm(Document doc, XYZ pt1, XYZ pt2, XYZ pt3)
{
Form form = null;
XYZ u = pt2.Subtract(pt1);
XYZ v = pt3.Subtract(pt1);
double area = u.CrossProduct(v).GetLength()/2;
if (area < 10)
return null;
ReferenceArray ra = new ReferenceArray();
ra.Append(MakeCuveByPoints(doc, pt1, pt2).GeometryCurve.Reference);
ra.Append(MakeCuveByPoints(doc, pt2, pt3).GeometryCurve.Reference);
ra.Append(MakeCuveByPoints(doc, pt3, pt1).GeometryCurve.Reference);
form = doc.FamilyCreate.NewFormByCap(true, ra);
return form;
}
private CurveByPoints MakeCuveByPoints(Document doc, XYZ ptA, XYZ ptB)
{
ReferencePointArray rpa = new ReferencePointArray();
rpa.Append(doc.FamilyCreate.NewReferencePoint(ptA));
rpa.Append(doc.FamilyCreate.NewReferencePoint(ptB));
return doc.FamilyCreate.NewCurveByPoints(rpa);
}
Free trial of Spot Coordinate creation tool
Works with Revit 2013 & 2014 with conduit, pipe, duct, and cable tray. Get it at http://gdurl.com/Rgit/download. For more info, see this post.