Revit编程修改板的边界(含完整源代码)
来源:互联网 发布:如何查看淘宝新开的店 编辑:程序博客网 时间:2024/06/10 15:14
我在ADN AEC英文博客中发表了一篇文章用于修改板的边界。Revit没有直接提供API来修改板的边界。
发现了这个解决方案,先写了英文版的。这里就不翻译,直接贴过来。
原帖地址:点击打开链接
http://adndevblog.typepad.com/aec/2013/10/change-the-boundary-of-floorsslabs.html
Change the boundary of floors/slabs
By Joe Ye
Revit didn’t expose the API to edit floors/slabs boundary by now. Here introduce a trick to edit the boundary.
For a Revit slab or floor, there are mapping model lines to representing the boundary of tha slab. If a floor boundary has 6 segments, there are 6 corresponding model lines for this floor. When we change those model line's position or shape, the slab or floor's shape will be updated accordingly.
There probably are many model lines in a document. How can we find the model lines that representing the slab is the key point.
Here is the solution: You need to create a tempt transaction. During this temp transaction, delete the target slab by Document.Delete() method. This method will return all the deleted elements' ids after the slab is deleted. So the slab's boundary model line can be find by iterating all the return id (get the element from those ids and compare the object type if they are ModelLine class). Finally abort this temp transaction.
After get the boundary's boundary model lines, you can change the model line's shape by changing those ModelLine object ( use this method
LocationCurve lCurve = modelLine.Location as LocationCurve;
lCurve.Curve = newcurve.
I just did a very quick test, this works.
Here is the complete command code.
For simplicity, it just moves the floor by creating new boundary lines by moving the old segment. Here suppose the segment lines are all straight lines.
[Autodesk.Revit.Attributes.Transaction(
Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class ChangeFloor : IExternalCommand
{
public Autodesk.Revit.UI.Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements)
{
Document doc = commandData.Application.ActiveUIDocument.Document;
Autodesk.Revit.UI.Selection.Selection sel =
commandData.Application.ActiveUIDocument.Selection;
Reference ref1 = sel.PickObject (Autodesk.Revit.UI.Selection.ObjectType.Element,
"Please pick a floor to edit");
Floor f = doc.GetElement(ref1) as Floor;
Transaction transTemp = new Transaction(doc);
transTemp.Start ("tempDelete");
ICollection<ElementId> ids = doc.Delete(f);
transTemp.RollBack ();
List<ModelLine> mLines = new List<ModelLine>();
foreach (ElementId id in ids)
{
Element ele = doc.GetElement (id);
if (ele is ModelLine)
{
mLines.Add(ele as ModelLine);
}
}
Transaction trans = new Transaction(doc);
trans.Start("ChangeFloor");
//
foreach (ModelLine mline in mLines)
{
LocationCurve lCurve = mline.Location as LocationCurve;
Line c = lCurve.Curve as Line;
XYZ pt1 = c.GetEndPoint(0);
XYZ pt2 = c.GetEndPoint(1);
Transform transform = Transform.CreateTranslation(
new XYZ(1, 1, 0)); //move the line.
XYZ pt1New = transform.OfPoint (pt1);
XYZ pt2New = transform.OfPoint (pt2);
Line newLine = Line.CreateBound(pt1New, pt2New);
lCurve.Curve = newLine;
}
trans.Commit ();
return Result.Succeeded;
}
}
}
原文链接: http://blog.csdn.net/joexiongjin/article/details/12583387
作者: 叶雄进 , Autodesk ADN
- Revit编程修改板的边界(含完整源代码)
- Revit编程修改板的边界转
- 如何编程访问和修改Revit项目的单位信息
- 如何编程旋转,镜像Revit实体(含美国AU的故事)
- Building Coder(Revit 二次开发)- 关于楼板边界的重新思考
- 编程如何修改Revit族类型名称
- 修改类名小工具(含源代码)
- openssl编程轻松入门(含完整示例)
- openssl编程轻松入门(含完整示例)
- openssl编程轻松入门(含完整示例)
- Building Coder(Revit 二次开发)- 图形化显示区域边界
- socket 编程入门教程(一)TCP server 端:8、本章的完整源代码
- socket 编程入门教程(一)TCP server 端:8、本章的完整源代码
- Revit开发之参数的修改实例
- Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)
- 纯C语言求点集的凸包程序(含边界提取)
- 微软的SQLHelper类(含完整中文注释)
- Dapper的完整扩展(含Nunit单元测试)
- Java程序员集合框架面试题
- 文本比较算法Ⅰ——LD算法
- 创建跨浏览器访问的 XMLHttpRequest 对象
- 代码问题
- java io操作
- Revit编程修改板的边界(含完整源代码)
- 一分钟先生: 程序员面试真经
- javascript innerHTML、outerHTML、innerText、outerText的区别
- 负载均衡 lvs dr 私网配置
- 网络通信的一些知识
- android 开机启动adb属性
- .NET高级调试(奋斗的小鸟)_PDF 电子书
- IOS 调用本地拍照功能
- 关于Java日志框架应用总结