完整项目代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.ApplicationServices; //Application的引用namespace FamilyAPI
{[TransactionAttribute(TransactionMode.Manual)]public class Class1 : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){string rftPath = @"C:\ProgramData\Autodesk\RVT 2018\Family Templates\Chinese\公制柱.rft";UIApplication uiapp = commandData.Application;Application app = uiapp.Application;UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;Document faDoc = app.NewFamilyDocument(rftPath);//创建族文件Transaction trans = new Transaction(faDoc, "创建族");//创建事务trans.Start();FamilyManager manager = faDoc.FamilyManager;FamilyParameter mfp = manager.AddParameter("材质", BuiltInParameterGroup.PG_MATERIALS, ParameterType.Material, false);//创建材质CurveArrArray arry = GetCurve();SketchPlane skplane = GetSketchPlane(faDoc);Extrusion extruction = faDoc.FamilyCreate.NewExtrusion(true, arry, skplane, 4000 / 304.8);faDoc.Regenerate();Reference topFaceRef = null;Options opt = new Options();opt.ComputeReferences = true;opt.DetailLevel = ViewDetailLevel.Fine;GeometryElement gelm = extruction.get_Geometry(opt);foreach(GeometryObject gobj in gelm){if(gobj is Solid){Solid s = gobj as Solid;foreach(Face face in s.Faces){if (face.ComputeNormal(new UV()).IsAlmostEqualTo(new XYZ(0, 0, 1))){topFaceRef = face.Reference;}}}}View v = GetView(faDoc);Reference r = GetTopLevel(faDoc);Dimension d = faDoc.FamilyCreate.NewAlignment(v, r, topFaceRef);d.IsLocked = true;faDoc.Regenerate();Parameter p = extruction.get_Parameter(BuiltInParameter.MATERIAL_ID_PARAM);manager.AssociateElementParameterToFamilyParameter(p, mfp);trans.Commit();Family fa = faDoc.LoadFamily(doc);faDoc.Close(false);trans = new Transaction(doc, "创建柱");trans.Start();fa.Name = "我的柱子";trans.Commit();return Result.Succeeded;}private Reference GetTopLevel(Document doc){FilteredElementCollector temc = new FilteredElementCollector(doc);temc.OfClass(typeof(Level));Level lvl = temc.First(m => m.Name== "高于参照标高") as Level;return new Reference(lvl);}private View GetView(Document doc){FilteredElementCollector viewFilter = new FilteredElementCollector(doc);viewFilter.OfClass(typeof(View));View v = viewFilter.First(m => m.Name == "前") as View;return v;}private SketchPlane GetSketchPlane(Document doc){FilteredElementCollector temc = new FilteredElementCollector(doc);temc.OfClass(typeof(SketchPlane));SketchPlane sketchPlane = temc.First(m => m.Name == "低于参照标高") as SketchPlane;return sketchPlane;}private CurveArrArray GetCurve(){double len = 300 / 304.8;//对英制单位进行转换//创建4个点XYZ p1 = new XYZ(-len, -len, 0);XYZ p2 = new XYZ(len, -len, 0);XYZ p3 = new XYZ(len, len, 0);XYZ p4 = new XYZ(-len, len, 0);//创建闭合曲线Line l1 = Line.CreateBound(p1, p2);Line l2 = Line.CreateBound(p2, p3);Line l3 = Line.CreateBound(p3, p4);Line l4 = Line.CreateBound(p4, p1);CurveArrArray ary = new CurveArrArray();CurveArray arry = new CurveArray();arry.Append(l1);arry.Append(l2);arry.Append(l3);arry.Append(l4);ary.Append(arry);return ary;}}
}

参考文献:

周婧祎《Autodesk Revit 2016二次开发入门教程》

[Revit二次开发] 创建一个柱的族相关推荐

  1. Revit二次开发-创建IURibbon中使用相对地址

    目录 前言 一.创建DLL文件 二.按钮类编写(UIRibbon) 1.程序集的引用 2.代码编写 3.完整代码 三.dll文件和addin文件的使用 四.最终效果 前言   我们在进行二次开发的时候 ...

  2. revit二次开发-创建族

    通过文件路径载入族 并点击任意一点创建实例 代码如下: using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk ...

  3. 【Revit二次开发】链接模型坐标系/族坐标系与模型坐标系转换

    前因:因做管线分布时,参照线选择Revit链接文件中的构件(墙,梁,柱,管等)后,调整的管距离参照线的距离不对,经测试是坐标系不同导致.查了很多资料,故总结如下 Revit中坐标系有哪几种(原文链接: ...

  4. #Revit二次开发# 创建剖面视图

    设置box的min和max只是设置box的范围大小.其中min和max的xyz方向的大小实际指的基于剖面视图坐标系.Box的原点和min,max可以确定位置关系:box的原点决定创建的剖面视图的原点. ...

  5. [Revit二次开发] 创建剖面并将视图切换至剖面

    前言 在Revit建模过程及后期出图的时候都有需要用到剖面,然而每次我们都通过手动去创建剖面再去对剖面视图进行调整就会显得很麻烦,工作量也是相当的大. 如果我们通过使用RevitAPI只需要简单的代码 ...

  6. Revit二次开发“创建组遍历组Group”

    group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manu ...

  7. revit二次开发 创建图纸图框,视图放到图框中心点位置

    创建图纸 /// <summary>/// 创建图纸/// </summary>private void CreateViewSheet2(){FilteredElementC ...

  8. revit二次开发 创建管道三通,管道四通。两根管、三根管、四根管

    创建单跟水管 /// <summary>/// 创建水管Pipe/// </summary>/// <returns></returns>public ...

  9. revit二次开发 导出结构柱三角面出现的特殊情况

    导出弯头的时候,正常的流程如下: OnElementBegin OnInstanceBegin OnFaceBegin OnPolymesh OnFaceEnd OnInstanceEnd OnEle ...

最新文章

  1. SpringMVC怎么获取前台传来的数组
  2. 使用自定义的按钮替换默认的input type='file'
  3. selenuim自动化爬取汽车在线谷米爱车网车辆GPS数据爬虫
  4. 作业帮口算批改怎么开 作业帮口算批改如何用
  5. Stooge排序与Bogo排序算法
  6. 谈谈OAB离线地址簿无法更新问题?(服务器是Exchange 2007和Exchange 2010)
  7. Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
  8. bo耳机h5使用说明_五分钟了解Bamp;O耳机音箱能不能买
  9. python调用微信客户端_Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例...
  10. 004 ZeroMQ PUB XSUB-XPUB SUB模式
  11. 优质软文怎么写----皆义 网途
  12. Hibernate框架学习1
  13. 推荐 : 你想用深度学习谱写自己的音乐吗?这篇指南来帮助你!(附代码)...
  14. python实现-用随机森林填补缺失值、均值填充0填充的比较
  15. Packetdrill(网络协议测试工具)
  16. android刷机知识大全,安卓主流机型刷机基础科普 教你刷机不求人
  17. RRT(Rapidly-exploring Randomized Trees)算法学习笔记
  18. CSS 8 品优购项目
  19. pyserial 全双工通信
  20. phpstudy端口冲突怎么解决

热门文章

  1. 计算机网络的发展过程可划分为,计算机网络的发展可划分为几个阶段
  2. selenium 模拟鼠标操作
  3. 开企业邮箱需要服务器么,企业邮箱一定要虚拟主机吗
  4. 实型数据,与字符型数据
  5. Apk脱壳之—脱掉“360加固”的壳
  6. 重庆邮电大学计算机科学与技术调剂,重庆邮电大学2019年接收硕士研究生调剂公告...
  7. 屏幕录制下载安装?这3个软件,亲测好用
  8. PowerShell 远程管理之启用和执行命令
  9. mac连接终端吐血推荐termius
  10. kali/debian使用dnsmasq搭建自己的本地dns服务器