revit二次开发 提取模型线边缘并将之变成模型线
来源:互联网 发布:mac os 彻底删除软件 编辑:程序博客网 时间:2024/05/19 19:41
提取模型线边缘并将之变成模型线主要是为了方便建桥梁的护栏,因为选择护栏的路线必须是在平面上,这点暂时不好解决。
但是前一个问题还是可以解决的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;
namespace 取得边缘线
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
Application revitApp = commandData.Application.Application; //取得应用程序
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Selection sel = uiDoc.Selection;
Reference ref1 = sel.PickObject(ObjectType.Element, "选择一个族实例");
Element elem = revitDoc.GetElement(ref1);
FamilyInstance familyInstance = elem as FamilyInstance;
Options opt = new Options();
opt.ComputeReferences = true;
opt.DetailLevel = ViewDetailLevel.Fine;
GeometryElement e = familyInstance.get_Geometry(opt);
Transaction tra = new Transaction(revitDoc);
tra.Start("revit");
foreach (GeometryObject obj in e)
{
GeometryInstance geoInstance = obj as GeometryInstance;
GeometryElement geoElement = geoInstance.GetInstanceGeometry();
Transform insTransform = geoInstance.Transform;
foreach (GeometryObject obj2 in geoElement)
{
Solid solid2 = obj2 as Solid;
if (solid2.Faces.Size > 0)
{
foreach (Edge edge in solid2.Edges)
{
Curve curve = edge.AsCurve();
//TaskDialog.Show("revit",edge.AsCurve().GetType().ToString());
CreatModelLine2(revitDoc, curve, revitApp);
//SketchPlane plane =SketchPlane.Create(revitDoc,new Plane(normal,curve.GetEndPoint(0)));
//ModelCurve modelCurve = revitDoc.Create.NewModelCurve(curve,);
}
//FindBottomFace(solid2);
//FindEdge(solid2);
//FindLine(solid2);
//FindPoint(solid2);
//transformPointAndUaPoint(solid2, insTransform);
//TaskDialog.Show("呵呵", "在这里");
}
}
}
tra.Commit();
return Result.Succeeded;
}
public void CreatModelLine(Document revitDoc, Curve curve, Application revitApp)
{
XYZ p1 = GeomUtil.SubXYZ(curve.GetEndPoint(0), curve.GetEndPoint(1));
XYZ p2 = GeomUtil.SubXYZ(curve.GetEndPoint(0), new XYZ(3, 29, 37));
XYZ normal = GeomUtil.CrossMatrix(p1, p2);
SketchPlane modelSketch = SketchPlane.Create(revitDoc, revitApp.Create.NewPlane(normal, curve.GetEndPoint(0)));
ModelCurve modelcurve = revitDoc.FamilyCreate.NewModelCurve(curve, modelSketch);
}
/// <summary>
/// 在项目中建模型线
/// </summary>
/// <param name="revitDoc"></param>
/// <param name="curve"></param>
/// <param name="revitApp"></param>
public void CreatModelLine2(Document revitDoc, Curve curve, Application revitApp)
{
try
{
XYZ p1 = GeomUtil.SubXYZ(curve.GetEndPoint(0), curve.GetEndPoint(1));
XYZ p2 = GeomUtil.SubXYZ(curve.GetEndPoint(0), new XYZ(3, 29, 37));
XYZ normal = GeomUtil.CrossMatrix(p1, p2);
SketchPlane modelSketch = SketchPlane.Create(revitDoc, revitApp.Create.NewPlane(normal, curve.GetEndPoint(0)));
ModelCurve modelcurve = revitDoc.Create.NewModelCurve(curve, modelSketch);
}
catch
{
XYZ p1 = GeomUtil.SubXYZ(curve.Tessellate()[0], curve.Tessellate()[1]);
XYZ p2 = GeomUtil.SubXYZ(curve.GetEndPoint(0), curve.Tessellate()[2]);
XYZ normal = GeomUtil.CrossMatrix(p1, p2);
SketchPlane modelSketch = SketchPlane.Create(revitDoc, revitApp.Create.NewPlane(normal, curve.GetEndPoint(0)));
ModelCurve modelcurve = revitDoc.Create.NewModelCurve(curve, modelSketch);
}
}
}
- revit二次开发 提取模型线边缘并将之变成模型线
- Revit开发设置模型线颜色
- Revit二次开发入门——获取模型中门窗数量
- Revit二次开发(3):Revit动态模型更新(DMU: Dynamic Model Update)功能
- Revit二次开发之入门
- C# revit 二次开发 创建线样式LineStyle
- Revit二次开发高级专题讲座:访问Revit模型中的几何数据以及对象间关系判断方法(点击下载)
- 零真红之蝶 模型提取
- Revit二次开发之“族”操作
- Revit二次开发之“族”操作
- revit二次开发之单位转换
- 模型提取
- Revit开发之选择链接模型中的构件
- Revit模型动态规范检查
- 模型边缘高亮
- C# revit 二次开发 为线样式设置线型图案
- Revit 二次开发
- 特征提取模型系列之CNN设计
- Python与机器学习2
- 又一次Erlang 面试
- Java序列化与反序列化
- 如何在Web前端上点亮你的技能树
- Android 常见控件Spinner
- revit二次开发 提取模型线边缘并将之变成模型线
- Win7+IE11下,下载文件打开失败
- 解决谷歌浏览器不能打开html提示没有注册类
- ACM-ICPC 最短路径问题
- 2048游戏
- 欢迎使用CSDN-markdown编辑器
- Express之托管静态文件
- 正/逆向最大匹配算法
- TensorFlow下的MNIST关键原理与参数理解