revit二次开发——从族实例中取得几何信息
来源:互联网 发布:淘宝买家仅退款不退货 编辑:程序博客网 时间:2024/06/11 00:31
1、可以从族实例中获得面、获得边、获得线、获得点,方法如下
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingAutodesk.Revit.UI;
usingAutodesk.Revit.DB;
usingAutodesk.Revit.UI.Selection;
usingAutodesk.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)]
publicclassClass1:IExternalCommand
{
publicResultExecute(ExternalCommandDatacommandData,refstringmessage,ElementSetelements)
{
DocumentrevitDoc=commandData.Application.ActiveUIDocument.Document; //取得文档
ApplicationrevitApp=commandData.Application.Application; //取得应用程序
UIDocumentuiDoc=commandData.Application.ActiveUIDocument;
Selectionsel=uiDoc.Selection;
Referenceref1=sel.PickObject(ObjectType.Element,"选择一个族实例");
Elementelem=revitDoc.GetElement(ref1);
FamilyInstancefamilyInstance=elemasFamilyInstance;
Optionsopt=newOptions();
opt.ComputeReferences=true;
opt.DetailLevel=ViewDetailLevel.Fine;
GeometryElemente=familyInstance.get_Geometry(opt);
foreach(GeometryObjectobjine)
{
GeometryInstancegeoInstance=objasGeometryInstance;
GeometryElementgeoElement=geoInstance.GetInstanceGeometry();
TransforminsTransform=geoInstance.Transform;
foreach(GeometryObjectobj2ingeoElement)
{
Solidsolid2=obj2asSolid;
if(solid2.Faces.Size> 0)
{
//FindBottomFace(solid2);
//FindEdge(solid2);
//FindLine(solid2);
//FindPoint(solid2);
transformPointAndUaPoint(solid2,insTransform);
TaskDialog.Show("呵呵","在这里");
}
}
}
returnResult.Succeeded;
}
///<summary>
///得到最底下的边的面积和原点坐标
///</summary>
///<param name="solid"></param>
///<returns></returns>
FaceFindBottomFace(Solidsolid)
{
PlanarFacepf=null;
foreach(Facefaceinsolid.Faces)
{
pf=faceasPlanarFace;
if(null!=pf)
{
if(Math.Abs(pf.FaceNormal.X) < 0.01 && Math.Abs(pf.FaceNormal.Y) < 0.01 && pf.FaceNormal.Z< 0)
{
TaskDialog.Show("Wall Bottom Face","Area is "+pf.Area.ToString() + "; Origin = (" + pf.Origin.X.ToString() + " " + pf.Origin.Y.ToString() + " " + pf.Origin.Z.ToString() + ")");
break;
}
}
}
returnpf;
}
///<summary>
///通过curve得到12个边的长度
///</summary>
///<param name="solid"></param>
publicvoidFindEdge(Solidsolid)
{
stringstrParamInfo=null;
foreach(Edgeeinsolid.Edges)
{
strParamInfo+=e.ApproximateLength+"\n";
}
TaskDialog.Show("REVIT",strParamInfo);
}
///<summary>
///通过Line得到12个边的长度
///</summary>
///<param name="solid"></param>
publicvoidFindLine(Solidsolid)
{
stringstrParamInfo=null;
foreach(Edgeeinsolid.Edges)
{
Lineline=e.AsCurve()asLine;
strParamInfo+=line.ApproximateLength+"\n";
}
TaskDialog.Show("REVIT",strParamInfo);
}
///<summary>
///通过curve或者line找到点
///</summary>
///<param name="solid"></param>
publicvoidFindPoint(Solidsolid)
{
stringstrParamInfo1=null;
stringstrParamInfo2=null;
//string strParamInfo3 = null;
foreach(Edgeeinsolid.Edges)
{
foreach(XYZiiine.Tessellate())
{
XYZpoint=ii;
strParamInfo1+=ii.X+","+ii.Y+","+ii.Z+"\n";
}
Lineline=e.AsCurve()asLine;
foreach(XYZiiinline.Tessellate())
{
XYZpoint=ii;
strParamInfo2+=ii.X+","+ii.Y+","+ii.Z+"\n";
}
}
TaskDialog.Show("通过curve找到点的坐标",strParamInfo1);
TaskDialog.Show("通过line找到点的坐标",strParamInfo2);
}
publicvoidtransformPointAndUaPoint(Solidsolid,TransforminsTransform)
{
stringstrParamInfo1=null;
stringstrParamInfo2=null;
//string strParamInfo3 = null;
foreach(Edgeeinsolid.Edges)
{
foreach(XYZiiine.Tessellate())
{
XYZpoint=ii;
strParamInfo1+=point.X+","+point.Y+","+point.Z+"\n";
XYZtransformPoint=insTransform.OfPoint(point);
strParamInfo2+=transformPoint.X+","+transformPoint.Y+","+transformPoint.Z+"\n";
}
}
TaskDialog.Show("未经transform过转换的坐标",strParamInfo1);
TaskDialog.Show("经过transform转换的坐标系",strParamInfo2);
}
}
}
0 0
- revit二次开发——从族实例中取得几何信息
- revit二次开发获取墙的几何信息
- revit二次开发——自适应构件族
- Revit二次开发——读取构件的材料外观信息
- Revit二次开发——读取cad中的文字信息
- Revit二次开发入门——获取模型中门窗数量
- revit二次开发——族——载入族
- Revit二次开发——revit怎么给桥梁加钢筋
- Revit二次开发----分割族
- Revit二次开发入门——Task Dialogs
- Revit二次开发——场地地形
- Revit二次开发——空间曲线
- Building Coder(Revit 二次开发) - 从 Revit 中创建 Navisworks 文件
- Building Coder(Revit 二次开发) - 放置族实例
- Revit二次开发——从链接文件中选取指定元素
- Revit二次开发,VS中配置
- Revit二次开发----在项目环境中直接建族
- Revit二次开发——怎样在类中直接应用WPF窗口
- 自适应族
- HTTP客户端识别与Cookie机制
- 【NOIP2004】虫食算(搜索+高斯消元)
- iOS Objc Runtime 教程+实例Demo
- SVD分解理论
- revit二次开发——从族实例中取得几何信息
- 单例模式,你所应该知道的一切
- 在WebStorm里配置watcher实现编辑less文件时自动生成.map和压缩后的.css文件
- ℃江让您从精通到入门:第一次
- HDU1698 Just a Hook 线段树成段替换
- java设计模式之组合模式
- tcp为什么需要3次握手和3次握手的过程
- dfs走迷宫
- python优雅实现策略模式