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.Attributes;
using Autodesk.Revit.ApplicationServices; namespace CreateFamily
{
[Transaction(TransactionMode.Manual)]
public class Class1:IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
string rftPath = @"C:\ProgramData\Autodesk\RVT 2016\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, "Create Family");
trans.Start();
FamilyManager manager = faDoc.FamilyManager;
//添加材质参数
FamilyParameter mfp = manager.AddParameter("材质", BuiltInParameterGroup.PG_MATERIALS, ParameterType.Material, false); //创建拉伸
CurveArrArray arry = GetCurves();
SketchPlane skplane = GetSketchPlane(faDoc);
Extrusion extrusion = faDoc.FamilyCreate.NewExtrusion(true, arry, skplane, / 304.8);
faDoc.Regenerate(); //创建约束
Reference topFaceRef = null;
Options opt = new Options();
opt.ComputeReferences = true;
opt.DetailLevel = ViewDetailLevel.Fine;
GeometryElement gelm = extrusion.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(, , )))
{
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 = extrusion.get_Parameter(BuiltInParameter.MATERIAL_ID_PARAM);
manager.AssociateElementParameterToFamilyParameter(p, mfp); trans.Commit(); Family fa = faDoc.LoadFamily(doc);
faDoc.Close(false);
trans = new Transaction(doc, "CreateColumn");
trans.Start();
fa.Name = "我的柱";
trans.Commit();
return Result.Succeeded;
} private CurveArrArray GetCurves()
{
double len = / 304.8; XYZ p1 = new XYZ(-len, -len, );
XYZ p2 = new XYZ(len, -len, );
XYZ p3 = new XYZ(len, len, );
XYZ p4 = new XYZ(-len, len, ); 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;
} 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 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 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);
}
}
}

Revit api 创建族并加载到当前项目的更多相关文章

  1. [MISSAJJ原创]cell内 通过SDWebImage自定义创建动态菊花加载指示器

    最后更新已经放到了github上了 MISSAJJ自己写的一个基于SDWebImage自定义的管理网络图片加载的工具类(普通图片加载,渐现Alpha图片加载,菊花Indicator动画加载) 经常在项 ...

  2. ArcGIS API for Silverlight中加载Google地形图(瓦片图)

    原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS ...

  3. arcgis api for JavaScript _加载三维图层(scene layer)

    arcgis api for JavaScript _加载三维图层(scene layer) arcgis api for JavaScript  4.x 版本增加对三维的支持. 关于三维图层(sce ...

  4. jdbc.properties不能加载到tomcat项目下面

    javaweb项目的一个坑,每次重启tomcat都不能将项目中的jdbc.properties文件加载到tomcat项目对应的classes目录下面,得手动粘贴到该目录下.

  5. Revit手工创建族(转)

    http://www.cnblogs.com/greatverve/p/revit-family.html 手工创建族 1.画两个参考平面. 图3001 2.点击族类型,添加参数. 图3002,300 ...

  6. Revit手工创建族

    手工创建族 1.画两个参考平面. 图3001 2.点击族类型,添加参数. 图3002,3003 3.添加类型,为类型赋值. 3004 4.创建拉伸截面,完成后,可以三维查看. 3005 5.创建对齐, ...

  7. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  8. javascript动态创建script标签,加载完成后调用回调

    代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('scri ...

  9. xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

    代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView ...

随机推荐

  1. HDU 2063 (二分图最大匹配)

    RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩 ...

  2. 扩展HtmlHelper类实现Mvc4分页

    1.扩展HtmlHelper类方法Pager public static HtmlString Pager(this HtmlHelper htmlHelper, int currentPage, i ...

  3. 字典和json 的区别 和转换

    前言:字典和json非常像.接下来比较一下两者的异同 先看一下字典的写法: a = {', ', ' } 再看一下json的写法: { "studentInfo": { " ...

  4. Delphi 10.3实现Android App的动态权限申请

    Delphi 10.3 RIO发布近两个月,针对Google Play的要求,完美实现了对Android 8的支持,即对Android API Level 26的支持.这支持当中,最主要的得算是动态申 ...

  5. 并行【parallel】和并发【concurrency】线程是并发还是并行,进程是并发还是并行

    线程是并发,进程是并行:进程之间相互独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源. 并行,同一时刻多个任务同时在运行. 并发,在同一时间内隔内多个任务都在运行,但是都不会在同一时刻同 ...

  6. lintcode 刷题 by python 部分链表题总结(2)

    本篇博客对最近做的链表的算法题做个简单的小结,主要描述题目和提供解题思路,具体代码见我的 github:https://github.com/MUSK1881/lintcode-by-python 3 ...

  7. Ubuntu Core 网络配置

    /********************************************************************************* * Ubuntu Core 网络配 ...

  8. 20155219实践题目实现od命令

    实践题目 编写MyOD.c 用myod XXX实现Linux下od -tx -tc XXX的功能 od的功能: od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显 ...

  9. 20155219 2016-2017-2《Java程序设计》课程总结

    20155219 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:做中学深入探讨 预备作业3:虚拟机的安装与学习 ...

  10. P1005 矩阵取数游戏(动态规划+高精度)

    题目链接:传送门 题目大意: 给定长度为m的数列aj,每次从两端取一个数,得到2k * aj的价值(k为当前的次数,从1开始到m),总共有n行这样的数列,求最大价值总和. 1 ≤ n, m ≤ 80, ...