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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Разобрать на линии и собрать обратно полилинию

Разобрать на линии и собрать обратно полилинию

Ответ
Поиск в этой теме
Непрочитано 01.10.2008, 11:36 #1
Разобрать на линии и собрать обратно полилинию
bizon2008
 
Регистрация: 01.10.2008
Сообщений: 9

Разобрать на линии и собрать обратно полилинию. Значение вершин известно, мне надо по этим вершинам сделать линиии. А потом опять построить полилиную .Есть что-то типа массива куда бы я мог записать массив точек?
Просмотров: 3767
 
Непрочитано 01.10.2008, 12:21
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Какая полилиния? Легкая или 3-мерная?
Сильно подозреваю, что задача на самом деле звучит совсем не так, как описано...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2008, 12:31
#3
Огурец

Profan
 
Регистрация: 27.04.2005
Москва
Сообщений: 6,752
Отправить сообщение для Огурец с помощью Skype™


_pedit рулит
Огурец вне форума  
 
Непрочитано 01.10.2008, 12:35
#4
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,971


есть список, например '((1 2) (3 2) (1 3)) - вот список координат трёх точек, для работы со списками есть функции - car, cdr, cons и т.д. вот списки - это типа массив в лиспе..
SetQ на форуме  
 
Непрочитано 01.10.2008, 12:39
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Скопировать полилинию на другой слой и расчленить. И программировать не надо.
Profan вне форума  
 
Непрочитано 01.10.2008, 12:55
#6
SetQ

конструктор
 
Регистрация: 21.07.2007
Петрозаводск
Сообщений: 1,971


вопросо был про тип данных..

можно так: explode <выбрать полилинию> select p pedit last yes join p

типа того, только не совсем понятно всё же что нужно сделать )))
SetQ на форуме  
 
Автор темы   Непрочитано 01.10.2008, 14:11
#7
bizon2008


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


Спасибо за ответы.
Задача стоит такого плана. Необходимо найти точку пересечения между контуром образованным полилинией и прямой. Задачу я вижу. Разбиваем полилию на отрезки, с координатами вершин, используя стандартную функцию нахождения пересечений между отрезками, находим точки, собираем полилинию обратно.
bizon2008 вне форума  
 
Непрочитано 01.10.2008, 14:19
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Это не требуется. Используй vla-intersectwith
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.10.2008, 14:23
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Полилинию разбивать не обязательно. Находишь координаты всех вершин (хранятся в DXF-парах с кодом 10), а потом эти координаты используешь в inters.

Добавлено:
Хотя вариант Алексея попроще будет.
Makswell вне форума  
 
Автор темы   Непрочитано 01.10.2008, 14:35
#10
bizon2008


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


А как их можно перебрать, типа в цикле. Точка 1, 2 .... n
bizon2008 вне форума  
 
Автор темы   Непрочитано 01.10.2008, 14:35
#11
bizon2008


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


vla-intersectwith медленно работает
bizon2008 вне форума  
 
Непрочитано 01.10.2008, 14:50
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


bizon2008, да ну??? Ну напиши тогда код, который (для начала) корректно вернет пересечения примитивов, созданных и create-ents1, и create-ents2:
Код:
[Выделить все]
(defun create-ents1 ()
          ; pline:
  (entmakex '((0 . "LWPOLYLINE")
              (100 . "AcDbEntity")
              (100 . "AcDbPolyline")
              (90 . 15)
              (70 . 0)
              (43 . 0.0)
              (38 . 0.0)
              (39 . 0.0)
              (10 50924.0 23018.0)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 35491.4 1003.07)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 50132.6 8187.59)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 44328.9 -2028.92)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 54023.7 1859.94)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.453182)
              (10 56134.2 7858.03)
              (40 . 0.0)
              (41 . 0.0)
              (42 . -0.795905)
              (10 60618.9 11944.6)
              (40 . 0.0)
              (41 . 0.0)
              (42 . -0.366633)
              (10 62531.5 4826.03)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.703208)
              (10 68399.4 -1041.93)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0203942)
              (10 74336.8 2057.68)
              (40 . 0.0)
              (41 . 0.0)
              (42 . -0.856134)
              (10 78359.8 -2951.71)
              (40 . 0.0)
              (41 . 0.0)
              (42 . -0.256264)
              (10 68533.0 -6313.27)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 58046.8 -4335.88)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 43471.5 -9674.83)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 34142.1 -345.383)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (210 0.0 0.0 1.0)
              )
            ) ;_ end of entmakex
          ; xline:
  (entmakex '((0 . "XLINE")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "0")
              (48 . 100.0)
              (100 . "AcDbXline")
              (10 35491.4 -6576.92 0.0)
              (11 0.813893 0.581015 0.0)
              )
            ) ;_ end of entmakex
  ) ;_ end of defun

(defun create-ents2 ()
  (entmakex '((0 . "LWPOLYLINE")
              (100 . "AcDbEntity")
              (100 . "AcDbPolyline")
              (90 . 17)
              (70 . 0)
              (43 . 0.0)
              (38 . 0.0)
              (39 . 0.0)
              (10 38063.5 -9213.44)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 32523.6 9835.42)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 48286.0 -3544.92)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 47230.8 9703.59)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 58442.5 343.944)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 56068.2 13724.3)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 65895.0 9044.46)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 62993.1 19063.2)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 65956.9 24196.6)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 67741.6 13790.2)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 54023.7 14515.2)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 37470.0 -3347.18)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 47758.4 -7631.53)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 44724.6 8253.51)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 54617.3 14.3793)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 53100.4 17151.8)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (10 62465.5 3178.2)
              (40 . 0.0)
              (41 . 0.0)
              (42 . 0.0)
              (210 0.0 0.0 1.0)
              )
            ) ;_ end of entmakex
  (entmakex '((0 . "XLINE")
              (100 . "AcDbEntity")
              (67 . 0)
              (410 . "Model")
              (8 . "0")
              (48 . 100.0)
              (100 . "AcDbXline")
              (10 35491.4 -6576.92 0.0)
              (11 0.813893 0.581015 0.0)
              )
            ) ;_ end of entmakex
  ) ;_ end of defun

(defun get-vla-inters (pline-ent xline-ent / fun_conv)
  (defun fun_conv (lst / res)
    (cond
      ((not lst) nil)
      ((cdddr lst)
       (setq res (cons (list (car lst) (cadr lst) (caddr lst))
                       (fun_conv (cdddr lst))
                       ) ;_ end of cons
             ) ;_ end of setq
       )
      (t (setq res (list lst)))
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (fun_conv (vlax-safearray->list
              (vlax-variant-value
                (vla-intersectwith
                  (vlax-ename->vla-object pline-ent)
                  (vlax-ename->vla-object xline-ent)
                  acextendnone
                  ) ;_ end of vla-IntersectWith
                ) ;_ end of vlax-variant-value
              ) ;_ end of vlax-safearray->list
            ) ;_ end of fun_conv
  ) ;_ end of defun
специально написал тебе пересечение через vla-intersectwith
Пример вызова:
Код:
[Выделить все]
(setq pl (car(entsel"\npline:")) xl(car(entsel"\nxline")))
(get-vla-inters pl xl)
Да, вот еще что, учти, что в первой полилинии дуговые сегменты.
После выполнения такой задачи уже можно будет и скорости замерять.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.10.2008, 15:27
#13
bizon2008


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


Спасибо. Значить я неправильно понимаю данную команду. Пойду рыть.
bizon2008 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Разобрать на линии и собрать обратно полилинию

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Несплошные линии, X-refы и... задача Vova AutoCAD 6 20.04.2018 16:14
Как объединит линии в полилинию ?(не замкнутое линии) qkq AutoCAD 19 30.03.2007 12:33
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57
Размеры разбиты, можно ли собрать обратно. Lenich AutoCAD 21 27.12.2004 18:22