广西专业做网站的公司,导航栏网页怎么制作,电影天堂网站用什么程序做的,东莞房产信息网前言
Revit 作为一款成熟的商业软件#xff0c;它将自己的UI选择功能也通过 API 暴露出来。通过 API 可以按照特定的过滤规则来选择相应的元素#xff0c;能力和UI基本上是等价的。这个 SDK 用四个例子展示了 API 的能力#xff0c;内容如下。
内容 PickforDeletion
核心…前言
Revit 作为一款成熟的商业软件它将自己的UI选择功能也通过 API 暴露出来。通过 API 可以按照特定的过滤规则来选择相应的元素能力和UI基本上是等价的。这个 SDK 用四个例子展示了 API 的能力内容如下。
内容 PickforDeletion
核心逻辑
通过 m_document.Selection.PickObjects(ObjectType.Element) 选择若干个元素通过 m_document.Document.Delete(elemDeleteList) 删除元素
核心代码
// 保存需要删除的元素
ListElementId elemDeleteList new ListElementId();
// 通过PickObjects选择多个元素
IListReference eRefList m_document.Selection.PickObjects(ObjectType.Element, Please pick some element to delete. ESC for Cancel.);
// 将选中的元素加入选择集
foreach (Reference eRef in eRefList){if (eRef ! null eRef.ElementId ! ElementId.InvalidElementId){elemDeleteList.Add(eRef.ElementId);}
}
// 删除选择集中的元素
m_document.Document.Delete(elemDeleteList);PlaceAtPointOnWallFace
核心逻辑
通过 m_document.Selection.PickObject(ObjectType.PointOnElement) 选择一个点放置窗户m_document.Document.Create.NewFamilyInstance
核心代码
// 选择墙上的一个点
Reference pickedRefer m_document.Selection.PickObject(ObjectType.PointOnElement, new WallFaceFilter(m_document.Document), Please pick a point on Wall face.);
// 找到对应的窗户类型
string symbolName 36\ x 48\;
FilteredElementCollector elemCollector new FilteredElementCollector(m_document.Document);
elemCollector.WhereElementIsElementType();
var query from element in elemCollector where element.Name symbolName select element;
Element elemType query.SingleElement();
FamilySymbol windowType elemType as FamilySymbol;
// 放置窗户
m_document.Document.Create.NewFamilyInstance(pickedRefer .GlobalPoint, windowType, m_document.Document.GetElement(pickedRefer ), StructuralType.NonStructural);PlaceAtPickedFaceWorkplane
核心逻辑
选择一个面m_document.Selection.PickObject(ObjectType.Face)提取面创建工作平面SketchPlane plane SketchPlane.Create(m_document.Document, geometryPlane);设置新的工作平面m_document.Document.ActiveView.SketchPlane faceSketchPlane;m_document.Document.ActiveView.ShowActiveWorkPlane();选择工作平面上的一个点m_document.Selection.PickPoint创建模型线Curve circle Arc.Create(point, 5, 0, Math.PI * 2, faceSketchPlane.GetPlane().XVec, faceSketchPlane.GetPlane().YVec);m_CreationBase.NewModelCurve(circle, faceSketchPlane);
核心代码
// 选择一个面
Reference faceRef m_document.Selection.PickObject(ObjectType.Face, new PlanarFaceFilter(m_document.Document), Please pick a planar face to set the work plane. ESC for cancel.);
// 通过面的索引获取面的几何
GeometryObject geoObject m_document.Document.GetElement(faceRef).GetGeometryObjectFromReference(faceRef);
PlanarFace planarFace geoObject as PlanarFace;
// 创建一个工作平面
Plane geometryPlane Plane.CreateByNormalAndOrigin(planarFace.FaceNormal, planarFace.Origin);
SketchPlane faceSketchPlane SketchPlane.Create(m_document.Document, geometryPlane);
// 将新建的工作平面设置为当前视图的活动工作平面
m_document.Document.ActiveView.SketchPlane faceSketchPlane;
m_document.Document.ActiveView.ShowActiveWorkPlane();
// 选择工作平面上的一个点
ObjectSnapTypes snapType ObjectSnapTypes.Centers | ObjectSnapTypes.Endpoints | ObjectSnapTypes.Intersections | ObjectSnapTypes.Midpoints | ObjectSnapTypes.Nearest | ObjectSnapTypes.WorkPlaneGrid;
XYZ point m_document.Selection.PickPoint(snapType, Please pick a point to place component.);
// 以选中点为中心绘制一个圆
Curve circle Arc.Create(point, 5, 0, Math.PI * 2, faceSketchPlane.GetPlane().XVec, faceSketchPlane.GetPlane().YVec);
m_CreationBase.NewModelCurve(circle, faceSketchPlane);SelectionDialog
核心逻辑
选择一个元素m_document.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element选择一个目标点XYZ targetPoint m_document.Selection.PickPoint(Please pick a point.)移动元素到目标点ElementTransformUtils.MoveElement(m_document.Document,elem.Id, vecToMove);
核心代码
// 选择要移动的元素记录初始位置
Reference eRef m_document.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, Please pick an element.);
SelectedElement m_document.Document.GetElement(eRef);
m_elemPickedPoint eRef.GlobalPoint;
// 选择一个目标点
XYZ targetPoint m_document.Selection.PickPoint(Please pick a point.);
// 移动元素到目标点
XYZ vecToMove targetPoint - m_elemPickedPoint;
m_elemPickedPoint targetPoint;
ElementTransformUtils.MoveElement(m_document.Document,elem.Id, vecToMove);参考
创建族实例参考博客https://blog.csdn.net/weixin_44153630/article/details/104650998 ElementTransformUtils参考博客https://blog.csdn.net/weixin_44153630/article/details/103884784