Revit二次開發-FamilyCreate.NewBlend創建融合失敗的對策

先列出創建融合的方法:

/// <summary>
        /// 創建融合體
        /// </summary>
        /// <param name="familyDoc">族文檔</param>
        /// <param name="sketchPlaneNormal">草圖平面法向量</param>
        /// <param name="sketchPlaneorigin">草圖原點</param>
        /// <param name="topProfile">頂部輪廓線</param>
        /// <param name="baseProfile">底部輪廓線</param>
        /// <returns></returns>
        public static Blend CreateBlend(Document familyDoc, XYZ sketchPlaneNormal, XYZ sketchPlaneorigin, CurveArray topProfile, CurveArray baseProfile)
        {
            Plane geometryPlane = Plane.CreateByNormalAndOrigin(sketchPlaneNormal, sketchPlaneorigin);
            if (geometryPlane == null)
            {
                return null;
            }
            SketchPlane plane = SketchPlane.Create(familyDoc, geometryPlane);

            Blend blend = familyDoc.FamilyCreate.NewBlend(true, topProfile, baseProfile, plane);
            return blend;
        }

 

調用如下:

using (Transaction t = new Transaction(doc))
{
    t.Start("創建融合體");
    var blend = CreateBlend(familyDoc, XYZ.BasisZ, XYZ.Zero, topArry, baseArry);
    t.Commit();
}

以上調用代碼中的topArry, baseArry分別是頂部和底部的輪廓線。

 

就這麼簡單的一個方法,讓我堵了兩天……

具體情況是這樣的:

現在有個功能,要求我根據用戶畫的一個閉合的模型線框自動生成兩層模型並保存成一個族文件然後載入這個族讓用戶自己佈置。

 

用戶畫的模型線很容易取到,但是畫出來的形狀是不規則的,這樣就導致一些問題:

1、模型線座標是項目文檔中的座標,而我在族文檔中需要把座標以原點爲中心轉換,否則佈置出來的族實例會偏離佈置點

2、第一層模型是跟用戶畫的模型線一樣,直接用拉伸生成就行,但是第二層需要讓用戶自定義底面和頂面,只能用融合生成

 

小問題就不說了,直接說以上兩個問題怎麼解決的吧:

1、原點問題,這個問題我是取用戶所畫模型線中的四個最值座標,也就是最大X、最小X、最大Y和最小Y,用這四個點組成兩條線交叉來獲得最接近的中心點,然後用這個中心點在族文件中計算模型與原點的位置的

2、融合問題,因爲只有一份閉合的模型線列表,我要根據這個模型線來獲取三個平面的輪廓線,分別是第一層拉伸體的輪廓線、第二層融合體底層的輪廓線和頂層的輪廓線。

如果直接用偏移在一個模型線上操作的話,會導致輪廓線的點丟失的問題。

最終我只能把輪廓線克隆了兩份,然後再分別生成兩份模型線,分別進行偏移。

原本的那份輪廓線作爲第一層拉伸體的輪廓線,克隆的兩份則分別作爲第二層融合體的底層和頂層輪廓線使用。

這裏需要注意的是,在創建模型線的時候,融合體頂層的模型線需要設置Z軸,也就是融合體的高度,創建模型線時所用的平面的Z軸也要設置,跟融合體的高度一致,這樣最後調用創建融合體的方法的時候才能正常生成。

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