修复bug和新增部分功能
This commit is contained in:
10
Sai.RvKits/RvMEP/ArrangeMEPCurveCmd.cs
Normal file
10
Sai.RvKits/RvMEP/ArrangeMEPCurveCmd.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Sai.RvKits.RvMEP;
|
||||
internal class ArrangeMEPCurveCmd
|
||||
{
|
||||
}
|
||||
@@ -28,37 +28,38 @@ internal class BloomConnectorCmd : ExternalCommand //根据连接件创建一根
|
||||
elemIds.Add(Document.GetElement(reference).Id);
|
||||
}
|
||||
|
||||
var pipeTypeId = ElementId.InvalidElementId;
|
||||
var cableTrayTypeId = ElementId.InvalidElementId;
|
||||
var conduitTypeId = ElementId.InvalidElementId;
|
||||
|
||||
var filteredElementCollector = new FilteredElementCollector(Document).OfClass(typeof(DuctType));
|
||||
var roundTypeId = ElementId.InvalidElementId;
|
||||
var rectangleTypeId = ElementId.InvalidElementId;
|
||||
var ovalTypeId = ElementId.InvalidElementId;
|
||||
|
||||
foreach (var element2 in filteredElementCollector)
|
||||
{
|
||||
var ductType = (DuctType)element2;
|
||||
|
||||
if (ductType.FamilyName == "圆形风管" || ductType.FamilyName.Contains("Round Duct"))
|
||||
{
|
||||
roundTypeId = ductType.Id;
|
||||
}
|
||||
else if (ductType.FamilyName == "矩形风管" || ductType.FamilyName.Contains("Rectangular Duct"))
|
||||
{
|
||||
rectangleTypeId = ductType.Id;
|
||||
}
|
||||
else if (ductType.FamilyName == "椭圆形风管" || ductType.FamilyName.Contains("Oval Duct"))
|
||||
{
|
||||
ovalTypeId = ductType.Id;
|
||||
}
|
||||
}
|
||||
var fabricationConfiguration = FabricationConfiguration.GetFabricationConfiguration(Document);
|
||||
foreach (var elemId in elemIds)
|
||||
{
|
||||
var pipeTypeId = Document.OfClass<PipeType>().FirstElementId();
|
||||
var cableTrayTypeId = Document.OfClass<CableTrayType>().FirstElementId();
|
||||
var conduitTypeId = Document.OfClass<ConduitType>().FirstElementId();
|
||||
|
||||
var filteredElementCollector = Document.OfClass<DuctType>();
|
||||
var roundTypeId = ElementId.InvalidElementId;
|
||||
var rectangleTypeId = ElementId.InvalidElementId;
|
||||
var ovalTypeId = ElementId.InvalidElementId;
|
||||
|
||||
foreach (var element2 in filteredElementCollector)
|
||||
{
|
||||
var ductType = (DuctType)element2;
|
||||
|
||||
if (ductType.FamilyName == "圆形风管" || ductType.FamilyName.Contains("Round Duct"))
|
||||
{
|
||||
roundTypeId = ductType.Id;
|
||||
}
|
||||
else if (ductType.FamilyName == "矩形风管" || ductType.FamilyName.Contains("Rectangular Duct"))
|
||||
{
|
||||
rectangleTypeId = ductType.Id;
|
||||
}
|
||||
else if (ductType.FamilyName == "椭圆形风管" || ductType.FamilyName.Contains("Oval Duct"))
|
||||
{
|
||||
ovalTypeId = ductType.Id;
|
||||
}
|
||||
}
|
||||
var fabricationConfiguration = FabricationConfiguration.GetFabricationConfiguration(Document);
|
||||
|
||||
var elem = Document.GetElement(elemId);
|
||||
if (elem.GetConnectors(true).IsEmpty)
|
||||
if (elem.GetConnectors(true).IsEmpty && elem is not FamilyInstance)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -72,7 +73,7 @@ internal class BloomConnectorCmd : ExternalCommand //根据连接件创建一根
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (conn.Domain == Domain.DomainPiping)
|
||||
if (conn.Domain == Domain.DomainPiping && connector.Owner is Pipe)
|
||||
{
|
||||
pipeTypeId = connector.Owner.GetTypeId();
|
||||
}
|
||||
@@ -112,7 +113,8 @@ internal class BloomConnectorCmd : ExternalCommand //根据连接件创建一根
|
||||
Document.Invoke(
|
||||
_ =>
|
||||
{
|
||||
foreach (Connector connector in elem.GetConnectors(true))
|
||||
var conns = elem.GetConnectors(true);
|
||||
foreach (Connector connector in conns)
|
||||
{
|
||||
Element element = null;
|
||||
if (elem.Category.Id.IntegerValue == (int)BuiltInCategory.OST_FabricationPipework)
|
||||
@@ -155,300 +157,299 @@ internal class BloomConnectorCmd : ExternalCommand //根据连接件创建一根
|
||||
connector2.Height = connector.Height;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
var extensionLength = connector.GetExtensionLength();
|
||||
var origin = connector.Origin;
|
||||
var xyz2 = origin + (extensionLength * connector.CoordinateSystem.BasisZ);
|
||||
var levelId = elem.LevelId;
|
||||
if (levelId == ElementId.InvalidElementId)
|
||||
{
|
||||
var extensionLength = connector.GetExtensionLength();
|
||||
var origin = connector.Origin;
|
||||
var xyz2 = origin + (extensionLength * connector.CoordinateSystem.BasisZ);
|
||||
var levelId = elem.LevelId;
|
||||
if (levelId == ElementId.InvalidElementId)
|
||||
var pa = elem.get_Parameter(BuiltInParameter.RBS_START_LEVEL_PARAM);
|
||||
if (pa != null)
|
||||
{
|
||||
levelId = elem.get_Parameter(BuiltInParameter.RBS_START_LEVEL_PARAM).AsElementId();
|
||||
levelId = pa.AsElementId();
|
||||
}
|
||||
|
||||
if (levelId == ElementId.InvalidElementId)
|
||||
}
|
||||
|
||||
if (levelId == ElementId.InvalidElementId)
|
||||
{
|
||||
if (elem is FamilyInstance { Host: Level } instance)
|
||||
{
|
||||
if (elem is FamilyInstance { Host: Level } instance)
|
||||
levelId = instance.Host.Id;
|
||||
}
|
||||
}
|
||||
|
||||
switch (connector.Domain)
|
||||
{
|
||||
//未定义
|
||||
case Domain.DomainUndefined:
|
||||
break;
|
||||
//风管
|
||||
case Domain.DomainHvac:
|
||||
var mechanicalSystemTypes = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(MechanicalSystemType))
|
||||
.Cast<MechanicalSystemType>();
|
||||
//风管系统类型
|
||||
var mechanicalSystem =
|
||||
connector.MEPSystem == null
|
||||
? connector.DuctSystemType switch
|
||||
{
|
||||
//送风
|
||||
DuctSystemType.SupplyAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.SupplyAir
|
||||
),
|
||||
//回风
|
||||
DuctSystemType.ReturnAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ReturnAir
|
||||
),
|
||||
//排风
|
||||
DuctSystemType.ExhaustAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ExhaustAir
|
||||
),
|
||||
_
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherAir
|
||||
)
|
||||
}
|
||||
: Document.GetElement(connector.MEPSystem.GetTypeId()) as MechanicalSystemType;
|
||||
|
||||
//if (new FilteredElementCollector(Document).OfClass(typeof(DuctType)).FirstElement() is not DuctType)
|
||||
//{
|
||||
// break;
|
||||
//}
|
||||
|
||||
//风管形状
|
||||
switch (connector.Shape)
|
||||
{
|
||||
levelId = instance.Host.Id;
|
||||
}
|
||||
}
|
||||
case ConnectorProfileType.Round:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
roundTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
|
||||
switch (connector.Domain)
|
||||
{
|
||||
case Domain.DomainUndefined:
|
||||
break;
|
||||
//风管
|
||||
case Domain.DomainHvac:
|
||||
var mechanicalSystemTypes = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(MechanicalSystemType))
|
||||
.Cast<MechanicalSystemType>();
|
||||
//风管系统类型
|
||||
var mechanicalSystem =
|
||||
connector.MEPSystem == null
|
||||
? connector.DuctSystemType switch
|
||||
{
|
||||
//送风
|
||||
DuctSystemType.SupplyAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.SupplyAir
|
||||
),
|
||||
//回风
|
||||
DuctSystemType.ReturnAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ReturnAir
|
||||
),
|
||||
//排风
|
||||
DuctSystemType.ExhaustAir
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ExhaustAir
|
||||
),
|
||||
_
|
||||
=> mechanicalSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherAir
|
||||
)
|
||||
}
|
||||
: Document.GetElement(connector.MEPSystem.GetTypeId()) as MechanicalSystemType;
|
||||
|
||||
//if (new FilteredElementCollector(Document).OfClass(typeof(DuctType)).FirstElement() is not DuctType)
|
||||
//{
|
||||
// break;
|
||||
//}
|
||||
|
||||
//风管形状
|
||||
switch (connector.Shape)
|
||||
{
|
||||
case ConnectorProfileType.Round:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
roundTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_DIAMETER_PARAM).Set(connector.Radius * 2);
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Rectangular:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
rectangleTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM).Set(connector.Width);
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM).Set(connector.Height);
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Oval:
|
||||
element = Duct.Create(Document, mechanicalSystem.Id, ovalTypeId, levelId, origin, xyz2);
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM).Set(connector.Width);
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM).Set(connector.Height);
|
||||
break;
|
||||
|
||||
default:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
roundTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
//电气
|
||||
case Domain.DomainElectrical:
|
||||
break;
|
||||
//水管
|
||||
case Domain.DomainPiping:
|
||||
var pipingSystemTypes = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(PipingSystemType))
|
||||
.Cast<PipingSystemType>();
|
||||
if (pipeTypeId == ElementId.InvalidElementId
|
||||
|
||||
)
|
||||
{
|
||||
pipeTypeId = new FilteredElementCollector(Document).OfClass(
|
||||
typeof(PipeType))
|
||||
.FirstElementId();
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_DIAMETER_PARAM).Set(connector.Radius * 2);
|
||||
break;
|
||||
}
|
||||
|
||||
var system = connector.MEPSystem;
|
||||
var pipingSystemType =
|
||||
system != null
|
||||
? Document.GetElement(system.GetTypeId()) as PipingSystemType
|
||||
: connector.PipeSystemType switch
|
||||
{
|
||||
//循环供水
|
||||
PipeSystemType.SupplyHydronic
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.SupplyHydronic
|
||||
),
|
||||
//循环回水
|
||||
PipeSystemType.ReturnHydronic
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ReturnHydronic
|
||||
),
|
||||
//卫生设备
|
||||
PipeSystemType.Sanitary
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.Sanitary
|
||||
),
|
||||
//家用热水
|
||||
PipeSystemType.DomesticHotWater
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.DomesticHotWater
|
||||
),
|
||||
//家用冷水
|
||||
PipeSystemType.DomesticColdWater
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.DomesticColdWater
|
||||
),
|
||||
//其他
|
||||
PipeSystemType.OtherPipe
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherPipe
|
||||
),
|
||||
//湿式消防系统
|
||||
PipeSystemType.FireProtectWet
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectWet
|
||||
),
|
||||
//干式消防系统
|
||||
PipeSystemType.FireProtectDry
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectDry
|
||||
),
|
||||
//预作用消防系统
|
||||
PipeSystemType.FireProtectPreaction
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectPreaction
|
||||
),
|
||||
//其他消防系统
|
||||
PipeSystemType.FireProtectOther
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectOther
|
||||
),
|
||||
//通风孔
|
||||
PipeSystemType.Vent
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.Vent
|
||||
),
|
||||
_
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherPipe
|
||||
)
|
||||
};
|
||||
element = Pipe.Create(Document, pipingSystemType.Id, pipeTypeId, levelId, origin, xyz2);
|
||||
element.get_Parameter(BuiltInParameter.RBS_PIPE_DIAMETER_PARAM).Set(connector.Radius * 2);
|
||||
case ConnectorProfileType.Rectangular:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
rectangleTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM).Set(connector.Width);
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM).Set(connector.Height);
|
||||
break;
|
||||
|
||||
break;
|
||||
//电力
|
||||
case Domain.DomainCableTrayConduit:
|
||||
if (cableTrayTypeId == ElementId.InvalidElementId)
|
||||
{
|
||||
cableTrayTypeId = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(CableTrayType))
|
||||
.FirstElementId();
|
||||
}
|
||||
if (conduitTypeId == ElementId.InvalidElementId)
|
||||
{
|
||||
conduitTypeId = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(ConduitType))
|
||||
.FirstElementId();
|
||||
}
|
||||
case ConnectorProfileType.Oval:
|
||||
element = Duct.Create(Document, mechanicalSystem.Id, ovalTypeId, levelId, origin, xyz2);
|
||||
Document.Regenerate();
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_WIDTH_PARAM).Set(connector.Width);
|
||||
element.get_Parameter(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM).Set(connector.Height);
|
||||
break;
|
||||
|
||||
|
||||
//switch (connector.ElectricalSystemType)
|
||||
//{
|
||||
// //电力
|
||||
// case ElectricalSystemType.PowerCircuit:
|
||||
|
||||
// break;
|
||||
//}
|
||||
|
||||
switch (connector.Shape)
|
||||
{
|
||||
case ConnectorProfileType.Invalid:
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Round:
|
||||
element = Conduit.Create(Document, conduitTypeId, origin, xyz2, levelId);
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Rectangular:
|
||||
element = CableTray.Create(Document, cableTrayTypeId, origin, xyz2, levelId);
|
||||
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Oval:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Document.Regenerate();
|
||||
//新建管线连接
|
||||
if (element == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var curve = element as MEPCurve;
|
||||
var manager = curve.ConnectorManager;
|
||||
var lter = manager.UnusedConnectors.ForwardIterator();
|
||||
while (lter.MoveNext())
|
||||
{
|
||||
var connect = lter.Current as Connector;
|
||||
if (connect.Origin.IsAlmostEqualTo(connector.Origin))
|
||||
{
|
||||
var conn = elem.GetConnectors(true).GetNearestConnector(connector.Origin);
|
||||
conn.ConnectTo(connect);
|
||||
break;
|
||||
default:
|
||||
element = Duct.Create(
|
||||
Document,
|
||||
mechanicalSystem.Id,
|
||||
roundTypeId,
|
||||
levelId,
|
||||
origin,
|
||||
xyz2
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
//电气
|
||||
case Domain.DomainElectrical:
|
||||
break;
|
||||
//水管
|
||||
case Domain.DomainPiping:
|
||||
var pipingSystemTypes = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(PipingSystemType))
|
||||
.Cast<PipingSystemType>();
|
||||
if (pipeTypeId == ElementId.InvalidElementId)
|
||||
{
|
||||
pipeTypeId = Document.OfClass<PipeType>().WhereElementIsElementType().FirstElementId();
|
||||
}
|
||||
var system = connector.MEPSystem;
|
||||
var pipingSystemType =
|
||||
system != null
|
||||
? Document.GetElement(system.GetTypeId()) as PipingSystemType
|
||||
: connector.PipeSystemType switch
|
||||
{
|
||||
//循环供水
|
||||
PipeSystemType.SupplyHydronic
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.SupplyHydronic
|
||||
),
|
||||
//循环回水
|
||||
PipeSystemType.ReturnHydronic
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.ReturnHydronic
|
||||
),
|
||||
//卫生设备
|
||||
PipeSystemType.Sanitary
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.Sanitary
|
||||
),
|
||||
//家用热水
|
||||
PipeSystemType.DomesticHotWater
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.DomesticHotWater
|
||||
),
|
||||
//家用冷水
|
||||
PipeSystemType.DomesticColdWater
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.DomesticColdWater
|
||||
),
|
||||
//其他
|
||||
PipeSystemType.OtherPipe
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherPipe
|
||||
),
|
||||
//湿式消防系统
|
||||
PipeSystemType.FireProtectWet
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectWet
|
||||
),
|
||||
//干式消防系统
|
||||
PipeSystemType.FireProtectDry
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectDry
|
||||
),
|
||||
//预作用消防系统
|
||||
PipeSystemType.FireProtectPreaction
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectPreaction
|
||||
),
|
||||
//其他消防系统
|
||||
PipeSystemType.FireProtectOther
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.FireProtectOther
|
||||
),
|
||||
//通风孔
|
||||
PipeSystemType.Vent
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.Vent
|
||||
),
|
||||
_
|
||||
=> pipingSystemTypes.FirstOrDefault(
|
||||
pst =>
|
||||
pst.SystemClassification
|
||||
== Autodesk.Revit.DB.MEPSystemClassification.OtherPipe
|
||||
)
|
||||
};
|
||||
|
||||
element = Pipe.Create(Document, pipingSystemType.Id, pipeTypeId, levelId, origin, xyz2);
|
||||
element.get_Parameter(BuiltInParameter.RBS_PIPE_DIAMETER_PARAM).Set(connector.Radius * 2);
|
||||
break;
|
||||
//电力
|
||||
case Domain.DomainCableTrayConduit:
|
||||
if (cableTrayTypeId == ElementId.InvalidElementId)
|
||||
{
|
||||
cableTrayTypeId = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(CableTrayType))
|
||||
.FirstElementId();
|
||||
}
|
||||
if (conduitTypeId == ElementId.InvalidElementId)
|
||||
{
|
||||
conduitTypeId = new FilteredElementCollector(Document)
|
||||
.OfClass(typeof(ConduitType))
|
||||
.FirstElementId();
|
||||
}
|
||||
|
||||
|
||||
//switch (connector.ElectricalSystemType)
|
||||
//{
|
||||
// //电力
|
||||
// case ElectricalSystemType.PowerCircuit:
|
||||
|
||||
// break;
|
||||
//}
|
||||
|
||||
switch (connector.Shape)
|
||||
{
|
||||
case ConnectorProfileType.Invalid:
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Round:
|
||||
element = Conduit.Create(Document, conduitTypeId, origin, xyz2, levelId);
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Rectangular:
|
||||
element = CableTray.Create(Document, cableTrayTypeId, origin, xyz2, levelId);
|
||||
|
||||
break;
|
||||
|
||||
case ConnectorProfileType.Oval:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Document.Regenerate();
|
||||
//新建管线连接
|
||||
if (element == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var curve = element as MEPCurve;
|
||||
var manager = curve.ConnectorManager;
|
||||
var lter = manager.UnusedConnectors.ForwardIterator();
|
||||
while (lter.MoveNext())
|
||||
{
|
||||
var connect = lter.Current as Connector;
|
||||
if (connect.Origin.IsAlmostEqualTo(connector.Origin))
|
||||
{
|
||||
var conn = elem.GetConnectors(true).GetNearestConnector(connector.Origin);
|
||||
conn.ConnectTo(connect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
MinWidth="250"
|
||||
MinHeight="280"
|
||||
d:DataContext="{d:DesignInstance Type={x:Type local:RotateMEPViewModel}}"
|
||||
SizeToContent="WidthAndHeight"
|
||||
SizeToContent="Height"
|
||||
mc:Ignorable="d">
|
||||
<Window.Resources>
|
||||
<ResourceDictionary Source="pack://application:,,,/Sai.RvKits;component/WPFUI.xaml" />
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Sai.RvKits.RvMEP
|
||||
public partial class RotateMEPViewModel : ObservableObject
|
||||
{
|
||||
[ObservableProperty]
|
||||
private double angle;
|
||||
private double angle = 90;
|
||||
[ObservableProperty]
|
||||
private bool isSingleSelect = true;
|
||||
[RelayCommand]
|
||||
@@ -40,7 +40,7 @@ namespace Sai.RvKits.RvMEP
|
||||
var r = uidoc.Selection.PickObject(ObjectType.Element, new FuncFilter(e =>
|
||||
{
|
||||
return e is FamilyInstance && e.GetConnectors().OfType<Connector>().Any(c => c.IsConnected);
|
||||
}), "请选择可以连管的构件");
|
||||
}), "请选择已经连管的构件");
|
||||
|
||||
elemIds.Add(r.ElementId);
|
||||
}
|
||||
@@ -49,15 +49,40 @@ namespace Sai.RvKits.RvMEP
|
||||
elemIds = uidoc.Selection.PickObjects(ObjectType.Element, new FuncFilter(e =>
|
||||
{
|
||||
return e is FamilyInstance && e.GetConnectors().OfType<Connector>().Any(c => c.IsConnected);
|
||||
}), "请选择可以连管的构件,并完成").Select(r => doc.GetElement(r).Id).ToList();
|
||||
}), "请选择已经连管的构件,并完成").Select(r => doc.GetElement(r).Id).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var id in uidoc.Selection.GetElementIds())
|
||||
foreach (var id in elemIds)
|
||||
{
|
||||
var elem = uidoc.Document.GetElement(id);
|
||||
|
||||
var referConn = elem.GetConnectors().OfType<Connector>().FirstOrDefault(c => c.IsConnected);
|
||||
var referConn = elem.GetConnectors().OfType<Connector>().FirstOrDefault(c =>
|
||||
{
|
||||
if (c.IsConnected)
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.X > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.Y > 0)
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (c.CoordinateSystem.BasisZ.Z > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
if (referConn != null)
|
||||
{
|
||||
@@ -71,7 +96,7 @@ namespace Sai.RvKits.RvMEP
|
||||
referConn.CoordinateSystem.Origin,
|
||||
referConn.CoordinateSystem.BasisZ),
|
||||
Angle.ToRadian());
|
||||
}, "旋转");
|
||||
}, "旋转实例");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user