目前大部分的專案工作項目內皆有要求使用BIM模型產出圖說,相信各位先進都已很熟悉相關作業,但是總有些事情是較為繁瑣,無論專業知識如何精進也很難再加快效率的工作項目,例如創建圖紙這件事,當我們使用Revit內的創建圖紙功能時,總是要一個一個建立圖紙,圖紙編號雖然會自動累加,但視圖名稱仍需要一個一個填寫,複製貼上再修改在Revit內也不是那麼方便,當我們今天要產出非常大量的圖紙的時候,創建圖紙就變成了一個很繁雜瑣碎的事情,但是卻又不得不做,那麼是否有稍微方便或更有效率一點的做法呢?

各位先進大家好,又來到我們Dynamo小程式的分享時間,上次我們講到了弧形車道剖面視圖的創建,這次我們來學習一下圖紙的自動創建吧,關於開頭所提到的問題,我們可以使用Dynamo來讀取Excel文件內的圖紙清單或開圖計畫,並依據清單內圖號及視圖名稱,自動產生所有圖紙,雖然事前的圖紙清單也需要自行建立,但是在文書軟體內統一編輯圖號及視圖名稱仍是較為方便快速的,文章的最後會有實測時間的對照影片,就讓我們一起來看看這個小程式能夠幫助我們減少多少工作時間吧。

一、學習的事前準備

學習的事前準備跟之前的文章基本上差不多,不過Dynamo版本略有變動再請注意

  1. Revit
    基本上Revit版本只要能夠執行Dynamo即可,文內使用的模型檔為2021版的。
  2. Dynamo
    由於基本上使用原生節點,因此版本影響應該較小,不過舊版的仍有可能缺少部分原生節點,因此仍可確認一下版本,文內介紹所使用的版本為2.6.1。
  3. 學習的心
    這個其實不一定需要啦,跟著內文步驟做也可以做出堪用的程式,但是如果不是學習並了解其概念、邏輯與方法,當Revit或Dynamo版本變更而導致無法使用時,您也不知道該如何修改不是嘛,當然也是可以直接將專案委託給我們,或是委託我們協助開發程式,都歡迎與我們聯繫喔。

 

二、Dynamo實作

設計概念

本次設計主要概念是藉由讀取EXCEL內的資料,依據資料自動創建圖紙,這個概念雖然很簡單,但是各位在這裡可以了解到Revit是可以讀取外部資料的這件事情,能夠對於後續各位開發其他程式能有更多想法及思路可以選擇。

Dynamo實作

接下來我們就馬上開始Dynamo實作,各節點名稱可以直接參考圖片內的節點上方名稱,為了方便各位學習與搜尋,皆使用原始名稱,無做任何修改,直接於左側節點瀏覽器的搜尋欄輸入相同名稱即可找到該節點。

1.選擇EXCEL檔案位置並取得資料

首先我們進入Dynamo建立第一部分區域節點,在這個區域內最重要的節點為Data.ImportExcel,主要功能為從Excel內匯入資料,這個節點需要輸入4個參數,分別是file(檔案)、SheetName(工作表名稱)、ReadAsString(是否以文字讀取)及ShowExcel(是否在Excel畫面上顯示)。

首先我們來看看前面兩個參數,第1個參數File指的是檔案,我們要告訴程式使用哪一個資料檔案,因此我們使用File Path(檔案路徑)節點告訴程式檔案路徑,並使用File From Path(從路徑取得檔案)節點取得檔案後輸入第1個參數,建立好之後即可點選File Path內的瀏覽按鈕,點選節點內的瀏覽按鈕即可開啟檔案總管資料夾畫面,如下圖,找到資料後點選開啟即可。

接下來說明第2個參數SheetName指得是工作表名稱,由於我們Excel裡面可能會有很多工作表,所以我們要告訴程式要使用哪個工作表,因此我們製作一個String(字串)節點,並輸入我們資料內的工作表名稱,由於我們這邊要建置圖紙清單,因此我的工作表名稱設定為圖目錄,於是在這個節點內輸入圖目錄。

後面兩個參數ReadAsString及ShowExcel對於實作上的影響不大,不輸入也不會影響產出,不過如果各位是初學的話可以各設定一個Boolean都選擇True輸入即可。

2.資料處理

第二區域功能主要為資料處理,第一個步驟為去除標題列,由於我們在建立圖紙清單的時候,大多數都會有標題列,因此我們這邊使用List.DropItems來去除前面的資料,這個節點有兩個參數要輸入,第一個參數list由第一區域取得的Data(資料)輸入,第二個參數amount則是要告訴程式我們要去掉多少項資料,因此我們使用一個Number節點來輸入數字,如果我們標題只有一列就輸入1。

從上圖可以看到原本輸入的資料清單,第一列資料圖號與圖名在經過List.DropItems節點後被去除了。

接下來進入資料處理的第二步驟,也就是資料轉置,資料轉置也就是將我們的資料的縱向與橫向交換輸出,由於我們後續節點取得資料的方式為橫向一組,因此我們要先進行資料轉置,其資料轉置轉換方向的意思可參考下圖,將資料由黃色轉置成藍色的樣子。

有些人可能會覺得說既然程式是橫向讀取,那我們一開始把資料橫向製作不就好了,確實這樣做是可以省去程式內的節點,但是我們製作程式是為了減少我們工作負擔,提升工作效率,如果我們要為了程式簡單,而去使用一個我們平常不會使用,並且還很難使用的工作方式的話,反而有點本末倒置,平時應該不會有人把資料使用橫向的方式建置,無法使用滑鼠滾輪捲動觀看修改非常麻煩,所以我們把資料處理交給程式來做,因此這裡我們使用List.Transpose(資料轉置)這個節點,將輸入的資料轉置成橫向。

可以從上圖看到原本輸入的資料清單是圖號及圖名一組為一個清單,在經過List.Transpose(資料轉置)節點後被轉變成圖號一組清單,圖名一組清單了。

3.取得清單資料及選擇圖框

經過前面的資料處理後,我們就要來取得完成的資料並創建圖紙了,首先我們要分別取得視圖編號以及視圖名稱,因此這裡我們使用List.GetItemAtIndex節點,依據Index索引號碼取資料,這個節點需要兩個參數,分別為List以及Index,List為資料清單,從前面區域資料轉置後的清單輸入,另外一個參數Index則是需要告訴程式你想要取得哪一組清單,因此我們這邊使用一個Number節點輸入,經過前面的資料處理,我們知道第一個List是圖號,第二個List是圖名,須注意在程式邏輯內,所有的編號數字都是由0開始,所以第一個List是0號,第二個List是1號,分別在視圖編號與視圖名稱的Number節點內輸入0跟1。

在這個區域我們順便選擇一下要用的圖框,要記得先將圖框的族群匯入至專案模型內喔,我們這邊使用Family Types(族群類型)的節點來去取得專案內所有族群類型,就可以使用節點內的下拉式選單選擇我們要用的圖框,選擇完成後就完成創建圖紙前的準備了。

4.建立圖紙

創建圖紙我們使用Sheet.ByNameNumberTitleBlock這個節點,這個節點功能為依據圖紙的SheetName(圖紙名稱)、SheetNumber(圖紙編號)以及TitleBlockFamilyType(圖框類型)進行圖紙創建,因此這個節點就需要輸入這三個參數,而這三個參數分別由我們前面一個區域的資料輸入,至此我們的這個Dynamo小程式就算完成了。

三、實際操作測試

完成整個Dynamo的建立之後,只要執行Dynamo就會產出創建好的圖紙了,是不是很簡單,下面我們就來看一下Dynamo批次創建圖紙以及傳統作法上的時間差異吧。

依據測試結果使用模型內部功能創建150張圖紙大約花費39分30秒,我們從創建圖紙清單Excel再使用Dynamo批次創建150張圖紙花費的時間大約是20分08秒,減少了約49%的時間,減少了接近一半的時間,提升的效能令人驚訝,多的時間足夠各位拿來喝杯咖啡或下午茶休息一下了,雖然20分鐘對一個工項來說不算多,但是如果每一個工項都能減少這些時間,累積起來也是不少。

結語

以上就是本次分享的所有內容啦,本文採用Dynamo原生節點,並以最簡單的實作方式分享給大家,希望各位都能學會並且順利實作出來,程式有趣的地方在於同樣的節點以及代碼可以運用在不同的地方,不同的連結及編輯方式,可以創造出無數的程式,本次主要運用讀取資料以及轉換資料的節點,做出了批次創建圖紙的程式,各位先進透過這篇文章學會了讀取資料及轉換資料的做法後,也可以試著運用自己的想法及創意創造更多符合自己需求以及提升工作效率的程式。

很感謝各位先進一直以來的支持,上次的Dynamo小程式分享,迴響及反應都還不錯,才有了這次的文章,上次我們學習了自動創建弧形車道剖面,這次我們學習了批次創建圖紙,下次我們又會來分享什麼,各位是不是也很期待呢。

如同之前一樣,各位如果有其他想要了解的內容或學習的方向,希望我們介紹的,也可以私訊本公司各社交平台帳號,或在貼文下方留言,或者是E-mail至本公司,最後再次感謝各位的閱讀,如果有需要任何服務歡迎與我們聯繫。