I have a wall and have to split it using Revit API. I have placement points as an input and need to split the wall based on those points. Do we have any command to achieve this using Revit API?
Any help would be greatly appreciated.
No there is no direct method for that. You'll have to make a copy of your wall with ElementTransformUtils.CopyElement method, then move one point of the original and one point of the copy to the location of your split point. To move the points, you have to create and assign a new curve to the wall location:
((LocationCurve)wall.Location).Curve = newCurve;
What do you mean by split wall? You can split certain family instances, such as beams, columns, etc. using the FamilyInstance.Split method. That does not apply to walls, however. You can split faces on a wall to apply different materials. For that, please refer to the FaceSplitter class.
Related
I'm playing with some mesh operations.
Suppose we have two meshes, one human head mesh and another one is human body.
we just have to add head to body so that the end result is one single complete human body
mesh.
I think it can be done using python-blender but i'm not that much expert in blender scripting.
May be another python library can be useful.
Please recommend some way out.
Tried join operation in blender. But it's working as expected because we want to add the two meshes
at specific location i.e. neck.
Boolean operation on meshes is a novelty of open3d v0.16, you could take a look at it :
[http://www.open3d.org/blog/][link]
I have a Revit Face, think of a RuledFace with holes, or NurbsSurface, maybe. I need a copy of that Face in a new family document.
Currently, I'm tesselating/triangulating the face and put those triangles into my family, which kind of works, but I have these intermediate edges between the triangles, which is very bad in my scenario.
I could not find a way to create e.g. a BRepBuilder with the exact information of the Face element.
The easiest way to transfer geometry from one Revit document to another is by using the copy and paste functionality provided by the CopyElements method. Examples of using it are provided in the Revit SDK samples DuplicateViews and GenericStructuralConnection.
I want to change the height of all walls but the length of walls only in a particular axis, for instance, along the x-axis.
Consecutively, could you also tell how I could alter the similar dimensions for a house? Where there are connected walls?
I see nothing in this code that means it does not work.
However, it seems to me that it does not make much sense.
One would seldom constrain all wall heights to be user defined to a certain value; instead, in most Revit models, walls are constrained to reach from a bottom level to a top level. Then, if the height of all walls needs to be modified, you would modify the elevation of the top level only.
The logic of the code guarantees that the wall location line will only be modified if the newWallLine equals XYZ.BasisX. This may never be the case, since the line is a Line object and the vector an XYZ.
I would recommend researching exactly what you wish you achieve and how to do so manually in the end user interface before addressing the task programmatically.
In general, if a feature is not available in the Revit product manually through the user interface, then the Revit API will not provide it either.
You should therefore research the optimal workflow and best practices to address your task at hand manually through the user interface first.
To do so, please discuss and analyse it with an experienced application engineer, product usage expert, or product support.
Once you have got that part sorted out, it is time to step up into the programming environment.
I hope this clarifies.
I am working at revit api to get walls of special room this is the part i have completed with Projecting rays technique. This is the main point that i am unable to do Wall thickness. Is there any way i can extract wall thickness. i am using revit 2020.
Thank you
You can only get the wall width via the WallType of the wall.
On top of that, Revit will give you the width in its native unit (usually the imperial system). It is possible to convert it easily with the UnitUtils class. Documentation here
The first step is to get the WallType. To do that, you have to retrieve the type ElementId via GetTypeId(), then the element via document.GetElement(), and finally cast it to WallType.
From the type, we obtain the width in Revit native units, which we convert into milimeters via the UnitUnits class.
Here is a code snippet:
WallType wallType = document.GetElement(wall.GetTypeId()) as WallType;
double nativeWitdh = wallType.Width;
double milimeterWidth = UnitUtils.ConvertFromInternalUnits(nativeWitdh,DisplayUnitType.DUT_MILLIMETERS);
Best regards,
François
Sure, very easy.
Use the WallType Width property.
You could very easily have answered this question by yourself, either by searching the Internet or by exploring the wall and its properties using RevitLookup.
Please perform some minimal research for yourself before asking a question and making others do the work for you.
Here is some more advice on researching how to solve a Revit API programming task.
I have a dataset (i.e. a shapefile) containing spatial location data (coordinates) and elevation data as well as other attribute fields.
I want to select points which have at least 200m vertical separation (i.e. are at least 200m apart on the z-axis) AND are within 3km of each other.
The aim is to create a new shapefile with all points that have this relationship with 1 or more other points.
Im sure there is a solution to this problem (maybe not using arcmap at all?) but i just cant find it. any help would be greatly appreciated.
Chris
You are going to have much better luck asking this question in gis.stackexchange.com. Many more ESRI users/programmers there. As a matter of fact I bet you find your solution there without having to ask the question.
You can run the ArcGIS Near tool on all the points.
Then select by attribute points with Z values of >200m and distance values of <3000m.