2016-07-12 2 views
0

Учитывая 200+ вершин, сгенерированных API AutoCad в виде массива векторов {X:, Y:, Z:}, я пытаюсь сделать их в THREE .js без везения.Render mesh 3D вершины в Three.js (faces)

На данный момент я делаю все возможные перестановки для числа 200 и соединяю все вершины вместе - , который, как я думаю, не так, как это сделано, поскольку он дает более 200 тыс. Лиц.

EDIT: Мой код AutoCAD получает все вершины, а затем он пытается получить это связано идентификаторы вершин (vertex1 и vertex2). Однако GetHashCode() не работает. Проблема заключается не в том, что он возвращает огромные идентификационные номера, такие как 148335760 и 682610240. Проблема в том, что эти идентификаторы не уникальны и они определены, и они не связаны ни с какими другими вершинами.

код AutoCAD:

//data structures for serialisation 
public class EdgeMe 
{ 
    public int vertex1; 
    public int vertex2; 
} 
public class VertexMe 
{ 
    public int id; 
    public Point3d Point; 
    public List<EdgeMe> Edges = new List<EdgeMe>(); 
} 

public class DataMe{ 
    public Extents3d extents; 
    public string layer; 
    public List<VertexMe> points = new List<VertexMe>(); 
} 


//... 


// Get each Solid3d in modelspace and add its extents 
// to the list 
foreach (var id in ms) 
{ 
    var obj = tr.GetObject(id, OpenMode.ForRead); 
    var sol = obj as Solid3d; 

    DataMe dataMe = new DataMe(); 
    if (sol != null) 
    { 
     dataMe.extents = sol.GeometricExtents; 
     dataMe.layer = sol.Layer; 
     using (var brep = new Autodesk.AutoCAD.BoundaryRepresentation.Brep(sol)) 
     { 
      foreach (var vertex in brep.Vertices) 
      { 
       VertexMe vertexMe = new VertexMe(); 
       vertexMe.Point = vertex.Point; 
       vertexMe.id = vertex.Brep.GetHashCode(); 
       foreach(var edge in vertex.Edges) 
       { 
        EdgeMe edgeMe = new EdgeMe(); 
        edgeMe.vertex1 = edge.Vertex1.Brep.GetHashCode(); 
        edgeMe.vertex2 = edge.Vertex2.Brep.GetHashCode(); 
        vertexMe.Edges.Add(edgeMe); 
       } 

       dataMe.points.Add(vertexMe); 
      } 
     } 
    } 
    sols.Add(dataMe); 
} 

код Javascript:

var faces = function(vertices) { 
    var results = []; 

    var vertex = [0, 1, 2]; 
    results.push(vertex.slice()); 

    while(true) { 
     vertex[2]++; 
     if(vertex[2] > vertices) { 

      vertex[1]++; 
      if(vertex[1] >= vertices) { 
       vertex[0]++; 
       vertex[1] = vertex[0] + 1; 

       if(vertex[0] > vertices - 2) 
        return results; 
      } 

      vertex[2] = vertex[1] + 1; 
     } 

     results.push(vertex.slice()); 
    } 

}; 

var generate = function(...) { 
    // Process each box, adding it to the scene 
    for (var sol in sols) { 
     var s = sols[sol]; 
     var vertices = []; 

     for(var vertix in s.points) {// deserialize 
      vertix = s.points[vertix]; 

      vertices.push(new THREE.Vector3(vertix.X, vertix.Y, vertix.Z)); 
     } 

     var holes = []; 
     var triangles, mesh; 
     var geometry = new THREE.Geometry(); 
     geometry.vertices = vertices; 
     var xfaces = faces(vertices.length); 

     for(var i = 0; i < xfaces.length; i++) { 
      geometry.faces.push(new THREE.Face3(xfaces[i][0], xfaces[i][1], xfaces[i][2])); 
     } 
     geometry.computeFaceNormals(); 
     geometry.computeVertexNormals(); 

     mesh = new THREE.Mesh(geometry, customimg); 

     mesh.rotation.set(Math.PI/2, 0, 0); 

     root.add(mesh); 
    } 
} 

С уважением,

Ioan

+0

@gaitat Вы правы. пожалуйста, сделайте это сообщение, чтобы сделать его ответом. – ioanb7

+0

показать код AutoCAD и, возможно, я смогу вам помочь –

+0

Привет @DmitriyZapevalov, посмотрите на него сейчас. – ioanb7

ответ

0

Вы не можете делать то, что делаете. Вы пытаетесь угадать информацию о подключении. Это не должно угадывать работу. Приложение должно вернуть вам информацию о подключении.

0

Вместо этого я хотел бы предложить вам использовать Forge Model Derivative API, чтобы извлечь для просмотра из файла. После перевода файла вы можете просмотреть его с помощью Viewer (который основан на файле Three.js, но оптимизирован для технических файлов). Вы найдете несколько примеров: this Github.

Смежные вопросы