Плучение координат выбранной полилинии на Delphi
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Плучение координат выбранной полилинии на Delphi

Плучение координат выбранной полилинии на Delphi

Ответ
Поиск в этой теме
Непрочитано 15.07.2010, 12:47 #1
Плучение координат выбранной полилинии на Delphi
Andryshok
 
Регистрация: 15.07.2010
Сообщений: 8

Здравствуйте, вопрос таков есть открытый в автокаде чертеж, там пользователь выбирает какую либо полилинию, есть некая программа на Delphi при нажатии в которой на кнопку программа получает координаты выбранной в автокаде полилинии, вот собственно и все , перерыл много инета и не только ,но как из внешней прои рисовать в автокаде есть а вот того что прошу не нашел нигде, если можно дайте пример какой нибудь, буду очень очень благодарен
Просмотров: 4852
 
Непрочитано 15.07.2010, 12:56
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Это потому что подход у тебя неправильный. После нажатии кнопки в твоей программе нужно попросить пользователя выбрать полилинию и программа вернет ее тебе.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 13:05
#3
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Вопрос ведь именно такого плана - связываюсь я с автокад при помощи COM , полилиния уже выделена пользователем, нужно взять ее координаты и отобразить ну допустим в StringGrid вот что мне нужно, а не
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
подход у тебя неправильный
Возможно ли осуществить такое ?
Andryshok вне форума  
 
Непрочитано 15.07.2010, 13:19
#4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Document.PickfirstSelectionSet возвращает набор всего, что выбрал пользователь.
А если пользователь ничего не выбрал? А если он выбрал не полилинию? А если он выбрал несколько полилиний?
Поэтому я утверждаю, что подход у тебя неправильный.
Правильно - запросить у пользователя выбрать полилинию:
Код:
[Выделить все]
Document.Utility.GetEntity(returnObj, basePnt, "Выберите полилинию: ")
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 13:24
#5
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Хорошо, возможно тогда значит взять координаты всего или если не полилиния то выдать например мессагу пользователю, у меня не получается взять координаты хоть чего нибудь вообще
Andryshok вне форума  
 
Непрочитано 15.07.2010, 13:35
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Andryshok Посмотреть сообщение
возможно тогда значит взять координаты всего
Всего не возмешь. Не все имеет координаты.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 13:43
#7
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Е-мое , если можете помочь с кодом как взять координаты вершин полилини так помогите, иначе не засоряйте тему пустыми ответами
Andryshok вне форума  
 
Непрочитано 15.07.2010, 14:01
1 | #8
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Вот так вот, Александр Наумович.
__________________
...в шее моей жилы железные, и лоб мой - медный...
Pastor вне форума  
 
Непрочитано 15.07.2010, 14:05
1 | #9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Andryshok Посмотреть сообщение
Е-мое , если можете помочь с кодом как взять координаты вершин полилини так помогите, иначе не засоряйте тему пустыми ответами
Плохо начинаешь.
Когда поработаешь с AutoCAD немного плотнее - поймешь почему я прав.
Теперь по существу. В AutoCAD есть как минимум три типа полилиний - 3DPolyline, Polyline и LightweightPolyline.
Каждый из этих объектов имеет свойство Coordinates. Вот они и возвращают координаты. При этом (см. справку):
Цитата:
LightweightPolyline objects: The variant is an array of 2D points in OCS.

Polyline objects: The variant is an array of 3D points: the X and Y coordinates are in OCS; the Z coordinate is ignored.

All other objects: The variant is an array of 3D points in WCS.
Вот еще пару ссылок:
http://www.caduser.ru/forum/index.ph...#message139064
http://www.caduser.ru/forum/index.ph...#message198721

P.S.: Pastor Все как обычно... Даже не удивляюсь и на благодарность не рассчитываю.

Последний раз редактировалось Александр Ривилис, 15.07.2010 в 14:40.
Александр Ривилис вне форума  
 
Непрочитано 15.07.2010, 14:52
1 | #10
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Andryshok Посмотреть сообщение
Здравствуйте, вопрос таков есть открытый в автокаде чертеж, там пользователь выбирает какую либо полилинию, есть некая программа на Delphi при нажатии в которой на кнопку программа получает координаты выбранной в автокаде полилинии, вот собственно и все , перерыл много инета и не только ,но как из внешней прои рисовать в автокаде есть а вот того что прошу не нашел нигде, если можно дайте пример какой нибудь, буду очень очень благодарен
Глянь здесь, перевести на дельфи надеюсь не составит труда
http://through-the-interface.typepad...the_pickf.html

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 15.07.2010, 15:19
#11
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Плохо начинаешь.
Когда поработаешь с AutoCAD немного плотнее - поймешь почему я прав.
Я не собираюсь работать с автокадом, я занимаюсь разработкой баз данных и клиенских приложений по работе с БД, делаю веб сайты и дизайн, вы тоже меня поймите, меня совершенно не интересует автокад, мне лишь надо сделать одну малюсенькую функцию, справки по которой я не смог нигде найти и все, на этом мой интерес к автокаду = я->моя связь с автокад = 0;

И уж поверьте, если ваши ответы дельные то вам всегда остануться благодарны любые люди, я даж прогу для которой мне это нужно делаю совершенно бесплатно по просьбе одного знакомого, ей будут пользоваться как минимум более 150 чел, и их благодарность - это их дело, я мог -> я помог , и все
Цитата:
Вот так вот, Александр Наумович
- а ето называется по всем правилам

Последний раз редактировалось Andryshok, 15.07.2010 в 15:36.
Andryshok вне форума  
 
Непрочитано 15.07.2010, 15:49
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Ссылки, которые я дал смотрел? Вопросы еще есть?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 16:03
#13
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Да, смотрел, спасибо, но болле дельное сообщение похоже дал Олег (jr.) , дома сяду переведу C# на дельфю, если вас не затруднит можете написать полный код типа
Acad := GetAcadApplication(True);
AcadDoc := Acad.ActiveDocument;
grid.cells[0,0] = AcadDoc.полилиния. координаты[i,j];
Просто насколько я понимаю вам все эти штуки дрюки давно знакомы, а мне совсем не хватает времени чтоб разобаться полностью, да и верно больше не пригодится никогда, просто знакомый намного быстрей получит прогу
Andryshok вне форума  
 
Непрочитано 15.07.2010, 16:10
#14
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Как раз на Delphi я не пишу вообще. Да и из дельфистов здесь редко кто бывает. Иначе бы не стал влезать в эту тему.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 16:18
#15
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Можно на C++ мне без разницы, сможете - напишите
Andryshok вне форума  
 
Непрочитано 15.07.2010, 17:02
#16
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Упрощенный вариант на C#:
Код:
[Выделить все]
    static void Main() {
      AcadApplication acad = GetAcadInstance();
      if (acad == null) return;
      AcadDocument doc = acad.ActiveDocument;
      AcadSelectionSet set = doc.PickfirstSelectionSet;
      foreach (AcadEntity ent in set) {
        double[] pts;
        switch (ent.ObjectName) {
          case "AcDb2dPolyline":
            AcadPolyline poly = ent as AcadPolyline;
            pts = poly.Coordinates as double[]; 
            for (int i=0; i < pts.GetLength(0) / 3; i++) {
              double x = pts[i];
              double y = pts[i+1];
              double z = pts[i+2];
            }
            break;
          case "AcDbPolyline":
            AcadLWPolyline lwpoly = ent as AcadLWPolyline;
            pts = lwpoly.Coordinates as double[];
            for (int i = 0; i < pts.GetLength(0) / 2; i++) {
              double x = pts[i];
              double y = pts[i + 1];
              double z = 0;
            }
            break;
          case "AcDb3dPolyline":
            Acad3DPolyline poly3d = ent as Acad3DPolyline;
            pts = poly3d.Coordinates as double[];
            for (int i = 0; i < pts.GetLength(0) / 3; i++)  {
              double x = pts[i];
              double y = pts[i + 1];
              double z = pts[i + 2];
            }
            break;
        }
      }
    }
Ссылка, которую дал Олег, тебе не годится, т.к. там используется вариант загрузки приложения внутрь AutoCAD. В этом случае можно использовать другие классы и методы - но это не твой случай. Из внешнего приложения они недоступны.

Последний раз редактировалось Александр Ривилис, 15.07.2010 в 17:10.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.07.2010, 17:08
#17
Andryshok


 
Регистрация: 15.07.2010
Сообщений: 8


Спасибо всем кто откликнулся, думаю что
Andryshok вне форума  
 
Непрочитано 15.07.2010, 17:35
#18
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Я бы не торопился (да и на этом форуме не принято) закрывать тему. Следующим этапом окажется, что:
1) "заказчик" рисует полилинии не в МСК;
2) полилинии могут быть замкнутые и не замкнутые;
3) полилинии могут иметь дуговые сегменты;
4) и т.д. и т.п.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Плучение координат выбранной полилинии на Delphi



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование координат вершин полилинии из мировой системы координат в текущую молодой человек Программирование 1 16.01.2010 22:57
Построение полилинии по каталогу координат AlexVlKatz AutoCAD 3 06.08.2008 12:08
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
Как пересчитать координаты полилинии выбранной nentsel в МСК kp+ Программирование 1 29.07.2005 20:49