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

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

Лисп по 4 точкам распределения прорисовывается прямоугольник

Ответ
Поиск в этой теме
Непрочитано 01.08.2014, 09:27 #1
Лисп по 4 точкам распределения прорисовывается прямоугольник
dextron3
 
проектировшик
 
СССР
Регистрация: 01.01.2007
Сообщений: 5,143

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

Алгоритм выбираем 4 точки по ним рисуется прямоугольник соответсвенно.

Изображения
Тип файла: jpg Snap1.jpg (21.7 Кб, 236 просмотров)
Тип файла: jpg Snap2.jpg (47.9 Кб, 235 просмотров)

__________________
инженер проектировшик с опттом программа авто гад образование высшие
Просмотров: 2517
 
Непрочитано 01.08.2014, 10:44
#2
Дима_

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


а если отрезки между прямыми не перпендикулярны?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.08.2014, 10:47
#3
Кулик Алексей aka kpblc
Moderator

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


Дополнительно: а если еще и точки не лежат в одной плоскости? А если отрезки неперпендикулярны?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 01.08.2014, 12:44
#4
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Ответ: они всегда перпендикулярны, это раскладка стержней, тоесть под каким углом бы стержень не лежал стрелочка будет исключительно перпендикулярна стержню (см. приложение СПДС раскладка стержней), z=0 всегда даже если точки в разных плоскостях, хотя там не точки а концы отрезка прямой и стрелочки, прямоугольник должен проецироваться на z=0
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 01.08.2014, 14:37
#5
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,604


Почему бы сразу не пойти дальше?
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Непрочитано 01.08.2014, 14:43
#6
Кулик Алексей aka kpblc
Moderator

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


Сорри, темой ошибся
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.08.2014, 15:01
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Большая просьба доогласить фронт работ и размер благодарности, а то ничего не понятно. Собственно для поиска исполнителя есть соответствующая ветка...
gomer вне форума  
 
Непрочитано 01.08.2014, 15:05
#8
Дима_

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


Цитата:
Сообщение от dextron3 Посмотреть сообщение
нужно строить прямоугольник чтобы потом по его площади находить длину
Здаеться мне, что это скорее полумера и на самом деле не то, что нужно, но ладно
Цитата:
Сообщение от dextron3 Посмотреть сообщение
Алгоритм выбираем 4 точки по ним рисуется прямоугольник соответсвенно.
На - запускать kv - точек указывай сколько хочешь - после чего правую кнопку - рисует прямоугольник по крайним координатам:
Код:
[Выделить все]
 (vl-load-com)
(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
  (entmakex (append
             (list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
             (if (= (type c) 'list)
                 (vl-remove nil (list
                                 (if (car c) (cons 70 1) (cons 70 0))
                                 (if (cadr c) (cons 8 (cadr c)))
                                 (if (caddr c) (cons 62 (caddr c)))))
                 (list (if c (cons 70 1) (cons 70 0))))
             (mapcar '(lambda (x) (cons 10 x)) lst))))
(defun c:kv()
  ((lambda (frec doc)
     ((lambda (lst)
        (vla-startundomark doc)
        ((lambda (lx ly)
           ((lambda (x1 x2 y1 y2)
              (pln (list (list x1 y1)
                         (list x2 y1)
                         (list x2 y2)
                         (list x1 y2)) T))
            (apply 'min lx)
            (apply 'max lx)
            (apply 'min ly)
            (apply 'max ly)))
         (mapcar 'car lst)
         (mapcar 'cadr lst))
        (vla-endundomark doc))
      (frec (getpoint))))
   (lambda (pt) (if pt (cons pt (frec (getpoint)))))
   (vla-get-activedocument(vlax-get-acad-object))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 01.08.2014, 15:22
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Дима_, ну тогда уж так, при указании двух точек рисуется прямоугольник, при указании последующих точек прямоугольник изменяется согласно габаритам указанных точек...
gomer вне форума  
 
Непрочитано 01.08.2014, 16:11
#10
Дима_

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


А почему-бы и нет:
Код:
[Выделить все]
 (vl-load-com)
(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
  (entmakex (append
             (list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
             (if (= (type c) 'list)
                 (vl-remove nil (list
                                 (if (car c) (cons 70 1) (cons 70 0))
                                 (if (cadr c) (cons 8 (cadr c)))
                                 (if (caddr c) (cons 62 (caddr c)))))
                 (list (if c (cons 70 1) (cons 70 0))))
             (mapcar '(lambda (x) (cons 10 x)) lst))))
(defun c:kv()
  ((lambda (frec bb-pl doc)
     (vla-startundomark doc)
     (frec nil '() (getpoint))
     (vla-endundomark doc))
  (lambda (ent lst pt)
    (if pt ((lambda (n-lst)
               (if ent (entdel ent))
               (frec (if lst (bb-pl n-lst)) n-lst (getpoint)))
            (cons pt lst))))
  (lambda (lst)
        ((lambda (lx ly)
           ((lambda (x1 x2 y1 y2)
              (pln (list (list x1 y1)
                         (list x2 y1)
                         (list x2 y2)
                         (list x1 y2)) T))
            (apply 'min lx)
            (apply 'max lx)
            (apply 'min ly)
            (apply 'max ly)))
         (mapcar 'car lst)
         (mapcar 'cadr lst)))
   (vla-get-activedocument(vlax-get-acad-object))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.08.2014, 17:23
#11
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Дима_, спасибо, а когда под наклоном область распределения находится почему прямоугольник прямо а не под углом рисует?
Изображения
Тип файла: jpg Snap1.jpg (58.1 Кб, 163 просмотров)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 01.08.2014, 17:37
#12
Дима_

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


Потому что ТЗ надо писать полней... тут еще много может быть если...
з.ы. подправтье у кого желание есть - я домой...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 01.08.2014, 17:44
#13
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Хотя и за это спасибо
Изображения
Тип файла: jpg Snap1.jpg (232.7 Кб, 169 просмотров)
Тип файла: jpg Snap2.jpg (69.3 Кб, 156 просмотров)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 01.08.2014, 19:10
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


по трем точкам без прикрас, лень писать по человечески...
Код:
[Выделить все]
 (defun c:rect3p ()
  (while (and (setq p1 (getpoint "\n1: "))
              (setq p2 (getpoint "\n2: "))
              (setq p3 (getpoint "\n3: "))
         )
    (setq a0 (* 0.5 pi)
          a1 (angle p2 p1)
          a2 (+ a1 a0)
          a3 (- a1 a0)

          p4 (polar p3 a2 1.)
          p5 (inters p1 p2 p3 p4 nil)

          di (distance p3 p5)
    )

    ((lambda (lst)
       (entmake
         (append
           (list
             '(0 . "LWPOLYLINE")
             '(100 . "AcDbEntity")
             '(100 . "AcDbPolyline")
             (cons 90 (length lst))
             '(70 . 1)
             '(210 0.0 0.0 1.0)
           )
           (mapcar '(lambda (x) (cons 10 x)) lst)
         )
       )
     )
      (list
        (polar p1 a3 di)
        (polar p2 a3 di)
        (polar p2 a2 di)
        (polar p1 a2 di)
      )
    )
  )
)

Последний раз редактировалось gomer, 01.08.2014 в 19:16.
gomer вне форума  
 
Непрочитано 04.08.2014, 12:22
#15
Дима_

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


Видимо лень всем (гомер, как я понял сделал только для симетричных), держи указываешь вначале концы одного отрезка, затем другого:
Код:
[Выделить все]
 (vl-load-com)
(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
  (entmakex (append
             (list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
             (if (= (type c) 'list)
                 (vl-remove nil (list
                                 (if (car c) (cons 70 1) (cons 70 0))
                                 (if (cadr c) (cons 8 (cadr c)))
                                 (if (caddr c) (cons 62 (caddr c)))))
                 (list (if c (cons 70 1) (cons 70 0))))
             (mapcar '(lambda (x) (cons 10 x)) lst))))
(defun c:kv()
  ((lambda (pt1 pt2 pt3 pt4 doc)
     (vla-startundomark doc)
     (pln ((lambda (centr)
              (list (polar pt2 (angle pt4 pt3) (distance centr pt3))
                    (polar pt2 (angle pt3 pt4) (distance centr pt4))
                    (polar pt4 (angle pt2 pt1) (distance centr pt1))
                    (polar pt1 (angle pt4 pt3) (distance centr pt3))))
           (inters pt1 pt2 pt3 pt4))
          T)
     (vla-endundomark doc))
   (getpoint "\nPt1: ")
   (getpoint "\nPt2: ")
   (getpoint "\nPt3: ")
   (getpoint "\nPt4: ")
   (vla-get-activedocument(vlax-get-acad-object))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 08.08.2014, 10:16
#16
roaa

ОПС
 
Регистрация: 29.03.2012
Kazakhstan
Сообщений: 128


посмотри тему http://forum.dwg.ru/showthread.php?t=107683
roaa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп по 4 точкам распределения прорисовывается прямоугольник

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прямоугольник по 3 точкам Neznayka AutoCAD 44 11.10.2021 15:04
VBA Прямоугольник по 2 точкам ut2010 Программирование 4 15.10.2008 22:59