生成するためのパイプラインは、二次肘の基本的な開発の唯一のチュートリアルの例を見つけたとき、私は3ウェイおよび4ウェイの生成例を追加します。
最も簡単な曲がりの生成、本はチュートリアルがあり、低曲げ角度の要件を生成します。
Autodesk.Revit.UI.Selectionを使用しました。
Autodesk.Revit.Attributesを使用しました。
Autodesk.Revit.DBを使用しました。
Autodesk.Revit.UIを使用しました。
[トランザクション(TransactionMode.Manual)]
クラスNewElbow:IExternalCommand
{
公共の結果(ExternalCommandData commandData、REF文字列メッセージ、ELEMENTSET要素)を実行
{
のUIApplication uiApp = commandData.Application。
文書ドキュメント= uiApp.ActiveUIDocument.Document。
選択SEL = uiApp.ActiveUIDocument.Selection。
// 2本のチューブを選択し
、VAR参照編1 = sel.PickObject(ObjectType.Elementは、 "最初のパイプを選択してください")
MEPCurve AS MEPCurve duct1 = doc.GetElement(参照編1)を、
VAR参考2 = sel.PickObject(ObjectType.Element、 "第二のパイプを選択");
MEPCurve duct2 = doc.GetElement MEPCurve AS(参考2)。
//弯头
ConnectTwoDuctsWithElbow(DOC、duct1、duct2)。
Result.Succeededを返します。
}
/// <要約>
///连接管道
/// </要約>
/// <PARAM NAME = "DOC"> </ PARAM>
/// <PARAM NAME = "duct1"> </ PARAM>
/ // <PARAM NAME = "duct2"> </ PARAM>
パブリック静的ボイドConnectTwoDuctsWithElbow(文書DOC、MEPCurve duct1、MEPCurve duct2)
{
ダブルminDistance = double.MaxValue。
コネクタコネクタ1、コネクタ2。
コネクタ1 =コネクタ2 = NULL;
foreachの(duct1.ConnectorManager.ConnectorsにおけるコネクタCON1)
{
foreachの(duct2.ConnectorManager.ConnectorsにおけるコネクタCON2)
{
VARのDIS = con1.Origin.DistanceTo(con2.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
コネクタ1 = CON1;
コネクタ2 = CON2。
}
}
}
もし(!コネクタ1 = NULL &&コネクタ2 = NULL)
{
使用して(トランザクションTRAN =新しいトランザクション(DOC))
{
tran.Start( "1033067630");
VaRの肘= doc.Create.NewElbowFitting(コネクタ1、コネクタ2)。
tran.Commit();
}
}
}
}
角度を注意することが、最も重要な3つのことを、三方を取りました!!アングル!!アングル!!、第一の管の第二のチューブに垂直に1度を超えないようにしてください!非常に厳しいです!
プライマリとセカンダリのための問題があります。以下のように三方ボール弁絶縁以下のプロトコルを用いて要求されます
[トランザクション(TransactionMode.Manual)]
クラスNewTeeFitting:IExternalCommand
{
公共の結果は実行(ExternalCommandData commandData、REF文字列メッセージ、ELEMENTSET要素)
{
UIApplication uiApp = commandData.Application。
文書ドキュメント= uiApp.ActiveUIDocument.Document。
選択SEL = uiApp.ActiveUIDocument.Selection。
// 2本のパイプ選び
VAR参照編1 = sel.PickObject(ObjectType.Elementは、 "最初のパイプを選択してください");
MEPCurve AS MEPCurve duct1 = doc.GetElement(参照編1)を、
VAR参考2 = sel.PickObject(ObjectType.Element、 "第二のパイプを選択");
MEPCurve duct2 = doc.GetElement MEPCurve AS(参考2)。
曲線curve1 .Curve =(LocationCurveとしてdoc.GetElement(参照編).Location)。
曲線curve2 .Curve =(LocationCurveとしてdoc.GetElement(参考2).Location)。
ductList = GetMainDuct(duct1、duct2)でした。
MEPCurve MainDuct = ductList [0]; //メインパイプ
MEPCurve LessDuct = ductList [1]; //マイナーパイプ
MEPCurve duct3 = NULL; //メインパイプ
IntersectionResultArray intersectPoint =新しいIntersectionResultArray();
VAR X = curve1.Intersect(intersectPointアウトcurve2)。
もし(x == SetComparisonResult.Overlap)
{
使用して(トランザクションTRAN =新しいトランザクション(DOC))
{
tran.Start( "1033067630");
VAR OrginPoint = intersectPoint.get_Item(0).XYZPoint。
VAR ELEMENTID = PlumbingUtils.BreakCurve(DOC、MainDuct.Id、OrginPoint)。
MEPCurveとしてduct3 = doc.GetElement(ELEMENTID)。
tran.Commit();
}
}
ConnectTwoDuctsWithElbow(DOC、MainDuct、duct3、LessDuct)。
Result.Succeededを返します。
}
/// <要約>
///区分主要管道与次要管道
/// </要約>
/// <PARAM NAME = "duct1"> </ param>の
/// <PARAM NAME = "duct2"> < / PARAM>
/// <戻る> </戻り>
パブリック静的リスト<MEPCurve> GetMainDuct(MEPCurve duct1、MEPCurve duct2)
{
リスト<MEPCurve> mEPCurves =新しいリスト<MEPCurve>();
曲線curve1 .Curve =(LocationCurveとしてduct1.Location)。
曲線curve2 .Curve =(LocationCurveとしてduct2.Location)。
一覧<ダブル> disList =新しいリスト<ダブル>();
ダブルDIS = double.MaxValue。
XYZ pointA1 = curve1.GetEndPoint(0)。
XYZ pointA2 = curve1.GetEndPoint(1)。
XYZ pointB1 = curve2.GetEndPoint(0)。
XYZ pointB2 = curve2.GetEndPoint(1)。
VAR distance1 = curve2.Distance(pointA1)。
VAR distance2 = curve2.Distance(pointA2)。
VAR distance3 = curve1.Distance(pointB1)。
VAR distance4 = curve1.Distance(pointB2)。
disList.Add(distance1)。
disList.Add(distance2)。
disList.Add(distance3)。
disList.Add(distance4)。
disList.Minヘイズ=();
ここで、x = disList.IndexOf(DIS)。
IF(X <2)
{
mEPCurves.Add(duct2)。
mEPCurves.Add(duct1)。
mEPCurvesを返します。
}
他
{
mEPCurves.Add(duct1)。
mEPCurves.Add(duct2)。
mEPCurvesを返します。
}
}
/// <要約>
///创建连接
/// </要約>
/// <PARAM NAME = "DOC"> </ PARAM>
/// <PARAM NAME = "duct1">主要管道1 </ PARAM >
/// <PARAM NAME = "duct2">主要管道2 </ param>の
/// <PARAM NAME = "duct3">次要管道</ param>の
公共の静的な無効ConnectTwoDuctsWithElbow(文書ドキュメント、MEPCurve duct1、MEPCurve duct2 、MEPCurve duct3)
{
ダブルminDistance = double.MaxValue。
コネクタコネクタ1、コネクタ2、connector3。
コネクタ1 =コネクタ2 = connector3 = NULL;
foreachの(duct1.ConnectorManager.ConnectorsにおけるコネクタCON1)
{
foreachの(duct2.ConnectorManager.ConnectorsにおけるコネクタCON2)
{
VARのDIS = con1.Origin.DistanceTo(con2.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
コネクタ1 = CON1;
コネクタ2 = CON2。
}
}
}
minDistance = double.MaxValue; //重置
foreachの(duct3.ConnectorManager.ConnectorsにおけるコネクタCON3)
{
VARのDIS = con3.Origin.DistanceTo(connector1.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
connector3 = CON3。
}
}
もし(!!!コネクタ1 = NULL &&コネクタ2 = NULL && connector3 = NULL)
{
使用して(トランザクションTRAN =新しいトランザクション(DOC))
{
tran.Start( "XX");
VaRの肘= doc.Create.NewTeeFitting(コネクタ1、コネクタ2、connector3)。
tran.Commit();
}
}
}
}
4問題が依然として注目すべきである、最終パスである角度、及び接続パラメータ、第一パラメータと第2の共通ライン、第三及び第四パラメータ共線(すなわち、同じライン)
[トランザクション(TransactionMode.Manual)]
クラスNewCross:IExternalCommand
{
公共の結果(ExternalCommandData commandData、REF文字列メッセージ、ELEMENTSET要素)を実行
{
MEPCurve duct3、duct4。
duct3 = duct4 = NULL;
UIApplication uiApp = commandData.Application。
文書ドキュメント= uiApp.ActiveUIDocument.Document。
選択SEL = uiApp.ActiveUIDocument.Selection。
// 2つのダクト選択
参照編1 = sel.PickObject(ObjectType.Elementは、 "第1のダクトを選択してください")VAR;
MEPCurve AS MEPCurve duct1 = doc.GetElement(参照編1)を、
VAR参考2 = sel.PickObject(ObjectType.Element、 "第2ダクトを選択");
MEPCurve duct2 = doc.GetElement MEPCurve AS(参考2)。
曲線curve1 .Curve =(LocationCurveとしてdoc.GetElement(参照編).Location)。
曲線curve2 .Curve =(LocationCurveとしてdoc.GetElement(参考2).Location)。
IntersectionResultArray intersectPoint =新しいIntersectionResultArray();
VAR X = curve1.Intersect(intersectPointアウトcurve2)。
もし(x == SetComparisonResult.Overlap)
{
使用して(トランザクションTRAN =新しいトランザクション(DOC))
{
tran.Start( "X")。
VAR OrginPoint = intersectPoint.get_Item(0).XYZPoint。
VAR elementId3 = PlumbingUtils.BreakCurve(DOC、duct1.Id、OrginPoint)。
duct3 = doc.GetElement MEPCurveとして(elementId3); // 1つのラインのduct1とduct3
VAR elementId4 = PlumbingUtils.BreakCurve(DOC、duct2.Id、OrginPoint)。
duct4 = doc.GetElement MEPCurveとして(elementId4); // 1つのラインのduct2とduct4
tran.Commit();
}
}
ConnectTwoDuctsWithElbow(DOC、duct1、duct3、duct2、duct4); //四通
Result.Succeededを返します。
}
/// <要約>
///创建连接、四通前2个共线、后2个共线
/// </要約>
/// <PARAM NAME = "DOC"> </ PARAM>
// /ます。<param name = "duct1"> </ param>の
/// <PARAM NAME = "duct2"> </ param>の
/// <PARAM NAME = "duct3"> </ param>の
公共の静的な無効ConnectTwoDuctsWithElbow(文書ドキュメント、MEPCurve duct1、MEPCurve duct2、MEPCurve duct3、MEPCurve duct4)
{
ダブルminDistance = double.MaxValue。
コネクタコネクタ1、コネクタ2、connector3、connector4。
コネクタ1 =コネクタ2 = connector3 = connector4 = NULL;
foreachの(duct1.ConnectorManager.ConnectorsにおけるコネクタCON1)
{
foreachの(duct2.ConnectorManager.ConnectorsにおけるコネクタCON2)
{
VARのDIS = con1.Origin.DistanceTo(con2.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
コネクタ1 = CON1;
コネクタ2 = CON2。
}
}
}
minDistance = double.MaxValue; //重置
foreachの(duct3.ConnectorManager.ConnectorsにおけるコネクタCON3)
{
VARのDIS = con3.Origin.DistanceTo(connector1.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
connector3 = CON3。
}
}
minDistance = double.MaxValue; //重置
foreachの(duct4.ConnectorManager.ConnectorsにおけるコネクタCON4)
{
VARのDIS = con4.Origin.DistanceTo(connector1.Origin)。
IF(DIS <minDistance)
{
minDistance = DIS。
connector4 = CON4。
}
}
もし(!!!!コネクタ1 = NULL &&コネクタ2 = NULL && connector3 = NULL && connector4 = NULL)
{
使用して(トランザクションTRAN =新しいトランザクション(DOC))
{
tran.Start( "XX");
VaRの肘= doc.Create.NewCrossFitting(コネクタ1、コネクタ2、connector3、connector4)。
tran.Commit();
}
}
}
}
関連ボーエン:三方構造思考
BQ44F-BQ45F ウェイ絶縁バルブ
Q944F-Q945F 電動ボールバルブ
Q644F-Q645F 空気圧ボールバルブ
Q44F-Q45F ステンレス鋼ボール弁
Q14F-Q15F ティーねじボールと
Q44H-Q44Y 、Q45H Q45Y-はハードボール弁をシール
Q44F- Q45F -wayシールバルブ4