Dynamo_參數化造型3

 

之前看見過一些設計是利用格柵天花的多個縫隙填充成一個品牌LOGO的,忽然有一個想法想用圖片生成這種格柵內的造型,然而功力不夠,按照思路做出來的東西和想象的相差還是有點大,這裏還是把這次的失敗記錄下來。

演示

 

思路

開始思路是將圖片讀取進Dynamo,通過Dynamo獲取圖片的明度信息(使用的圖片LOGO爲白色,背景爲黑色),結合圖片的尺寸,在有明度的位置創建一系列的座標點,然後再通過點生成面,面生成體,最後將LOGO和格柵做一個布爾差集,就可以獲得LOGO的幾何。

實際操作的時候遇到一些問題,首先是Dynamo(2.0.3版本)中沒有節點可以取得插入圖片的位置,於是需要使用Python調用一下API,識別圖片的BoundingBox獲取位置。然後比較棘手的是獲得點集後,我本想用ConvexHull節點取外邊線的,做到這步的時候才驚醒ConvexHull只能求凸包,取不了凹型的外邊緣,翻了一下沒有其他合適的節點,網上查了一些資料後發現好像點集生成凹外邊緣線並沒有這麼簡單,於是改用創建立方體的方法將LOGO生成出來,實際效果感覺不是太好,不規則的地方太多,看來要完美解決的話還是需要抽時間補充一下圖形學的知識了。

節點解析

節點總覽

讀取體量格柵的幾何

格柵使用了體量的方法創建,於是幾何提取到Dynamo有點繞,需要將項目裏的格柵族與體量面做一個相交檢測,過濾出目標格柵幾何。

獲得格柵幾何後,還需要提取出格柵天花的位置及厚度,用作LOGO的生成。

獲取圖片信息

圖片需要取得圖片路徑、源圖片尺寸、圖片實例尺寸、圖片實例的位置、像素明度這幾個信息。

圖片路徑、源圖片尺寸、圖片實例尺寸這些直接通過類型參數或者實例參數讀取即可,這些信息是將圖像讀進Dynamo或者是後面生成點集的必要數據;

圖片實例的位置沒有節點可以直接獲得,這裏使用了PythonScript調用了Revit的API,通過讀取實例的BoundingBox,取得MinPoint,用這個點作爲LOGO的建模基準;

像素明度通過節點Color.Brightness獲取即可,獲得的列表還需要做一次倒序,要不然生成的幾何是倒過來的。

PythonScript節點代碼

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

import clr

# 導入 RevitAPI 和 RevitAPIUI
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *

# 導入幾何體轉換和元素轉換方法
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

# 導入 DocumentManager 和 TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

# 取得文檔和程序
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

imageInstance = UnwrapElement(IN[0])

box = imageInstance.get_BoundingBox(doc.GetElement(imageInstance.OwnerViewId))

OUT = Autodesk.Revit.DB.Point.Create(Autodesk.Revit.DB.XYZ(box.Min.X,box.Min.Y,box.Min.Z)).ToProtoType()

生成位置集合

這裏邏輯就是判斷像素明度是否大於0,過濾出大於0的列表索引,然後去空,構造出行列的索引列表,再結合圖像尺寸,就可以生成有明度的XY座標位置集合。

生成LOGO

剩下的就比較簡單了,通過座標生成點集合,再生成立方體,將立方體合併成一個幾何後與格柵幾何做布爾差集,就能獲得LOGO的幾何。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章