2026-02-22 20:03:42 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Net;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
|
|
using Autodesk.Revit.DB;
|
|
|
|
|
|
|
|
|
|
|
|
namespace ShrlAlgoToolkit.RevitCore.Extensions;
|
|
|
|
|
|
|
|
|
|
|
|
internal static class FamilyInstanceExtensions
|
|
|
|
|
|
{
|
|
|
|
|
|
public static bool IsNested(this Autodesk.Revit.DB.FamilyInstance familyInstance)
|
|
|
|
|
|
{
|
|
|
|
|
|
return familyInstance.SuperComponent != null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static bool CanBeMove(this Autodesk.Revit.DB.FamilyInstance familyInstance)
|
|
|
|
|
|
{
|
|
|
|
|
|
return !(familyInstance.Symbol.Family.FamilyPlacementType == FamilyPlacementType.WorkPlaneBased &&
|
|
|
|
|
|
familyInstance.Host == null &&
|
|
|
|
|
|
familyInstance.HostFace == null);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void DeleteEmptyType(this Document famDocument)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(famDocument == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new ArgumentNullException(nameof(famDocument));
|
|
|
|
|
|
}
|
|
|
|
|
|
if(!famDocument.IsFamilyDocument)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new InvalidOperationException("该文档不是族文档");
|
|
|
|
|
|
}
|
|
|
|
|
|
var fm = famDocument.FamilyManager;
|
|
|
|
|
|
foreach (FamilyType item in fm.Types)
|
|
|
|
|
|
{
|
|
|
|
|
|
var b = string.IsNullOrWhiteSpace(item.Name);
|
|
|
|
|
|
//MessageBox.Show(item.Name);
|
|
|
|
|
|
if (b)
|
|
|
|
|
|
{
|
|
|
|
|
|
fm.CurrentType = item;
|
|
|
|
|
|
fm.DeleteCurrentType();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-02-22 21:12:18 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否已连接
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="ins"></param>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static bool IsConnectToSystem(this FamilyInstance ins)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool hasConnectToSystem = false;
|
|
|
|
|
|
if (ins.Category.CategoryType != CategoryType.Model)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (ins.get_BoundingBox(null) != null &&
|
|
|
|
|
|
ins.MEPModel?.ConnectorManager != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var cons = ins.GetConnectors(false);
|
|
|
|
|
|
|
|
|
|
|
|
foreach (Connector con in cons)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (con.Domain != Domain.DomainElectrical && con.Domain != Domain.DomainUndefined)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (con.IsConnected)
|
|
|
|
|
|
{
|
|
|
|
|
|
hasConnectToSystem = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
|
{
|
2026-02-22 20:03:42 +08:00
|
|
|
|
|
2026-02-22 21:12:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return hasConnectToSystem;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2026-02-22 20:03:42 +08:00
|
|
|
|
public static void Rotate(this Autodesk.Revit.DB.FamilyInstance familyInstance, double radian)
|
|
|
|
|
|
{
|
|
|
|
|
|
var axis = Line.CreateBound(familyInstance.GetTransform().Origin, familyInstance.GetTransform().Origin + XYZ.BasisZ);
|
|
|
|
|
|
ElementTransformUtils.RotateElement(familyInstance.Document, familyInstance.Id, axis, radian);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//extension (Autodesk.Revit.DB.FamilyInstance familyInstance)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// public bool IsNested()
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return familyInstance.SuperComponent != null;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
}
|