Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Irina,
Приветствую на форуме!
1. На нашем форуме не обсуждается работа с клонами AutoCAD (и BricsCAD в частности).
2. Вы собираетесь сами программировать или ищете исполнителя для этой работы? Если ищете исполнителя, то я перенесу тему в раздел Работа для разработчиков
2
Добрый день,
Прошу откликнуться тех, кто может помочь советом (или делом :)), как выполнить следующую задачу:
Исходные данные:
1.   имеется база с типами ячеек распределительных устройств, выполненная в BricsCAD (каждая ячейка имеет конкретное название-тип, которому соответствует электрическая схема, вид сверху с габаритами и вид фасада с габаритами);
2.   к каждой ячейке есть описательная часть на русском, английском и немецком языках (необходимо предусмотреть возможность выбора языка);
3.   для каждого типа ячеек определена стоимость (база создана в таблице Excel).
Задача:
разработать конфигуратор распределительного устройства представляющий собой некий опросный лист, при заполнении которого путем выбора типов ячеек набиралась схема целого распредустройства. При этом программа должна автоматически отрисовывать электрическую схему распредустройства из выбранных ячеек, давать описательную часть на указанном языке, считать стоимость и формировать эти данные в один или несколько файлов.

Подозреваю, что задача должна выполняться с привлечением AutoLisp, Bricscad Lisp, VBA (что-то еще?). Буду признательна за любую помощь или совет в решении этой задачи.
3
Дело в том что я пишу плагин для NanoCad, а он использует такое же апи что и Автокад.
На нашем форуме NanoCAD также как и другие клоны AutoCAD не обсуждаются!
Так что обсуждать мы будем только в контексте AutoCAD.
4
ObjectARX / Re: Плагин для работы с 3д полилиниями
« Последний ответ от ubelian 13-11-2018, 19:10:00 »
Цитировать
Это что-то новенькое. Наверное, appendAcDbEntity
Дело в том что я пишу плагин для NanoCad, а он использует такое же апи что и Автокад.

5
appendNcDbEntity
Это что-то новенькое. Наверное, appendAcDbEntity
6
ubelian,
1. Прочитай внимательно у меня в подписи как следует форматировать код у нас на форуме и соблюдай это правило!
Жмякает по ней кнопкой левой мышки, выделяя её.
Ну тогда теоретически тебе достаточно отслеживать AcEditorReactor::pickfirstModified, затем читать набор при помощи acedSSGetFirst и проверять твоя или не твоя полилиния в наборе.
И ещё, как получить из AcDb3dPolyline составляющие её точки?
Можно несколькими способами. Правильный - итератор по всем вершинам полилинии:
Код - C++ [Выбрать]
  1. AcDbObjectPointer<AcDb3dPolyline> poly3d(pObjId,AcDb::kForRead);
  2. if (poly3d.openStatus() != Acad::eOk) return;
  3. AcDbObjectIterator *pVertIter= poly3d->vertexIterator();
  4. AcDbObjectId vertexObjId;
  5. for (;!pVertIter->done();pVertIter->step()) {
  6.   vertexObjId = pVertIter->objectId();
  7.   AcDbObjectPointer<AcDb3dPolylineVertex> pVertex(vertexObjId,AcDb::kForRead);
  8.   AcGePoint3d vPts = pVertex->position();  // <-- Это координаты очередной вершины
  9. }
  10. delete pVertIter;
7
ObjectARX / Re: Плагин для работы с 3д полилиниями
« Последний ответ от ubelian 13-11-2018, 18:00:20 »
Цитировать
1. Как отличить 3D-полилинию, нарисованную твоим приложением, от любой другой?
Дело в том, что плагин должен работать пока только с теми полилинияи, которые он создал. Мой код добавляет реактор для каждого созданного объекта. Вот код который рисует эту геометрию

Код - C++ [Выбрать]
  1. void createPolyline(std::vector<double> polylineDot){
  2.  
  3.         AcGePoint3dArray ptArr;
  4.         size_t polylineDotLogicalSize = polylineDot.size() / 3;
  5.         ptArr.setLogicalLength(polylineDotLogicalSize);
  6.         size_t iter = 0;
  7.         for(int i = 0; i < polylineDotLogicalSize; i++){
  8.                 ptArr[i].set(polylineDot.at(iter), polylineDot.at(iter + 1), polylineDot.at(iter + 2));
  9.                 iter = iter + 3;
  10.         }
  11.  
  12.         AcDb3dPolyline *pNewPolyLine = new AcDb3dPolyline(AcDb::k3dSimplePoly, ptArr, Adesk::kFalse);
  13.         pNewPolyLine->setColorIndex(3);
  14.         AcDbBlockTable *pBlockTable;
  15.         acdbHostApplicationServices() -> workingDatabase() -> getSymbolTable(pBlockTable, AcDb::kForRead);
  16.         AcDbBlockTableRecord *pBlockTableRecord;
  17.         //AsdkDbReactor дочка AcDbDatabaseReactor, gpDbr объект класса AsdkDbReactor
  18.         if(gpDbr == NULL){
  19.                 gpDbr = new AsdkDbReactor();
  20.         }
  21.         acdbHostApplicationServices() -> workingDatabase() -> addReactor(gpDbr);
  22.  
  23.  
  24.         pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
  25.         pBlockTable->close();
  26.  
  27.         AcDbObjectId polylineObjectId;
  28.        
  29.         pBlockTableRecord->appendNcDbEntity(polylineObjectId, pNewPolyLine);
  30.         pBlockTableRecord->close();
  31.  
  32.         pNewPolyLine->setLayer(L"0");
  33.         pNewPolyLine->close();
  34.  
  35. }
  36.  
Цитировать
2. Что значит "Когда пользователь выбирает любую созданную моим приложением 3дполилинию"? Это просто выбор, когда ни одна команда AutoCAD не запущена или так же при запущенной команде? Например, запустили команду _MOVE и выбрали "твою" 3D-полилинию...

Жмякает по ней кнопкой левой мышки, выделяя её.

Цитировать
3. Если выбрано сразу несколько 3D-полилиний? Что в этом случае делать?
А вот это хороший вопрос. Я сначала подгоню плагин под мои требования, а потом уже буду добавлять новый функционал

И ещё, как получить из AcDb3dPolyline составляющие её точки?
8
3. Когда пользователь выбирает любую созданную моим приложением 3дполилинию мой плагин должен отобразить координаты новой фигуры
Тут сразу возникает куча вопросов:
1. Как отличить 3D-полилинию, нарисованную твоим приложением, от любой другой?
2. Что значит "Когда пользователь выбирает любую созданную моим приложением 3дполилинию"? Это просто выбор, когда ни одна команда AutoCAD не запущена или так же при запущенной команде? Например, запустили команду _MOVE и выбрали "твою" 3D-полилинию...
3. Если выбрано сразу несколько 3D-полилиний? Что в этом случае делать?
Если меняется набор предварительного выбора, то нужно отслеживать AcEditorReactor::pickfirstModified
Можно еще:
AcEdInputContextReactor::endSSGet
AcEdInputContextReactor::endEntsel
9
А вот редактирование при помощи ручек:



ARXDBG для тестирования можно взять здесь http://adn-cis.org/forum/index.php?topic=7274.0
10
При переносе всей 3D-полилинии:





Страницы: [1] 2 3 ... 10