Выпуск чертежа FractureNetwork из треугольной сетки в буревестнике - PullRequest
1 голос
/ 27 июля 2011

У меня проблемы с созданием FractureNetwork из TriangleMesh в Petrel. Когда он нарисован, вы можете увидеть все отдельные треугольники - я ожидаю, что он будет твердым. Кажется, что некоторые из треугольников связаны, но не все. Я что-то упустил или есть хитрость в том, чтобы FractureNetwork казался надежным?

TriangleMesh сплошной, и когда я включаю Wireframe в 3D окне, он также выглядит правильно. Ссылка показывает изображение с TriangleMesh рядом с FractureNetwork.

http://www.flickr.com/photos/65551984@N07/5981436871/

1 Ответ

1 голос
/ 29 июля 2011

Кажется, проблема была в порядке индексов, используемых для генерации треугольников.

Когда для генерации сети разрыва используется следующий код, треугольники заштрихованы.

Однако, если порядок индексов изменен, сеть трещин будет сплошной.

    public static void Test()
    {
        Point3[] vertices = new Point3[9];
        IndexedTriangle[] triangles = new IndexedTriangle[8];

        vertices[0] = new Point3(0, 100, 0);
        vertices[1] = new Point3(50, 100, 5);
        vertices[2] = new Point3(100, 100, 10);
        vertices[3] = new Point3(0, 50, 15);
        vertices[4] = new Point3(50, 50, 20);
        vertices[5] = new Point3(100, 50, 25);
        vertices[6] = new Point3(0, 0, 30);
        vertices[7] = new Point3(50, 0, 35);
        vertices[8] = new Point3(100, 0, 40);

        triangles[0] = new IndexedTriangle(0, 1, 3);
        triangles[1] = new IndexedTriangle(1, 4, 3); // switched order of last two values
        triangles[2] = new IndexedTriangle(1, 2, 4);
        triangles[3] = new IndexedTriangle(2, 5, 4); // switched order of last two values
        triangles[4] = new IndexedTriangle(3, 4, 6);
        triangles[5] = new IndexedTriangle(4, 7, 6); // switched order of last two values
        triangles[6] = new IndexedTriangle(4, 5, 7);
        triangles[7] = new IndexedTriangle(5, 8, 7); // switched order of last two values

        IndexedTriangleMesh triangleMesh = new IndexedTriangleMesh(triangles, vertices, null);

        TriangleMesh triMesh = null;
        using (ITransaction trans = Slb.Ocean.Core.DataManager.NewTransaction())
        {
            Project proj = PetrelProject.PrimaryProject;
            trans.Lock(proj);
            string colName = "TringleMeshes";
            Collection collection = Collection.NullObject;
            collection = proj.CreateCollection(colName);

            trans.Lock(collection);

            DomainObjectExtensionRoot root = DomainObjectExtensionRoot.GetInstance();
            trans.Lock(root);

            triMesh = root.CreateTriangleMesh("TestMesh", Domain.ELEVATION_DEPTH, collection, "Test", "");
            trans.Lock(triMesh);
            triMesh.IndexedTriangleMeshes = new IndexedTriangleMesh[] { triangleMesh };
            triMesh.Color = Color.Blue;
            trans.Commit();
        }

        Project project = PetrelProject.PrimaryProject;


        FractureNetwork fractureNetwork;                  

        using (ITransaction trans = Slb.Ocean.Core.DataManager.NewTransaction())
        {
            trans.Lock(project);

            fractureNetwork = project.CreateFractureNetwork("FractureNetwork", Domain.ELEVATION_DEPTH);

            fractureNetwork.CreateFracturePatches(triMesh.IndexedTriangleMeshes);

            trans.Commit();
        }

    }

Изображение можно увидеть по адресу: http://www.flickr.com/photos/65551984@N07/5987611731/

...