private void CheckInserts(Element element, Options options, ICollection<Element> checkedElements)
{
try
{
if (element is HostObject hostObject)
{
var inserts = hostObject.FindInserts(true, true, true, true).ToList();
inserts.ForEach(insertId =>
{
var insertElement = element.Document.GetElement(insertId);
var stop = false;
var geometryElement = hostObject.get_Geometry(options);
if (geometryElement != null)
{
foreach (GeometryObject geometryObject in geometryElement)
{
if (stop)
break;
if (geometryObject is Solid solid)
{
foreach (Face face in solid.Faces)
{
try
{
if (hostObject.GetGeneratingElementIds(face).Any(x => x == insertId))
{
if (checkedElements.All(x => x.Id != insertId))
{
checkedElements.Add(insertElement);
stop = true;
break;
}
}
}
catch (Exception exception)
{
// может возникать неясная ошибка в методе GetGeneratingElementIds (в справке не описана)
Debug.Print(exception.Message + Environment.NewLine + exception.StackTrace);
}
}
}
}
}
});
}
}
catch (Exception exception)
{
_loginAction($"При поиске вхождений элемента {element.Id.IntegerValue} произошла ошибка: {exception.Message}");
}
}