C# и AutoCAD2016. Открытие чертежей и получение параметров инструмента "Измерить

Автор Тема: C# и AutoCAD2016. Открытие чертежей и получение параметров инструмента "Измерить  (Прочитано 40171 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Добрый день!
Уважаемые форумчане, на работе есть необходимость написать программу(это отдельная программа, а не плагин для автокада), которая по запросу юзера подключается к автокаду, дает команду автокаду на измерить площадь(_AREA так понимаю команда в автокаде) и после обратно в программу возвращает значение площади и периметра.
Подскажите как это сделать или ткните где это можно почитать. Это не учебное задание) Первый раз сталкиваюсь с программированием C# для автокада.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
...
(это отдельная программа, а не плагин для автокада)
...
Подскажите как это сделать
В твоём случае - через COM.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
melkalex90
Приветствую на форуме! Я так понимаю, что это продолжение/развитие темы: http://forum.dwg.ru/showthread.php?t=125800
Для того чтобы не изобретать велосипед, выложи фрагмент dwg-файла с несколькими "помещениями".
Тогда станет понятно, что можно и нужно с ними делать. И можно ли вообще без помощи пользователя с ними что-то делать.
P.S.: Команду _AREA точно запускать не нужно. Как и любые другие команды. Через COM/ActiveX-модель AutoCAD можно добраться до свойств примитивов (площадь полилинии, список вершин, и т.д.)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я так понимаю, что это продолжение/развитие темы: http://forum.dwg.ru/showthread.php?t=125800
Похоже двгру лежит на лопатках, многие темы кажут это:
Цитата: двгру
502 Bad Gateway
-----------------------
nginx/1.4.1

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Похоже двгру лежит на лопатках:
Цитата: двгру

    502 Bad Gateway
    -----------------------
    nginx/1.4.1

У меня работает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
У меня работает.
у меня ссылку, которую вы дали - открывает, а вот все соседние топики - нет. В принципе, меня это не тревожит...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
или ткните где это можно почитать
акадовская справка содержит информацию по своему COM API.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Во вложении план помещения. У меня по каждому помещению необходимо получить площади и периметр.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Во вложении план помещения.
Слово "мусор" к данному контенту более подходит. ИМХО. Прежде чем программно обрабатывать чертёж, его нужно к этому подготовить. То, что выложил ты - однозначно мусор, которому до программной обработки, как до Луны... Тому, кто создал этот "шедевр" не лишним будет открыть для себя такие примитивы, как "полилиния", а так же "область", дабы перспектива возможности программной обработки этого DWG замаячила хотя бы на горизонте.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Уважаемый, мне не надо, чтобы программа полностью считала все сама. Второе это не мой чертеж а то, что мне предоставили. Третье, мне надо выделять определенные области и получать их площадь и периметр(потому я и писал про инструмент Измерить Площадь(_AREA) на сколько понимаю), остальное считаться будет в программе.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Третье, мне надо выделять определенные области и получать их площадь и периметр
Я тебе об этом и пишу.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Во вложении план помещения. У меня по каждому помещению необходимо получить площади и периметр.
Я не нашел во вложении никакого помещения - это черт знает что (набор отрезков), а не помещение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Третье, мне надо выделять определенные области и получать их площадь и периметр(потому я и писал про инструмент Измерить Площадь(_AREA) на сколько понимаю), остальное считаться будет в программе.
Если считать, что помещение может быть только многоугольником (нет круглых частей), то можно попросить пользователя указать вершины и затем вычислить площадь и периметр.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Я понимаю про что вы. Но в таком виде нам поставляются такие планы. И потому как нет объектов на чертеже мне надо делать вручную замерку через инструмент Измерить Площадь. Выделяю сам область которую надо померить и мне выдается в автокаде площадь и периметр. Именно это я хочу в программе(так как в итоге не сам буду работать с этим), по нажатию кнопки в написаной програме в открытом автокаде запускалась команда AREA, полученные значения передавались бы обратно. И дальше я бы оперировал бы с этими значениями

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если считать, что помещение может быть только многоугольником
В помещении могут быть части, которые следует вычитать из общей площади: колонны, проёмы аля "второй свет", кладовки со швабрами, если они реализованы в виде отдельных закутков, не примыкающих к основным стенам. :) В виду этого примитивы областей использовать было бы более желательно (имхо).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
в таком виде нам поставляются такие планы
Это не устраняет необходимость предварительной подготовки чертежа. Если этого не делают те, кто высылает, значит это придётся делать тебе. В противном случае каковы исходники - таков будет и результат.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Выделяю сам область которую надо померить и мне выдается в автокаде площадь и периметр.
Видимо ты не понимаешь, что в AutoCAD'е нельзя выделить область (в твоём понимании). В нём можно выделить только примитивы AutoCAD. У тебя в качестве примитивов - куча отрезков, которые тебе ничем не помогут. У них нет площади. Поэтому тебе придётся попросить пользователя указать точки - вершины помещения.
В помещении могут быть части, которые следует вычитать из общей площади: колонны, проёмы аля "второй свет", кладовки со швабрами, если они реализованы в виде отдельных закутков. :) В виду этого примитивы областей использовать было бы более желательно (имхо).
Вполне возможно, что их нужно учитывать - в постановке задачи я этого не увидел.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
в постановке задачи я этого не увидел.
не удивлюсь, если сейчас выяснится, что это "подразумевалось само собой". Кроме того, не исключено, что даже если сейчас это не требуется учитывать, то совершенно не факт, что завтра требования не изменятся (самый плохой вариант).

Нередко то, что вопрошающему кажется мелочью, которую он не посчитал необходимым упомянуть, является одним из ключевых факторов, влияющих на выбор архитектуры приложения или способа решения задачи.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Накинулись...
В принципе, если выключить слой размеров и попробовать вот этот способ, то может и получится...

Хотя, блоки оборудования в слое стены, какие то рллеты в слое размеры , а сами размеры в слое АМ-5 и прочие прелести, жалко мне автора.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Я так понимаю, что не правильно вам объясняю чего хочу сделать)
В Автокаде есть инструмент Измерить Площадь(через ком строку _AREA). Я так понимаю, что этим инструментом я указываю опорные точки, по которым строится область, которая считается.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
В принципе, если выключить слой размеров и попробовать вот этот способ, то может и получится...
Ты не забывай, что ему это нужно делать из внешнего приложения.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю, что этим инструментом я указываю опорные точки, по которым строится область, которая считается.
Область не строится. Вычисляется площадь, которая ограничена указанными пользователем точками.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Я так понимаю, что этим инструментом я указываю опорные точки, по которым строится область, которая считается.
Как запросить эти точки у пользователя (через COM) я тебе показывал, пебе осталось только площадь посчитать, самому.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Автокаде есть инструмент Измерить Площадь(через ком строку _AREA). Я так понимаю, что этим инструментом я указываю опорные точки, по которым строится область, которая считается.
В автокаде есть такой примитив, так и называется: "область". Что юзеру легче сделать: указать стопятьцот точек помещения или одним кликом мышки выбрать объект "область", показывающую контур помещения за вычетом (при необходимости) всех лишних площадей? Не вопрос, ты, конечно, можешь и точки указывать, но ты поручишься за свою точность (что тебя не отвлекли и ты не забыл пару-тройку точек кликнуть, или что ты не указал пару лишних)?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Ты не забывай, что ему это нужно делать из внешнего приложения.
Ну идея то понятна.
Через сом спросить у пользователя очку, запустить команду "_boundary" и считать последний созданный объект...

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
В автокаде есть такой примитив, так и называется: "область". Что юзеру легче сделать: указать стопятьцот точек помещения или одним кликом мышки выбрать объект "область", показывающую контур помещения за вычетом (при необходимости) всех лишних площадей? Не вопрос, ты, конечно, можешь и точки указывать, но ты поручишься за свою точность (что тебя не отвлекли и ты не забыл пару-тройку точек кликнуть, или что ты не указал пару лишних)?
Заказчик не будет переделывать свои планы в автокаде, ему параллельно каким образом мы на фирме считаем эти площади. Я это делаю непосредственно для упрощения работы менеджеров ведущих объекты.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Заказчик не будет переделывать свои планы в автокаде, ему параллельно каким образом мы на фирме считаем эти площади. Я это делаю непосредственно для упрощения работы менеджеров ведущих объекты.
Я не настаиваю, можешь каждый раз для одного и того же помещения повторно указывать точки и игнорировать колонны, проёмы и т.п. - главное, чтобы тебя и твоих пользователей это устраивало. :)

Короче - показывай код, который у тебя не работает и задавай вопросы по нему (дабы всё было более конкретным). Уговаривать тебя не наступать на грабли я более не буду. :)

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Я не настаиваю, можешь каждый раз для одного и того же помещения повторно указывать точки и игнорировать колонны, проёмы и т.п. - главное, чтобы тебя и твоих пользователей это устраивало. :)

Короче - показывай код, который у тебя не работает и задавай вопросы по нему. Уговаривать тебя не наступать на грабли я более не буду. :)
У меня в любом случае будут примерные итоговые расчеты(в итоге считаются материалы), так как каждый человек в итоге по разному делает отделку(в плане самого процесса) + при транспортировке что то может уйти в утиль.
В том и беда, что я не понимаю коим образом подцепиться к автокаду и запросить указать точки. В данной статье(https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/dostup-k-komandnoj-stroke-autocad) нашел как получить доступ к командной строке автокада, но он у меня начинает ругаться на "Document acDoc = Application.DocumentManager.MdiActiveDocument;"

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
melkalex90
Резюмируем. Постановка задачи у тебя в голове и ты не собираешься её менять под возможности AutoCAD.
Значит разбивай свою задачу на подзадачи и задавай вопрос по каждой из них.
Например,
1) как запустить команду в AutoCAD из внешнего приложения?
2) как отследить завершение команды?
3) как получить результаты выполнения команды _AREA?
Один вопрос - одна тема на форуме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В том и беда, что я не понимаю коим образом подцепиться к автокаду и запросить указать точки. В данной статье(https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/dostup-k-komandnoj-stroke-autocad) нашел как получить доступ к командной строке автокада, но он у меня начинает ругаться на "Document acDoc = Application.DocumentManager.MdiActiveDocument;"
Потому что в той статье описано создание не внешнего приложения, а сборки, которая грузится внутрь AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитата: melkalex90
В том и беда, что я не понимаю коим образом подцепиться к автокаду и запросить указать точки. В данной статье(https://sites.google.com/site/bushmansnetlaboratory/translate-manual/upravlenie-sredoj-autocad/dostup-k-komandnoj-stroke-autocad) нашел как получить доступ к командной строке автокада, но он у меня начинает ругаться на "Document acDoc = Application.DocumentManager.MdiActiveDocument;"
Вообще-то, показанная тобой строка относится к AutoCAD .NET API и будет работать только в составе плагина акада, но никак не во внешнем приложении...

Меня терзают смутные сомнения... А вы к Шпаку с магнитофоном пришли? ты вообще в курсе, что такое COM API и как его использовать извне? Например, ты в курсе того, как при помощи COM создавать объект приложения AutoCAD, или MS Excel или MS Word или др. (принцип-то работы через COM один и тот же для любого приложения)?

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
melkalex90
Резюмируем. Постановка задачи у тебя в голове и ты не собираешься её менять под возможности AutoCAD.
....
Я понимаю, что в моем представление эта задача есть реализация кучи ненужной и не совсем правильной наверно работы. Просто если переделывать полностью каждый план времени не хватит. Приходиться работать с тем что есть.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
..
... ты вообще в курсе, что такое COM API и как его использовать извне? Например, как при помощи COM создать объект приложения AutoCAD, или MS Excel или MS Word или др. (принцип-то работы через COM один и тот же для любого приложения)?
Нет, честно говоря не понимаю. Я вообще в первые сталкиваюсь с такого рода вещами. Голова кругом идет от всего. С программированием сталкивался в институте и то поверхностно. Я в принципе работаю сотрудником тех поддержки(IT специалист). А тут поставили задачу написать программу, которая считает материалы для отделки(ремонта) объектов. При этом просят как можно больше упростить работу менеджерам, при наличии такого рода планов в автокаде.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Ты сам себе могилу копаешь, посмотри, входит ли в твои обязоности написание программ...
Вообще, такие задачи решаются привлечением инженера САРП и заказом на написание софта, в противном случае, в любой ошибке будешь виноват именно ТЫ и ТВОЯ программа и совершенно не важно так ли это или пользователь рукажоп.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Нет, честно говоря не понимаю.
вообще-то, насколько я знаю, написание программного кода - это нифига не обязанности IT. Если задачу ставят за рамками твоих должностных обязанностей, то... Стоит ли браться за это, тем более, что ты в этом вопросе не силён? Вопрос риторический...

Нет, честно говоря не понимаю.
Тогда ты "к лошади" не с той стороны подходишь. Почитай о том, как в .net коде использовать COM API сторонних приложений, а так же о позднем связывании.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
melkalex90
Потихоньку становится понятнее. Не нужно стесняться говорить что ты чего-то не знаешь, не умеешь или не понимаешь. Предлагаю изменить концепцию. Так как ты (практически) не знаком ни с AutoCAD, ни с программированием под AutoCAD, то мы будем давать советы как делать, а ты будешь к ним прислушиваться и делать как мы тебе советует. Можешь поверить моему 25 летнему опыту программирования под AutoCAD, что ты пытаешься уйти не туда...
Итак.
1) Не внешнее приложение, а плагин под AutoCAD. Менеджеру просто нужно будет запустить AutoCAD и нажать кнопочку для запуска твоей программы. Если ты будешь делать внешнее приложение, то огребёшь такое количество проблем, с которыми не распутаешься вовек.
2) В плагине под AutoCAD ты будешь запрашивать внешний контур помещения и внутренние контура (колонны и т.д., т.е. то чью площадь нужно вычитать). Параллельно будешь по точкам эти контура строить (полилиния) для того чтобы при повторном запросе не нужно было повторно указывать все точки. Идея с командой _BOUNDARY мне не нравится - слишком часто она возвращает не то то, что ожидалось.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
в любой ошибке будешь виноват именно ТЫ и ТВОЯ программа и совершенно не важно так ли это или пользователь рукажоп.
+1000

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Ты сам себе могилу копаешь, посмотри, входит ли в твои обязоности написание программ...
Вообще, такие задачи решаются привлечением инженера САРП и заказом на написание софта, в противном случае, в любой ошибке будешь виноват именно ТЫ и ТВОЯ программа и совершенно не важно так ли это или пользователь рукажоп.
Скажем так, если все же выйдет вытащить эту информацию с Автокада, мне это упростит задачу. Если же не выйдет такого, буду просто писать программку, с кучей датагридов, которые менеджеры будут заполнять ручками. В процессе работы все будет переделываться. Мне бы главное подцепить данные. Кроме всего прочего у меня допустимая погрешность(на расчет материалов) max 15%. Точность до тысячных не требуется.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
melkalex90
Потихоньку становится понятнее. Не нужно стесняться говорить что ты чего-то не знаешь, не умеешь или не понимаешь. Предлагаю изменить концепцию. Так как ты (практически) не знаком ни с AutoCAD, ни с программированием под AutoCAD, то мы будем давать советы как делать, а ты будешь к ним прислушиваться и делать как мы тебе советует. Можешь поверить моему 25 летнему опыту программирования под AutoCAD, что ты пытаешься уйти не туда...
Итак.
1) Не внешнее приложение, а плагин под AutoCAD. Менеджеру просто нужно будет запустить AutoCAD и нажать кнопочку для запуска твоей программы. Если ты будешь делать внешнее приложение, то огребёшь такое количество проблем, с которыми не распутаешься вовек.
2) В плагине под AutoCAD ты будешь запрашивать внешний контур помещения и внутренние контура (колонны и т.д., т.е. то чью площадь нужно вычитать). Параллельно будешь по точкам эти контура строить (полилиния) для того чтобы при повторном запросе не нужно было повторно указывать все точки. Идея с командой _BOUNDARY мне не нравится - слишком часто она возвращает не то то, что ожидалось.
Я уже думал на этот счет, но к сожалению не все заказчики работают через автокад. Есть те, кто работают с визио. Потому и делаю стороннее приложение. Мб я не совсем прав и правильно думаю. Мб есть смысл сделать для автокада плагин, а с визио думать.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
1) Не внешнее приложение, а плагин под AutoCAD. Менеджеру просто нужно будет запустить AutoCAD и нажать кнопочку для запуска твоей программы.
Ну, или так.
Если ты будешь делать внешнее приложение, то огребёшь такое количество проблем, с которыми не распутаешься вовек.
С этим не соглашусь. Использовать плагин - несомненно более удобно, но и COM не смертелен.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
С этим не соглашусь. Использовать плагин - несомненно более удобно, но и COM не смертелен.
Он становится смертелен, когда не удаётся получить от него отклика, а то и вообще не запускается через COM
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Мб я не совсем прав и правильно думаю. Мб есть смысл сделать для автокада плагин
Сделай плагин для AutoCAD и сохрани нужные данные во внешний файл (или файлы), который ты потом прочитаешь из своего внешнего приложения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Сделай плагин для AutoCAD и сохрани нужные данные во внешний файл (или файлы), который ты потом прочитаешь из своего внешнего приложения.
Как вариант.

2 melkalex90,
В обозначенном случае, возможно, будет интересен для изучения этот пример. В примере юзер указывает в акаде точки и сохраняет их координаты во внешние текстовые файлы. При необходимости - выполняет обратную задачу.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Сделай плагин для AutoCAD и сохрани нужные данные во внешний файл (или файлы), который ты потом прочитаешь из своего внешнего приложения.
Как вариант.

2 melkalex90,
В обозначенном случае, возможно, будет интересен для изучения этот пример. В примере юзер указывает в акаде точки и сохраняет их координаты во внешние текстовые файлы. При необходимости - выполняет обратную задачу.

Хммм... Посмотрю, что это и как оно работает) Благодарю, по результатам или вопросам отпишусь сюда

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Мне бы главное подцепить данные. Кроме всего прочего у меня допустимая погрешность(на расчет материалов) max 15%. Точность до тысячных не требуется.
А 15% это точность относительно чего? Если между тем что заказали по таким как у тебя "чертежам" и реальным материалом - это еще постараться уложится надо + наверняка есть еще и технологические вопросы про которые ты пока не думаешь - я сомневаюсь что у тебя там равный пол песком засыпать надо - есть еще партии, отходы, укладка, подгонка и пр  - только на ней можно и на 35% "разбежаться". Сделать для галочки (это как предлагаешь ты) можно и 15 строками на лиспе - осталось только услышать куда данные девать - запустить команду "_area", а потом считать в нужное место указанные Александром системные переменные. Сделать, чтоб реально считало с приемлемым процентом погрешности - дело не простое не столько даже программно - сколько организационно - надо и файлы кому-то подгонять под нужный формат - то есть ручками "подчеркивать" что нужно - это одна программа; данные получить и их разобрать (например свести номенклатуры со слоями или еще как) - это надо отдельную БД держать (или из 1С экспортировать - чтоб бухгалтерам было понятно что Вы там насчитали) - в любом случае или еще отдельная программа - либо модуль экспотра из вашей системы учета, потом линейные и площадные номенклатуры надо оптимизировать и дать карты оптимального раскроя (для справки в общем виде это не решенная математическая задача - и тут для "нормального" результата надо немало "попотеть" с математикой - Контрапович, Симплекс метод и др. радости), потом еще не плохо бы посмотреть - что есть из реальных остатков от других заказов на текущий момент (когда пора уже делать работу, а не на стадии проектирования - т.к. они еще только "виртуальны") и возможно все придется "немного" пересчитать - остатки кстати тоже надо, чтоб кто-то учел и каким-либо образом ввел. И это только часть которую надо организовать, написать и проверить - еще куча подводных камней - без которых это не автоматизация, а легкое упрощение возни. Чтоб стал реальный прирост в экономии материала, производительности (человеко часах), точности оценки и корректности - это достаточно серьезная задача - 100% выходящая за рамки (оклад) IT-шника.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Мне бы главное подцепить данные. Кроме всего прочего у меня допустимая погрешность(на расчет материалов) max 15%. Точность до тысячных не требуется.
А 15% это точность относительно чего? Если между тем что заказали по таким как у тебя "чертежам" и реальным материалом - это еще постараться уложится надо + наверняка есть еще и технологические вопросы про которые ты пока не думаешь - я сомневаюсь что у тебя там равный пол песком засыпать надо - есть еще партии, отходы, укладка, подгонка и пр  - только на ней можно и на 35% "разбежаться". Сделать для галочки (это как предлагаешь ты) можно и 15 строками на лиспе - осталось только услышать куда данные девать - запустить команду "_area", а потом считать в нужное место указанные Александром системные переменные. Сделать, чтоб реально считало с приемлемым процентом погрешности - дело не простое не столько даже программно - сколько организационно - надо и файлы кому-то подгонять под нужный формат - то есть ручками "подчеркивать" что нужно - это одна программа; данные получить и их разобрать (например свести номенклатуры со слоями или еще как) - это надо отдельную БД держать (или из 1С экспортировать - чтоб бухгалтерам было понятно что Вы там насчитали) - в любом случае или еще отдельная программа - либо модуль экспотра из вашей системы учета, потом линейные и площадные номенклатуры надо оптимизировать и дать карты оптимального раскроя (для справки в общем виде это не решенная математическая задача - и тут для "нормального" результата надо немало "попотеть" с математикой - Контрапович, Симплекс метод и др. радости), потом еще не плохо бы посмотреть - что есть из реальных остатков от других заказов на текущий момент (когда пора уже делать работу, а не на стадии проектирования - т.к. они еще только "виртуальны") и возможно все придется "немного" пересчитать - остатки кстати тоже надо, чтоб кто-то учел и каким-либо образом ввел. И это только часть которую надо организовать, написать и проверить - еще куча подводных камней - без которых это не автоматизация, а легкое упрощение возни. Чтоб стал реальный прирост в экономии материала, производительности (человеко часах), точности оценки и корректности - это достаточно серьезная задача - 100% выходящая за рамки (оклад) IT-шника.
Все что вы написали в итоге будет учитываться позже(по разбегу на 35%). Так сказать в процессе. А сейчас главное получить промежуточные результаты, от чего можно будет отталкиваться дальше. Расчет по остаткам это возня менеджеров и бухгалтерии меня никоим образом не касающаяся. Данная программа больше необходимо для того чтобы уменьшить количество рейсов транспортного цеха на объекта с довозом материалов. Ситуация такова, что из за неправильных расчетов менеджеров, машина на объект может сделать и 5 ходок. Когда реально можно было бы уложиться и за две(это пример).  Я понимаю, что все еще придеться очень долго приводит скажем так в "порядок". Но старт должен быть.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Параллельно будешь по точкам эти контура строить (полилиния) для того чтобы при повторном запросе не нужно было повторно указывать все точки. Идея с командой _BOUNDARY мне не нравится - слишком часто она возвращает не то то, что ожидалось.
Но старт должен быть.

Вот Ваш старт: ссылка
ИМХО, маленькое дополнение к коду, в методе Update() сразу после объявления переменной pl имеет смысл указать pl.Closed = true;

Стало Легче?
Вам взрослые дяди, которые ходили по этим граблям, говорят, что за тем холмиком, на который Вы пытаетесь залезть, Вас ждут горы и скалы и если этот холмик для Вас проблема, то не нужно туда идти...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот Ваш старт: ссылка
Возможно для старта это будет слишком сложно.
Можно начать с этого: http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Возможно для старта это будет слишком сложно.
Можно начать с этого: http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284

Ну да  ;D  Это очень просто  ;D ;D ;D Ну просто вариант для школьника  ;D ;D ;D
Вот рассмешили  :D

Есть еще проще вариант - обучиться Автокаду (можно за пару недель освоить) и пользоваться уже готовым функционалом Автокада.


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Есть еще проще вариант - обучиться Автокаду (можно за пару недель освоить) и пользоваться уже готовым функционалом Автокада.
1. Этот функционал не даёт то, что нужно автору - данные о площади и периметре в его программу.
2. _BOUNDARY очень часто даёт совсем не тот результат, на который расчитываешь. Особенно если рисовали без привязок.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Есть еще проще вариант - обучиться Автокаду (можно за пару недель освоить) и пользоваться уже готовым функционалом Автокада.
Этот функционал не даёт то, что нужно автору - данные о площади и периметре в его программу.
_DATAEXTRACTION и дальше внешней программой обрабатывать, впрочем я этот вариант автору уже предлагал, не пошло.

По поводу привязок, автор же написал что точности в 15% вполне достаточно =)

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Уважаемые, я понимаю, что вы проходили множество "кочек". Но я не совсем все понимаю из того, что вы говорите. Я потому и обратился к Вам за помощью.
Для меня программирование под AutoCAD это темный лес.

Я так понимаю, при создании плагина для автокада, надо cоздавать библиотеку классов? Если да, то подключать в автокад надо будет таким способом


Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Особенно если рисовали без привязок.

Абсолютно с Вами согласен.

Этот функционал не даёт то, что нужно автору - данные о площади и периметре в его программу.

Прекрасно понимаю, но будьте честны с melkalex90, что быстро свою задачу он не решит, даже если будет учиться по примерам. Я знаю как решить эту задачу с помощью COM, но даже я не рискну предположить со сколькими проблемами он столкнется прежде, чем сможет получить площадь и периметр объектов. Особенно, если ему потребуется конкретная полилиния.

Своим видео я продемонстрировал, что melkalex90 сможет быстро обработать чертеж, прежде чем сработает его будущее приложение.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Я так понимаю, при создании плагина для автокада, надо cоздавать библиотеку классов? Если да, то подключать в автокад надо будет таким способом
Я же Вам скидывал ссылку на плэй лист в youtube, где подробно разбирается как писать и с чего начать, по каким  причинам игнорируете?

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Я так понимаю, при создании плагина для автокада, надо cоздавать библиотеку классов? Если да, то подключать в автокад надо будет таким способом
Я же Вам скидывал ссылку на плэй лист в youtube, где подробно разбирается как писать и с чего начать, по каким  причинам игнорируете?
Это и есть ссылка на одно видео из плэй листа

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я так понимаю, при создании плагина для автокада, надо cоздавать библиотеку классов?
Да.
Если да, то подключать в автокад надо будет таким способом
Это вопрос или утверждение? Смотреть 40 минут видео чтобы понять всё ли там в порядке у меня нет времени.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Да уж  :D  Проще дать сразу готовое решение  :)

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 611
  • Карма: 155
    • ПГСу Бложик
Если да, то подключать в автокад надо будет таким способом
Если вопрос, то ответ наверное тут: ссылка

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Для меня программирование под AutoCAD это темный лес.
Похоже что не только программирование, но и работа в AudoCAD в целом - судя по тому, что такие примитивы как "полилиния" и "область" тебе не знакомы. Прежде чем писать плагины для приложения, не лишним было бы получить хотя бы базовые навыки работы с ним. ИМХО.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Это вопрос или утверждение? Смотреть 40 минут видео чтобы понять всё ли там в порядке у меня нет времени.
Это был вопрос.
Пойду смотреть да разбираться. Благодарю за помощь.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Своим видео я продемонстрировал, что melkalex90 сможет быстро обработать чертеж, прежде чем сработает его будущее приложение.
1) Обрабатывать чертеж будет не он, а менеджеры.
2) Это (как я понял) лишь небольшой фрагмент реального чертежа.
3) Где там реально помещение, а где оборудование или шкафы, приставленные к стенам я понять не смог. Смогут ли это понять менеджеры - это тоже вопрос.
Тут не 15% будет, а все 50%.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
melkalex90, а чертежи все в таком виде приходят, или есть более солидные варианты? Чтобы Вам помочь, нужно понять с чем Вы столкнулись.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
1) Обрабатывать чертеж будет не он, а менеджеры.
2) Это (как я понял) лишь небольшой фрагмент реального чертежа.
3) Где там реально помещение, а где оборудование или шкафы, приставленные к стенам я понять не смог. Смогут ли это понять менеджеры - это тоже вопрос.
Тут не 15% будет, а все 50%.

Ну тогда решения не видать! Одни не знают, что к ним приходит (я о чертежах), другие не смогут отличить шкаф от помещения... Ну точно ведь говорю - финиш  :D

Если человек не понимает где шкаф, а где помещение, тогда как программа это сделает?

Не буду врать, но на чертеже я тоже не понял где находится помещение, а где крыльцо от входной двери.
Хоть бы по слоям нормально раскидали...

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
melkalex90, а чертежи все в таком виде приходят, или есть более солидные варианты? Чтобы Вам помочь, нужно понять с чем Вы столкнулись.
Все приходит в таком виде. Но опять же это только один магазин(в плане компания одна). Другие приходят в Визио. В результате конечном должна быть программа, которая по заданным площади и периметру считает материалы(в зависимости от материала надо либо периметр либо высота) и сверху от полученных результатов накидывается 15% на каждый материал. Точность расчетов будет еще пересматриваться  в процессе работы.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
1) Обрабатывать чертеж будет не он, а менеджеры.
2) Это (как я понял) лишь небольшой фрагмент реального чертежа.
3) Где там реально помещение, а где оборудование или шкафы, приставленные к стенам я понять не смог. Смогут ли это понять менеджеры - это тоже вопрос.
Тут не 15% будет, а все 50%.

Ну тогда решения не видать! Одни не знают, что к ним приходит (я о чертежах), другие не смогут отличить шкаф от помещения... Ну точно ведь говорю - финиш  :D

Если человек не понимает где шкаф, а где помещение, тогда как программа это сделает?

Не буду врать, но на чертеже я тоже не понял где находится помещение, а где крыльцо от входной двери.
Хоть бы по слоям нормально раскидали...
Я понимаю, что в действительности это некорректный чертеж. Данный чертеж без оборудования(удалил сам только оборудование). Красным отмечены перегородки, которые будут возводиться между помещениями.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Все приходит в таком виде. Но опять же это только один магазин(в плане компания одна). Другие приходят в Визио. В результате конечном должна быть программа, которая по заданным площади и периметру считает материалы(в зависимости от материала надо либо периметр либо высота) и сверху от полученных результатов накидывается 15% на каждый материал. Точность расчетов будет еще пересматриваться  в процессе работы.

Задача мне предельно понятна.
Я все думаю по поводу автоматического выбора нужных полилиний. Вот если бы они были на определенном слое ВСЕГДА! То все - считай задача решается просто.
С Visio проблем тоже не должно быть, с учетом того, что можно сохранить его в чертеж Автокада. И это опять же можно сделать автоматически.

Правильно оформленный чертеж снимет 90% всех проблем в будущем.

Программу написать не сложно, но в нее нужно зашить алгоритм выбора ТЕХ САМЫХ (НЕОБХОДИМЫХ) полилиний. С безобразными чертежами - это чистый провал.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Я понимаю(с ваших слов). Потому я с самого начала хотел попробовать запустить инструмент "Измерить площадь", по заданным точкам, посчитать площадь необходимого помещения магазина и передать это в программу. О полной автоматизации этого процесса я пока и не думаю даже.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я понимаю(с ваших слов). Потому я с самого начала хотел попробовать запустить инструмент "Измерить площадь", по заданным точкам, посчитать площадь необходимого помещения магазина и передать это в программу. О полной автоматизации этого процесса я пока и не думаю даже.

Если бы у Вас были только координаты точек полилиний, то Вы и без чертежей можете легко и просто посчитаете площадь и периметр таких полилиний! и Автокад Вам был бы не нужен!
Но при одном условии: в полилиниях не должно быть дуговых участков.

Это простая математика.

Если у Вас есть только набор точек полилинии, то я Вам расскажу как посчитать площадь такой полилинии без Автокада, и уж тем более периметр.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Все приходит в таком виде. Но опять же это только один магазин(в плане компания одна). Другие приходят в Визио.
Я предлагаю тебе не бежать впереди паровоза, но включить голову...

Если исходные данные поступают из разных приложений (акад, визио, ворд, пэйнт и т.д.) то имеет смысл либо под каждый из них написать отдельный плагин, экспортирующий данные в единый формат который, в свою очередь, и будет обрабатываться твоей основной программой, либо использовать результаты их [акада, визио, ворда, пэйнта и т.д.] "родного" экспорта (если он в природе существует) но дополнительно написать конвертеры, преобразующие экспортированные данные во всё тот же определённый тобою основной формат. Использование конвертера - наиболее предпочтительный вариант, поскольку это позволит сделать так, чтобы твои заказчики слали тебе не чертежи, но сразу результаты экспорта, что избавит тебя от засирания твоего компьютера необходимости установки на твой комп кучи дополнительного софта (акад, визио, ворд, пэйнт и т.д.).

Для того, чтобы извлечение информации не уподоблялось выдёргиванию зубов плоскогубцами через анальное отверстие, исходные файлы чертежей должны создаваться в соответствии с определёнными правилами. Если ты, упираясь рогами в стенку, будешь твердить, что мол на входе априори будет мусор и ты ничего с этим поделать не можешь, что ты не во состоянии согласовать правила оформления "чертежей" (да простят меня за это слово, применительно к твоим DWG) с теми, кто тебе их высылает, то на качество результатов, выдаваемых твоим приложением, я не поставлю и ломанного гроша (уверен, что не только я). Более того - твой работодатель оторвёт тебе сам знаешь что и посадит в долговую яму, когда по результатам твоих "расчётов" он конкретно "попадёт" на деньги и ему самому открутят то же самое, что он затем открутит и тебе...

Согласование правил формирования контента чертежей, в контексте твоей хотелки - это обязательное условие, не зависимо от того, нравится тебе это или нет. Начинать нужно именно с этого. Программная обработка таких чертежей - это будет уже дело техники. ИМХО.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я же попытаюсь внести долю "программистского" в эту тему и покажу алгоритм вычисления площади многоугольника (полилинии без дуг):
Код - C# [Выбрать]
  1. class Point { double x, y; }
  2.  
  3. double PolygonArea(Point[] polygon)
  4. {
  5.    int i,j;
  6.    double area = 0;
  7.  
  8.    for (i=0; i < polygon.Length; i++) {
  9.       j = (i + 1) % polygon.Length;
  10.  
  11.       area += polygon[i].x * polygon[j].y;
  12.       area -= polygon[i].y * polygon[j].x;
  13.    }
  14.  
  15.    area /= 2;
  16.    return (area < 0 ? -area : area);
  17. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Александр Ривилис, правильно ли я понимаю, что Вы решаете эту задачу через определители?

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Уважаемые, возникли трудности.
Воспользовался кодом, ссылку на который давал Александр(http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284). Создаю dll, через netload загружаю в автокаде. Дальше пытаюсь вызвать команду MakeContour, на что автокад меня посылает с примечанием "Неизвестная команда".

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Значит эта библиотека не загрузилась

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Уважаемые, возникли трудности.
Воспользовался кодом, ссылку на который давал Александр(http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284). Создаю dll, через netload загружаю в автокаде. Дальше пытаюсь вызвать команду MakeContour, на что автокад меня посылает с примечанием "Неизвестная команда".

Можно видео снять, чтобы мы все могли посмотреть, как это у тебя происходит?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Давай уточним:
1) Версия и разрядность AutoCAD?
2) Версия Visual Studio?
3) Для какой версии .NET выполнялась компиляция? Для какой разрядности: x86/x64?
4) Нормально ли загрузился dll-файл? Не было ли сообщений об ошибках?
5) Если AutoCAD версии >= 2014, то путь к dll-файлу находится в доверенных?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
через netload загружаю в автокаде
что акад пишет в консоль сразу после твоей первой попытки загрузить dll? Какая версия акада? Из какого каталога грузишь dll (локальный, сетевой | доверенный, не доверенный)?

ой, А.Н. уже спросил, пока я набирал текст.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Давай уточним:
1) Версия и разрядность AutoCAD?
2) Версия Visual Studio?
3) Для какой версии .NET выполнялась компиляция? Для какой разрядности: x86/x64?
4) Нормально ли загрузился dll-файл? Не было ли сообщений об ошибках?
5) Если AutoCAD версии >= 2014, то путь к dll-файлу находится в доверенных?
1) AutoCad Mechanical 2016 х64
2) Visual 2015(32 бита)
3) .NET 4.5.2, Any CPU
4) Да загрузился без каких либо проблем, ошибок не было.
5) А как это проверить?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
4) Да загрузился без каких либо проблем, ошибок не было.
не пишет в консоль - это ещё не значит что их не было вовсе.
.NET 4.5.2, Any CPU
а в конфиг-файле акада (acad.exe.config) какая целевая версия дотнета указана (по умолчанию там v4.0)?

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
А как это проверить?

Ну если Автокад не спросил: «А вы уверены, что хотите загрузить эту библиотеку?», то значит НЕдоверенный, иначе - доверенный.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
4) Да загрузился без каких либо проблем, ошибок не было.
не пишет в консоль - это ещё не значит что их не было вовсе.
.NET 4.5.2, Any CPU
а в конфиг-файле акада (acad.exe.config) какая целевая версия дотнета указана (по умолчанию там v4.0)?
В конфиг файле <supportedRuntime version="v4.0"/>. это?
А как это проверить?

Ну если Автокад не спросил: «А вы уверены, что хотите загрузить эту библиотеку?», то значит НЕдоверенный, иначе - доверенный.
Автокад спросил про загрузку данной библиотеки

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
какие dll акада подключал к проекту? установил ли для них Copy Local в False?

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
какие dll акада подключал к проекту? установил ли для них Copy Local в False?
Подключал accoremgd acdbmgd acmgd Autodesk.AuroCAD.Interop и Interop.Common.
Да устанавливал Copy Local False

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Autodesk.AuroCAD.Interop и Interop.Common
эти не нужны для кода, который ты пытаешься запустить. Я тебя спрашивал про сетевой каталог. Из каких соображений молчишь?

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Autodesk.AuroCAD.Interop и Interop.Common
эти не нужны для кода, который ты пытаешься запустить. Я тебя спрашивал про сетевой каталог. Из каких соображений молчишь?
Ой, прошу прощения, пропустил. Dll гружу с компа(что автокад что длл лежат на одном разделе).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
показывай содержимое твоего csproj-файла.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
показывай содержимое твоего csproj-файла.
А лучше весь проект в архиве - вдруг еще чего напутал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
в виду того, что моё последнее сообщение повергло автора, судя по всему, в ступор, то... меня терзают смутные сомнения: возможно, что автор не знает что такое "csproj-файл" и как посмотреть | опубликовать его содержимое. как следствие - я начинаю сомневаться в том, что он вообще знаком с C#... хочется верить, что ошибаюсь, но опыт предыдущего общения не настраивает на позитивный лад :(

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Содержимое csproj.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{D6AE4A9A-0901-4CB1-9F2C-64B2CD8F60D8}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ClassLibrary2</RootNamespace>
    <AssemblyName>ClassLibrary2</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <OutputPath>bin\x64\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="accoremgd">
      <HintPath>..\..\..\..\..\Programms\AutoCAD 2016\accoremgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="acdbmgd">
      <HintPath>..\..\..\..\..\Programms\AutoCAD 2016\acdbmgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="acmgd">
      <HintPath>..\..\..\..\..\Programms\AutoCAD 2016\acmgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Autodesk.AutoCAD.Interop">
      <HintPath>..\..\..\..\..\Programms\AutoCAD 2016\Autodesk.AutoCAD.Interop.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="Autodesk.AutoCAD.Interop.Common">
      <HintPath>..\..\..\..\..\Programms\AutoCAD 2016\Autodesk.AutoCAD.Interop.Common.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Class1.cs" />
    <Compile Include="MakeContour\MyCommands.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>
Во вложении архив с проектом.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй во вложении.
P.S.: Проблемы были не с моим кодом, а с твоим кодом. Нельзя так бездумно переименовывать имена классов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Нельзя так бездумно переименовывать имена классов.
Что и требовалось доказать... :( Прежде чем садиться писать код на .net, необходимо потратить некоторое время на изучения базовых вещей. Это не AutoLISP, где элементарные приложения можно писать уже через пару-тройку часов чтения справочника Н.Н. Полещука...

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Уважаемые, прошу прощения за такие ошибки. Спасибо теперь заработало.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Спасибо теперь заработало.
О! Первый шаг сделан. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Спасибо теперь заработало.
О! Первый шаг сделан. :)
Александр, я скажу что первый шажочек оказался чуть больше чем я даже ожидал) Кроме того что я могу обвести замкнутый контур, я теперь могу посчитать его периметр и площадь замкнутую внутри контура(взял ваш код по ссылке http://adn-cis.org/forum/index.php?topic=772.msg2887#msg2887). И кроме всего прочего сделал это все одной DLL))))) Все благодаря вам)

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Такой вопрос, а можно ли сделать маленькую панельку с кнопками, по нажатию которых вызываются эти процедуры?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Такой вопрос, а можно ли сделать маленькую панельку с кнопками, по нажатию которых вызываются эти процедуры?
Ответ на этот вопрос легко находится в справке автокада, а так же в гугле.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Такой вопрос, а можно ли сделать маленькую панельку с кнопками, по нажатию которых вызываются эти процедуры?
Множество предложений: https://goo.gl/gKNxsX
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Такой вопрос, а можно ли сделать маленькую панельку с кнопками, по нажатию которых вызываются эти процедуры?
Ответ на этот вопрос легко находится в справке автокада, а так же в гугле.
Такой вопрос, а можно ли сделать маленькую панельку с кнопками, по нажатию которых вызываются эти процедуры?
Множество предложений: https://goo.gl/gKNxsX
Благодарствую. Предложенным Вами способом решение моей задачки будет проще.

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Добрый день!
Александр, подскажите пожалуйста, в каком месте у вас идет прорисовка конечной линии в контуре(ваш код http://adn-cis.org/forum/index.php?topic=975.msg4284#msg4284)?
Мне есть необходимость просто нарисовать полилинию, чтобы измерить ее длину.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр, подскажите пожалуйста, в каком месте у вас идет прорисовка конечной линии в контуре
Ты имеешь в виду соединение первой и последней вершины? Это управляется свойством Closed.
Т.е. тебе нужно убрать poly.Closed = true; (или заменить на  poly.Closed = false;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн melkalex90Автор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 0
Ты имеешь в виду соединение первой и последней вершины? Это управляется свойством Closed.
Т.е. тебе нужно убрать poly.Closed = true; (или заменить на  poly.Closed = false;)
Да имеено это и было надо) Но я сам разобрался, но все равно спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Пожалуйста. В дальнейшем запомни, что "один вопрос - одна тема", т.е. этот вопрос нужно было задать в новой теме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение