1. 程式人生 > >Revit二次開發----分割族

Revit二次開發----分割族

**如有不明白,請qq254033230詢問。**

其實在revit裡是不存在分割族的概念。

對於基於線形的族,截面沿線都是一樣,要想達到分割的狀態,只需要把族基於線的那條線變短,然後再在分割點複製一個新的族即可。

過程是先獲得線的均分點,然後把族的線縮短,接著再複製族,即可變成均分的效果。主要方法見程式碼:

private void DevideFamilyInstance(FamilyInstance famIns,int n, Document revitDoc)
        {
            LocationCurve locationCurve = famIns.Location as LocationCurve;
            XYZ stratPoint = locationCurve.Curve.GetEndPoint(0);
            XYZ endPoint = locationCurve.Curve.GetEndPoint(1);

            IList<XYZ> devidePoint = InsertPoint(stratPoint, endPoint,n);

            Transaction transaction = new Transaction(revitDoc);
            transaction.Start("將族複製到相應位置");
            locationCurve.Curve = Line.CreateBound(stratPoint, devidePoint[0]);
            List<ElementId> list = new List<ElementId>();
            list.Add(famIns.Id);
            ICollection<ElementId> elementIds = list;
            for (int j=1;j<n;j++)
            {
                XYZ tanslation = new XYZ(devidePoint[j - 1].X - stratPoint.X, devidePoint[j - 1].Y - stratPoint.Y, devidePoint[j - 1].Z - stratPoint.Z);     
                ElementTransformUtils.CopyElements(revitDoc, elementIds, tanslation);
                
            }
            transaction.Commit();


        }
        private List<XYZ> InsertPoint(XYZ stratPoint, XYZ endPoint,int n)
        {
            List<XYZ> listPoint = new List<XYZ>();
            double x, y, z;
            for(int i=1;i<n;i++)
            {
                x = stratPoint.X+(endPoint.X- stratPoint.X)*i/n;
                y = stratPoint.Y + (endPoint.Y - stratPoint.Y) * i / n;
                z= stratPoint.Z + (endPoint.Z - stratPoint.Z) * i / n;
                XYZ point = new XYZ(x,y,z);
                listPoint.Add(point);
            }

相關推薦

Revit開發----分割

**如有不明白,請qq254033230詢問。** 其實在revit裡是不存在分割族的概念。 對於基於線形的族,截面沿線都是一樣,要想達到分割的狀態,只需要把族基於線的那條線變短,然後再在分割點複製一個新的族即可。 過程是先獲得線的均分點,然後把族的線縮短,接著再複製族

Revit開發--設定型別引數

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

revit 開發之基於獲得實例

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

Revit開發之載入

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

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

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

Revit開發--Hello World

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

踏上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開發之 自定義選項卡排在最前端

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

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

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

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

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

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開發--為管道新增標註

程式碼如下: public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uiDoc = comman