ADN Open CIS
Сообщество программистов Autodesk в СНГ

19/10/2013

Изменение цвета вершины у сети (SubDMesh)

Чтобы назначить цвета вершинам сети (SubDMesh), примитив сети (SubDMesh) должен быть предварительно добавлен в базу данных чертежа, прежде чем вызвать метод "AcDbSubDMesh::setVertexColorArray". Вот пример:

Код - C++: [Выделить]
  1. // Цвет вершины
  2. AcCmEntityColor vColor;
  3. vColor.setColorMethod(AcCmEntityColor::kByACI);
  4.  
  5. AcArray<AcCmEntityColor> clrArray;
  6.  
  7. // Вершины
  8. AcGePoint3dArray vertexArray;
  9. vertexArray.setPhysicalLength(4);
  10.  
  11. // Вершина-1
  12. AcGePoint3d pt1(0.0, 0.0, 0.0);
  13. vertexArray.append(pt1);
  14. vColor.setColorIndex(1); // Красный
  15. clrArray.append(vColor);
  16.  
  17. // Вершина-2
  18. AcGePoint3d pt2(20.0, 0.0, 0.0);
  19. vertexArray.append(pt2);
  20. vColor.setColorIndex(3); // Зелёный
  21. clrArray.append(vColor);
  22.  
  23. // Вершина-3
  24. AcGePoint3d pt3(20.0, 10.0, 0.0);
  25. vertexArray.append(pt3);
  26. vColor.setColorIndex(2); // Желтый
  27. clrArray.append(vColor);
  28.  
  29. // Вершина-4
  30. AcGePoint3d pt4(0.0, 10.0, 0.0);
  31. vertexArray.append(pt4);
  32. vColor.setColorIndex(5); // Голубой
  33. clrArray.append(vColor);
  34.  
  35. // Грани
  36. AcArray<Adesk::Int32> faceArray;
  37. faceArray.setPhysicalLength(8);
  38.  
  39. // Грань-1 (Вершина-1 Вершина-2 Вершина-4)
  40. faceArray.append(3);
  41. faceArray.append(0);faceArray.append(1);faceArray.append(3);
  42.  
  43. // Грань-2 (Вершина-2 Вершина-3 Вершина-4)
  44. faceArray.append(3);
  45. faceArray.append(1);faceArray.append(2);faceArray.append(3);
  46.  
  47. AcDbSubDMesh *pSubDMesh = new AcDbSubDMesh();
  48. Acad::ErrorStatus es = pSubDMesh->setSubDMesh
  49.                                 (vertexArray, faceArray, 0);
  50.  
  51. AcDbBlockTable *pBlockTable;
  52. AcDbBlockTableRecord *pSpaceRecord;
  53.  
  54. es = acdbHostApplicationServices()->workingDatabase()
  55.                 ->getSymbolTable(pBlockTable, AcDb::kForRead);
  56. es = pBlockTable
  57.     ->getAt(ACDB_MODEL_SPACE, pSpaceRecord, AcDb::kForWrite);
  58. es = pBlockTable->close();
  59.  
  60. // Чтобы цвет вершины был задействован, сеть (SubDMesh) должна быть добавлена
  61. // в базу чертежа
  62. AcDbObjectId meshId = AcDbObjectId::kNull;
  63. es = pSpaceRecord->appendAcDbEntity(meshId, pSubDMesh);
  64.  
  65. es = pSubDMesh->setVertexColorArray(clrArray);
  66.  
  67. es = pSubDMesh->close();
  68.  
  69. es = pSpaceRecord->close();
  70.  

Вот сеть (SubDMesh) созданная этим кодом:

Источник: http://adndevblog.typepad.com/autocad/2013/09/vertex-color-for-a-subdmesh.html

 

Обсуждение: http://adn-cis.org/forum/index.php?topic=272

Опубликовано 19.10.2013