在做專案的時候有時候會碰到建築專業與結構專業同步進行建模的情況,這時因為結構模型尚不完整,建築的牆建模的高度是標高到標高,而不是實際的板麵到板底或梁底。所以需要等到結構模型完整後再重新調整一遍。這個調整的工作雖然比較簡單,但重複性比較強,工作量也不少,於是利用二次開發做了一下優化。
具體邏輯是在牆的高度一半的位置選了幾個點,根據這些點上下檢測樓面及梁面,如果能檢測到對應的面,獲得距離換算出牆的頂部及底部偏移,然後調整牆的對應引數。
比較麻煩的地方是取點,api中好像沒有直接的方法可以獲得線上的引數點,需要自己寫一下。而且選點的時候也不能選牆路徑的兩個端點,因為這樣會導致判定過於敏感,識別到隔壁圖元的面。
示例:
**:
class modifywalloffset : iexternalcommand
//調整牆引數
if (walltopoffset.isreadonly)
else
wallbaseoffset.set(baseoffset);
}catch}}
tran.commit();
}return result.succeeded;
}} //牆過濾器
class awallselection : autodesk.revit.ui.selection.iselectionfilter
}return false;
}public bool allowreference(reference reference, xyz position)
} //使用射線法檢測距離
class raytool
referencewithcontext rwc1 = referenceintersector.findnearest(p, new xyz(0, 0, -1));
if (rwc1 != null)}}
/// /// 獲取用於作射線的點列表
///
/// 測量的牆
/// 測量的點數量
///
ilistgetrayoriginpoints(wall wall, int pointnumber)
return originpoints;
xyz pointatparameter(double parameter)
else
}return null;}}
public int returnstate
else if (topdistance > 0 && basedistance <= 0)
else if (topdistance <= 0 && basedistance > 0)
else
}
}public double topdistance
public double basedistance
}
在專案中實際使用後效果也還可以,面對比較常規的地方都沒有太大問題,但在建築出現沉降或者在一些不同樑高的梁交接的地方會出現與結構梁板相交的問題,這些地方實際是要通過編輯牆輪廓進行修正的,所以還需要考慮檢測這些相交的地方,然後對牆輪廓進行自動修正。然後還忽然想到乙個斜板斜樑的問題。嗯~坑先挖下,看什麼時候能抽出時間回來填吧。 Revit 二次開發建立牆的例項
1建立牆例項的方法一共5個過載 1 wall.create document document,ilistprofile,bool structural document 文件 profile 生成牆的定位線集合 structural 是否是結構 2 wall.create document doc...
Revit二次開發 初學
前言 由於工作需要,近期開始學習revit二次開發知識。學習的同時將學習過程與小夥伴們一起分享,希望後來的小夥伴在看到我的學習筆記的時候有所幫助。說明由於revit的版本在不斷更新中,所以我在學習revit的時候選擇了從revit自帶的幫助檔案開始學習,不同版本的revit,就看相應的help檔案。...
Revit二次開發 新增 獲取牆核心邊界資訊
建立結構層 厚度 功能 材質 ilistlayers new list 建立一條核心邊界 compoundstructurelayer layersu cethickness new compoundstructurelayer thickness,materialfunctionassignmen...