由于Revit的版本问题,在网上找的生成墙图元的代码,在我机器上的Revit 2016中编译不能通过,通过多次调试,终于找到在revit 2016中使用API生成墙图元的代码,现在贴出来。

下面的代码在Revit 2016 + VS2013的环境下通过。

class CreateWall : IExternalCommand
{
public static Document RevitDoc;
public static Autodesk.Revit.ApplicationServices.Application RevitApp;
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,
ref string message, Autodesk.Revit.DB.ElementSet elements)
{
RevitApp = commandData.Application.Application;
var uiDoc = commandData.Application.ActiveUIDocument;
if (uiDoc == null)
{
message = "Please open a document";
return Result.Failed;
} RevitDoc = commandData.Application.ActiveUIDocument.Document;
var uiSel = commandData.Application.ActiveUIDocument.Selection; Transaction transaction = new Transaction(RevitDoc, "TestScript.CreateNewInstanceWithNewType");
transaction.Start();
try
{
var typeFilter = new ElementClassFilter(typeof(WallType));
FilteredElementCollector wallTypes = new FilteredElementCollector(RevitDoc);
wallTypes = wallTypes.WherePasses(typeFilter);
WallType walltype = null;
foreach (WallType wallType in wallTypes)
{
walltype = wallType;
break;
}
if (walltype != null)
{
//创建新的墙类型,使用Duplicate方法
var newtype = walltype.Duplicate(walltype.Name + "_new"); //可以在这里修改墙类型的参数,例如修改吸收率
var para = walltype.get_Parameter(BuiltInParameter.ANALYTICAL_ABSORPTANCE);
if (para != null && para.StorageType == StorageType.Double && para.IsReadOnly == false)
{
para.Set(2.0);
} //找到一个标高
Level level = null;
var levelFilter = new ElementClassFilter(typeof(Level));
FilteredElementCollector levels = new FilteredElementCollector(RevitDoc);
levels = levels.WherePasses(levelFilter);
foreach (Level element in levels)
{
level = element;
break;
} //创建墙
var wall = Wall.Create(RevitDoc, Line.CreateBound(new XYZ(0, 0, 0), new XYZ(10, 0, 0)),
newtype.Id, level.Id, 20, 0, false, false);
TaskDialog.Show("wall creation", "wall created, id = " + wall.Id);
}
transaction.Commit();
}
catch (Exception ex)
{
message = ex.ToString();
transaction.RollBack();
return Result.Failed;
} return Result.Succeeded;
}
}

  

revit API 生成墙图元的更多相关文章

  1. Revit API创建墙的保温层修改墙厚度

    start [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)]  / ;         ; ...

  2. Revit api 创建楼梯图元

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Revit API 加载族并生成实例图元

    在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也 ...

  4. 【Revit API】梁构件支座检查算法

    一.前言         应该是第二次写关于Revit API的博文了.虽然在BIM企业中工作,从事桌面BIM软件开发,但是我是不怎么喜欢写Revit API相关的代码.平时更多的是在写界面展示,架构 ...

  5. 利用Java API生成50到100之间的随机数

    利用Java API生成50到100之间的随机数 /** * */ package com.you.demo; import java.util.Random; /** * @author Admin ...

  6. [原创]推荐一些在线API生成工具

    [原创]推荐一些在线API生成工具 最近发现Api文档维护是个大体力活,版本控制文档统一化特别麻烦,寻思着这个怎么处理,经高人指点开源有一些工具不错,具体如下: 1.Swagger   http:// ...

  7. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  8. Revit API 操作共享参数和项目参数

    1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...

  9. Revit API射线法读取空间中相交的元素

    Revit API提供根据射线来寻找经过的元素.方法是固定模式,没什么好说.关键代码:doc.FindReferencesWithContextByDirection(ptStart, (ptEnd  ...

随机推荐

  1. hdu6405Make ZYB Happy 广义sam

    题意:给出n(n<=10000)个字符串S[1~n],每个S[i]有权值val[i],随机等概率造一个由小写字母构成的字符串T,Sum = 所有含有子串T的S[i]的val[i]之积,求Sum的 ...

  2. 使用与不使用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  3. HDOJ1003

    #include<iostream> using namespace std; int main() { ],t=,m; cin >> n; while(n--) { cin ...

  4. form数据请求参数格式

    请求后台参数格式问题 当请求后台传递参数时,有多中类型,而每一种都需要前后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究 数据 后台需要的数据 form表单 嵌套数据,第二层 ...

  5. js实现个链表吧

    存储多个元素,最常用的数据结构是数组.但是数组有个一缺点,从数组中添加或移除项的成本很高,因为需要移动元素.链表也可以存储有序的元素集合,但是和数组不同,链表中的元素在内存中不是连续放置的.每个元素存 ...

  6. JAVA并行程序基础

    JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...

  7. linux create a process

    When the system starts up it is running in kernel mode and there is, in a sense, only one process, t ...

  8. CUDA ---- Dynamic Parallelism

    Dynamic Parallelism 到目前为止,所有kernel都是在host端调用,GPU的工作完全在CPU的控制下.CUDA Dynamic Parallelism允许GPU kernel在d ...

  9. git add && git add -u && git add -A

    git add将当前工作目录中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步.可以递归添加,即如果后面跟的是一个目录作为参数,则会递 ...

  10. nwjs 实现的 分块上传

    1.先上核心工具类/** * Created by Administrator on 2017/6/12. */let fs = require("fs");/** * Creat ...