2018.7.17.南京。外面36°,宜烧烤,感谢麻老师,k神。喵的Leo周*(本人)好饿。早知道不学C#了。。。
环境:revit2018
首先先介绍几个比较重要的先行条件。如果知道最好,不知道我接下来也会给你讲解。
柱的中线点:通过 Location 类,你可以得到指定柱子的中心点。这个对你以后revit二次开发生涯很有帮助。中线点,就是在柱子的俯视图的2条对角线的交点,且高度为柱子的地面高度。
下面是去中线点的代码示意:
LocationPoint columnPoint = column.Location as LocationPoint;
XYZ point =columnPoint.Point;
柱子有中心点,梁则有中心线。
图1-1
如图1-1所示,箭头所指即为中心线的交点。根据上面柱子的中心点,你是否发现。当梁不发生偏移时,梁的中心线的2个端点与柱子的中线点在二维平面重合。
取得中心线的代码示意:
LocationCurve BeamLoactionCurve = beam.Location as LocationCurve;
Curve BeamLoaction = BeamLoactionCurve.Curve;
在revit2018中梁作为FamilyInstance拥有了一新的方法叫Split,它可以根据百分比分段梁,并提供新生的梁的ID(梁被分成2断,一段继承原来梁的id,一段生成新的ID)。本人思路:根据柱子中心点,可以得到各个柱子点到指点柱子点的距离(指定点一般是梁的2端的任意一端),也就得知各个段所占百分比。然后梁根据这个在进行劈~~~~完美!perfect!
namespace SplitBeamEI
{
[Transaction(TransactionMode.Manual)]
public class SplitBeamWithLean : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
try
{
BeamAndColumnSlectionFileter beamAndColumnSelectionFileter = new BeamAndColumnSlectionFileter();
IList<Reference> refers = uidoc.Selection.PickObjects(ObjectType.Element, beamAndColumnSelectionFileter);
List<Element> BeamList = new List<Element>();
List<Element> ColumnList = new List<Element>();
if (refers.Count > 0)
{
&nb