Revit API - не может рисовать сгенерированные прямые фигуры - PullRequest
1 голос
/ 25 сентября 2019

Я создаю их все одинаково, но некоторые из них не могут быть окрашены (изображение внизу)

Шаги:

  1. Я создаюсписок граней из твердого тела

    internal static List<List<XYZ>> GetFacesFromSolidTriangulate(Solid geomSolid)
    {
    
        List<List<XYZ>> faces = new List<List<XYZ>>();
    
        foreach (Face face in geomSolid.Faces)
        {
            Mesh mesh_space = face.Triangulate();
    
            for (int i = 0; i < mesh_space.NumTriangles; i++)
            {
                MeshTriangle triangle = mesh_space.get_Triangle(i);
    
                XYZ p1 = triangle.get_Vertex(0);
                XYZ p2 = triangle.get_Vertex(1);
                XYZ p3 = triangle.get_Vertex(2);
                List<XYZ> xyz = new List<XYZ>();
    
                xyz.Add(triangle.get_Vertex(0));
                xyz.Add(triangle.get_Vertex(1));
                xyz.Add(triangle.get_Vertex(2));
    
                faces.Add(xyz);
            }
        }
    
        return faces;
    }
    
  2. Я создаю Direct Shape, используя

    static public DirectShape NewDrawDirectShape(Document doc, List<List<XYZ>> faces, ElementId matId, string name)
    {
    
        TessellatedShapeBuilder builder = new TessellatedShapeBuilder();
        builder.OpenConnectedFaceSet(true);
    
        foreach(List<XYZ> face in faces)
        {
            builder.AddFace(new TessellatedFace(face, matId));
        }
    
        builder.CloseConnectedFaceSet();
        builder.Build();
    
        TessellatedShapeBuilderResult result = builder.GetBuildResult();
    
        DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
    
        ds.SetShape(result.GetGeometricalObjects());
        ds.Name = name;
    
        return ds;
    }
    

И вот проблема, я могуне рисуйте несколько из них, даже используя Revit «инструмент рисования» ... Красная стрелка определяет, чего я пытаюсь достичь на этой прямой фигуре, синие прямые фигуры работают правильно

image

1 Ответ

0 голосов
/ 26 сентября 2019

Вы проверили ориентацию треугольника?Возможно, некоторые из треугольников, возвращаемых в объектах MeshTriangle, неправильно ориентированы.Чтобы попробовать это, вы можете создать небольшую модельную линию в центре каждого треугольника, указывая его нормальный вектор и ориентацию края.

...