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

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

AutoLisp как получить координаты прямоугольника?

Ответ
Поиск в этой теме
Непрочитано 25.11.2013, 10:27 #1
AutoLisp как получить координаты прямоугольника?
yline
 
Регистрация: 25.11.2013
Сообщений: 2

Пытаюсь сделать так:

(defun C:MY (/)
(setq aa0 (entget(ssname (ssget "_:S") 0)))
(setq aax (cadr (assoc 10 aa0)))
...

Но у прямоугольника несколько DXF 10, как позвожно получить координаты нижней левой точки и верхней правой, требуется для того, чтобы вычислить высоту и ширину прямоугольника.
Просмотров: 3600
 
Непрочитано 25.11.2013, 12:12
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


(vla-getboundingbox...) - координаты указанных точек габаритного контейнера любого примитива (ну или взять все точки и вычислить самому)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 25.11.2013, 12:16
#3
Кулик Алексей aka kpblc
Moderator

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


(с)перто:
Код:
[Выделить все]
                             ;|
*    Функция получения координат легкой полилинии (LWPOLYLINE) в WCS. Возвращает
* список 3Д-точек
*    Автор: BOZ (http://www.autocad.ru/cgi-bin/f1/board.cgi?t=26461HC)
*    Оригинальный код:
|;

(defun lwpoly_vert (lwpoly / plinee elev vnv)
  (setq  plinee (entget lwpoly)
  elev   (cdr (assoc 38 plinee))
  vnv    (cdr (assoc 210 plinee))
  ) ;_ end of setq
  (mapcar
    (function (lambda (x) (trans (list (cadr x) (caddr x) elev) vnv 0)))
    (vl-remove-if-not (function (lambda (x) (= (car x) 10))) plinee)
    ) ;_ end of mapcar
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.11.2013, 15:08
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Дополню ответ Алексея примером
Код:
[Выделить все]
;|
*    Функция получения координат легкой полилинии (LWPOLYLINE) в WCS. Возвращает
* список 3Д-точек
*    Автор: BOZ (http://www.autocad.ru/cgi-bin/f1/board.cgi?t=26461HC)
*    Оригинальный код:
|;

(defun lwpoly_vert (lwpoly / plinee elev vnv)
  (setq  plinee (entget lwpoly)
  elev   (cdr (assoc 38 plinee))
  vnv    (cdr (assoc 210 plinee))
  ) ;_ end of setq
  (mapcar
    (function (lambda (x) (trans (list (cadr x) (caddr x) elev) vnv 0)))
    (vl-remove-if-not (function (lambda (x) (= (car x) 10))) plinee)
    ) ;_ end of mapcar
  ) ;_ end of defun
;| ! ***************************************************************************
;; !           lib:pt_extents
;; ! ***************************************************************************
;; ! Function : Возвращает границы MIN, MAX X,Y,Z списка точек
;; ! Argument : 'vlist' - Список точек
;; ! Returns  : Список точек (ЛевНижн ПравВерхн)
;; ! ***************************************************************************|;
(defun  lib:pt_extents (vlist / tmp)
  (setq tmp (apply 'mapcar (cons 'list vlist)))
  (list (mapcar '(lambda(x)(apply 'min x)) tmp)(mapcar '(lambda(x)(apply 'max x)) tmp)));_defun
Пример использования
Код:
[Выделить все]
(defun C:TEST ()
  (setq ss (ssget "_:E:S" '((0 . "LWPOLYLINE")))) ;_выбрали полилинию
  (setq lw (ssname ss 0)) ;_извлекли из набора полилинию
  (setq lst (lwpoly_vert lw)) ;_получили координаты вершин полилинии
  (setq min-max (lib:pt_extents lst)) ;_получили список ((min_X min_Y min_Z)(max_X max_Y max_Z))
  )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 26.11.2013, 06:50
#5
yline


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


Спасибо вам огромное за помощь, все получилось. AutoLisp просто чудо.
yline вне форума  
 
Непрочитано 26.11.2013, 11:13
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


yline, Можно еще предварительно проверить, а прямоугольник ли выбранная полилиния?
программно определить фигуру
На всякий случай выкладываю здесь.
Команда DZ8.
Программно распознаются:
1. Параллелограмм (и его разновидности ромб, квадрат, прямоугольник)
2. Трапеция
3. Треугольник (и его разновидности равносторонний, равнобедренный, прямоугольный)
4. Круг (состоящий из 2-х дуговых сегментов полилинии)
Текст сдабдил достаточно подробными (надеюсь) коментариями
Вложения
Тип файла: lsp dz8.lsp (11.0 Кб, 88 просмотров)
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 27.11.2013 в 09:28.
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp как получить координаты прямоугольника?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
координаты резинового прямоугольника evgm Программирование 5 19.06.2009 11:28
Как получить координаты точек отображенных на четеже в виде таблици?? nix-- AutoCAD 10 22.05.2009 13:41
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01
Координаты области выделения Тим Боль Программирование 6 04.11.2007 16:52
Как перевести координаты Модели в координаты Листа? ===AAA=== Программирование 6 24.10.2007 22:09