1. 程式人生 > >revit二次開發中怎樣建nurbspline曲線形式的鋼筋

revit二次開發中怎樣建nurbspline曲線形式的鋼筋

revit二次開發中nurbspline曲線的表現形式實際上是一系列的直線組成的。

由於revit只支援直線或者圓曲線的鋼筋變成鋼筋。所以不能將nurbspline曲線轉成鋼筋,所以可以先將nurbspline模型線轉連續的直線,然後再轉成鋼筋即可。

其中,nurbspline模型線線轉成連續的直線的程式碼如下:

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.UI.Selection;
using Autodesk.Revit.ApplicationServices;


namespace nurb曲線轉連續的直線
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document revitDoc = commandData.Application.ActiveUIDocument.Document;  //取得文件
            Application revitApp = commandData.Application.Application;             //取得應用程式
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;   //取得當前活動文件
            


            Selection sel = uiDoc.Selection;
            Reference ref1 = sel.PickObject(ObjectType.Element, "選擇nurb模型線");
            Element elem = revitDoc.GetElement(ref1);
            ModelNurbSpline nurbSpline = elem as ModelNurbSpline;


            IList<XYZ> listPoint = new List<XYZ>();
            listPoint= nurbSpline.GeometryCurve.Tessellate();


            XYZ normal = new XYZ(0, 0, 1);
            
            using (Transaction transaction = new Transaction(revitDoc))
            {
                transaction.Start("主題");
                //在下面新增主要程式碼內容
                SketchPlane modelSketch = SketchPlane.Create(revitDoc, revitApp.Create.NewPlane(normal, XYZ.Zero));
                for (int i=0;i<listPoint.Count()-1;i++)
                {                    
                    ModelCurve modelcurve = revitDoc.Create.NewModelCurve(Line.CreateBound(listPoint[i], listPoint[i+1]), modelSketch);
                }
                revitDoc.Delete(nurbSpline.Id);




                transaction.Commit();


            }
            return Result.Succeeded;
        }
    }
}

相關推薦

Revit開發NurbSpline中各個引數的含義

摘自百度的回答,基本滿足二開需求。瞭解一下:NURBS是Non-Uniform Rational B-Splines的縮寫,是非統一有理B樣條的意思。具體解釋是:.Non-Uniform(非統一):是指一個控制頂點的影響力的範圍能夠改變。當建立一個不規則曲面的時候這一點非常有

revit開發中怎樣建nurbspline曲線形式鋼筋

revit二次開發中nurbspline曲線的表現形式實際上是一系列的直線組成的。 由於revit只支援直線或者圓曲線的鋼筋變成鋼筋。所以不能將nurbspline曲線轉成鋼筋,所以可以先將nurbspline模型線轉連續的直線,然後再轉成鋼筋即可。 其中,nurbsp

Revit開發--Hello World

man dem users att try encoding cli 引用 類庫 部署完開發環境,就要進行每次學習新的技能,必寫的Hello World。 1、打開VS開發環境,新建一個項目類庫RevitDemo。 2、修改Class1名稱為Command。 3、在引

revit 開發之基於族獲得實例

相關 space typeof cef doc 過濾 list eric category Revit並沒有直接開放基於族獲取實例元素的過濾器。不過有兩個相關的過濾器,一個是FamilySymbolFilter(ElementId familyId),可以基於族ID過濾出所

踏上Revit開發之路 2 從“HelloWorld”入手

import none 工具 環境變量 各級 style first app ati 2 從“HelloWorld”入手 在歐特克的官方網頁上有個叫《My First Plug-in Training》的項目,號稱可以讓一個完全沒有編程基礎的人照著做出一個插件來。我快速瀏覽

Revit開發 事務標簽值

sub nsa ESS 需要 ret 使用 用戶 ado 命令執行 Revit開發中,事務應用非常頻繁,所有revit API提供了用戶顯式地指定標簽值。來控制在revit的IExternalCommand中,是否使用事務,其使用的屬性為TransactionMode。 如

Revit開發 日誌文檔 JournalingMode

用戶名 bsp journal IE 操作日誌 操作 nal 所有 nbsp 在revit的操作過程中,revit會將所有的操作,生成對應的操作日誌Journal文件,此文件是在目錄: C:\Users\%用戶名%\AppData\Local\Autodesk\Revi

Revit開發 任務對話框TaskDialog

添加 方法 exp ask all 細節 truct AD 當前 對話框是revit常用的功能,可以提示revit一個命令的結果或者錯誤,其基本代碼如下“ TaskDialog mainDialog = new TaskDialog("Hello,TaskDia

Revit開發之載入族

return mes 刪除 開發 urn com tar 失敗 commit 載入族 此方法載入族無法覆蓋原有族,即若存在相同名稱的族則會載入失敗 1 Family family = null; //族 2 3 Transaction transact

Revit開發之 自定義選項卡排在最前端

引用AdWindows.dll類庫  Autodesk.Windows.RibbonControl ribbon = AutodeskWindows.ComponentManager.Ribbon;        

Revit開發——如何搭建多版本的框架,方便程式設計

       Revit基本兩年一大變。所以在做開發的時候需要做多個版本的才行。但是每個版本做一個專案又很不方便,因為很多程式碼類似,改了前面忘了後面的版本,所以很頭疼,最好能夠幾個版本共用一個類,不同版本通過預編譯來解決。這裡只說怎麼解決多版本共用一個類

Revit開發高階應用()——怎樣在Revit中使用多執行緒

在Revit中完全可以使用多執行緒,只是需要滿足一定的規則:不改變Revit的Document文件的工作都可以線上程中完成,改變Document文件的工作都需要在主執行緒中完成。 如下:不改變文件,只是在執行緒裡建立輔助的線,執行之後,絲毫不錯。 namespace RevitUseTh

Revit開發高階應用(1)——利用wcf做簡單的族庫管理

因為對應用場景不是特別明確,暫時就用wcf做一個可以上傳和下載的功能來管理族庫。 1、用WCF做服務端的上傳下載管理 首先新增上傳下載的介面: [ServiceContract] public interface IFileService { //上傳

Revit開發之單位轉換

Revit內部基本單位是英尺,如果要獲取或設定構件引數數值需要進行單位轉換,比如轉換為基本的毫米或米等單位 1.可以使用常規方式進行轉換:   1英尺等於0.3047999995367米,等於304.7999995367毫米   2.可以使用RevitA

Revit開發新增按鈕

整體結構佈局  命令類  namespace HW { [Transaction(TransactionMode.Manual)] class Cmd : IExternalCommand { public Result Ex

Revit開發基礎知識

獲取應用、文件及當前檢視資訊 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) {

Revit開發點滴記錄

線的方向問題 XYZ xyz=Line.Direction;此屬性返回的是normalized之後的向量。示例如下 Line l1 = Line.CreateBound(new XYZ(0,5,0),new XYZ(0,0,0)); Line l2 = Line.CreateB

revit開發 內建模型之放樣

/// <summary> /// 內建模型(放樣) /// </summary> private static void CreateSphereDirectShape(double MaxHeight, d

revit開發構件上色

首先給構件族建立一個材質引數,然後讓族的材質使用該引數,即可直接用引數化的過程改變材質 建立某顏色的材質 class MaterialColor { public Material materialTest;    public Document document;

Revit開發--設定族型別引數

已知載入到專案中的族Family,如何設定該族型別的引數,程式碼如下: private Family EditFamilyToSetParam(Document doc, Family family, double diameter) { try