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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Координаты точки пересечения line и pline (LISP)

Координаты точки пересечения line и pline (LISP)

Ответ
Поиск в этой теме
Непрочитано 09.07.2007, 23:05 #1
Координаты точки пересечения line и pline (LISP)
paradoxvaha
 
проектирование противооползневых сооружений
 
Yalta
Регистрация: 06.04.2007
Сообщений: 50

Помогите пожалуйста с таким вопросом - мне необходимо получить координаты точки пересечения линии и полилини, у меня что то не получается, пробовал через vla-intersectwith, но я незнаю алгоритма и вообще не шарю как работать с vla функциями. Может кто знает как это сделать попроще? буду очень благодарен. (если не трудно, можно было бы описать решение, если такое найдется...)
[ATTACH]1184007885.rar[/ATTACH]
Просмотров: 6802
 
Непрочитано 09.07.2007, 23:32
#2
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun int (/ adoc ent1 ent2 int_lst res _kpblc-conv-list-to-3dpoints)

  (defun _kpblc-conv-list-to-3dpoints (lst / res)
                                      ;|
*    Функция конвертации списка чисел в список 3-мерных точек.
*    Параметры вызова:
*	lst	список чисел
*    Примеры вызова:
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5 6)) ;-> ((1 2 3) (4 5 6))
(_kpblc-conv-list-to-3dpoints '(1 2 3 4 5))   ;-> ((1 2 3) (4 5 0.))
|;
    (cond
      ((not lst)
       nil
       )
      (t
       (setq res (cons (list (car lst)
                             (if (cadr lst)
                               (cadr lst)
                               0.
                               ) ;_ end of if
                             (if (caddr lst)
                               (caddr lst)
                               0.
                               ) ;_ end of if
                             ) ;_ end of list
                       (_kpblc-conv-list-to-3dpoints (cdddr lst))
                       ) ;_ end of cons
             ) ;_ end of setq
       )
      ) ;_ end of cond
    res
    ) ;_ end of defun

  (vl-load-com)
  (if (and (not (vl-catch-all-error-p
                  (vl-catch-all-apply
                    '(lambda ()
                       (setq ent1
                              (car
                                (entsel
                                  "\nУкажите примитив 1 (кроме блока и внешней ссылки) <Отмена> : "
                                  ) ;_ end of entsel
                                ) ;_ end of car
                             ) ;_ end of setq
                       ) ;_ end of lambda
                    ) ;_ end of vl-catch-all-apply
                  ) ;_ end of vl-catch-all-error-p
                ) ;_ end of not
           ent1
           (not (member (cdr (assoc 0 (entget ent1))) '("INSERT")))
           (not (vl-catch-all-error-p
                  (vl-catch-all-apply
                    '(lambda ()
                       (setq ent2
                              (car
                                (entsel
                                  "\nУкажите примитив 2 (кроме блока и внешней ссылки) <Отмена> : "
                                  ) ;_ end of entsel
                                ) ;_ end of car
                             ) ;_ end of setq
                       ) ;_ end of lambda
                    ) ;_ end of vl-catch-all-apply
                  ) ;_ end of vl-catch-all-error-p
                ) ;_ end of not
           ent2
           (not (member (cdr (assoc 0 (entget ent2))) '("INSERT")))
           ) ;_ end of and
    (progn
      (if (> (vlax-safearray-get-u-bound
               (setq int_lst (vlax-variant-value
                               (vla-intersectwith
                                 (vlax-ename->vla-object ent1)
                                 (vlax-ename->vla-object ent2)
                                 acextendnone
                                 ) ;_ end of vla-IntersectWith
                               ) ;_ end of vlax-variant-value
                     ) ;_ end of setq
               1
               ) ;_ end of vlax-safearray-get-u-bound
             ) ;_ end of >
        (setq res (_kpblc-conv-list-to-3dpoints (vlax-safearray->list int_lst)))
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  res
  ) ;_ end of defun
Вызов: (int)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2007, 12:56
#3
paradoxvaha

проектирование противооползневых сооружений
 
Регистрация: 06.04.2007
Yalta
Сообщений: 50
<phrase 1=


Спасибо огромное! Всё работает, но как работает - это для меня останется секретом. А вообще где можно почитать по vla функциям? непонятно как они работают..
paradoxvaha вне форума  
 
Непрочитано 10.07.2007, 13:04
#4
Кулик Алексей aka kpblc
Moderator

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


Справка; Н.Н.Полещук и П.Лоскутов, "AutoLISP и VisualLISP в среде AutoCAD" (BHV, Спб, 2006); инет (к примеру - http://www.cad.dp.ua/stats/doc2.php#part1)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Координаты точки пересечения line и pline (LISP)

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

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