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

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

Поставить точки в местах пересечений

Ответ
Поиск в этой теме
Непрочитано 10.07.2009, 23:28 #1
Поставить точки в местах пересечений
Юта
 
Регистрация: 10.07.2009
Сообщений: 14

Здравствуйте!
Проштудировала все по пересечениям и в dwg.ru и в caduser.ru.
Даже научилась в лиспе ставить точку на пересечении двух примитивов.
А дальше туплю, прошу помочь кодом. Задача такая:

В пространстве модели 2D даны точки рельефа местности, скачанные с тахеометра. Тут же отрисован котлован сложной формы - это всего две полилинии в слое "бровка" и "подошва". Обе полилинии имеют Z=0.
Теперь с помощью программы "Triangulate" (если не ошибаюсь, Евгения Елпанова) рисую сетку по точкам. Эта сетка находится в слое "Triangulate".

И вот тут мне нужна программа, автоматом ставящая точки на пересечениях триангуляционной сетки и линий котлована. Точки должны иметь Z, соответствующий месту пересечения сетки и располагаться соответствено в слоях "бровка-рельеф" и "подошва-рельеф".

Заранее благодарю откликнувшихся. Заодно и поучусь ЛИСПу на конкретном примере.

p.s. Работаю в AutoCAD 2010, иногда в 2008

Последний раз редактировалось Юта, 10.07.2009 в 23:35.
Просмотров: 7449
 
Непрочитано 11.07.2009, 10:06
#2
Дима_

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


Пример в студию с указанием где должны появиться точки.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.07.2009, 08:38
#3
Юта


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


Точки должны появиться на полилинии слоя "Бровка".
В конечном счете, имея эти точки я надеюсь точнее подсчитать объем выбранного грунта из котлована при помощи программы VOLUME 1.5.vlx.
А что вы порекомендуете? (конечно кроме Геоникса, Сивила, Кредо и иже с ними. Только средствами Автокада).
Надеюсь, чертеж загрузился. Жму кнопку "Ответить"
Вложения
Тип файла: rar Котлован_объем.rar (1,007.0 Кб, 99 просмотров)

Последний раз редактировалось Юта, 13.07.2009 в 09:08. Причина: Не загрузился чертеж
Юта вне форума  
 
Непрочитано 13.07.2009, 12:21
#4
Дима_

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


В вашем примере полилния в слое бровка с сеткой не пересекаеться.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 13.07.2009, 12:27
#5
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Да, уж.
Масштаб 1:1, объём тоже в кубических миллиметрах мерить будете?
Если всё правильно понял то см. DWG, если не правельно то вот вам код в руки

Код:
[Выделить все]
 
(defun c:g (/ nabor i spv)
  (setq nabor (ssget "_:L" '((0 . "LWPOLYLINE")))
 i     -1
  )
  (if nabor
    (repeat (sslength nabor)
      (VL-CMDF "_vscurrent"
        "_h"
      )
      (setq
 spv (mapcar
       'cdr
       (vl-remove-if-not
  '(lambda (x) (= (car x) 10))
  (entget (ssname nabor
    (setq i (1+ i))
   )
  )
       )
     )
      )
      (while spv
 (entmakex
   (list
     '(0 . "POINT")
     '(100 . "AcDbEntity")
     '(370 . 0)
     '(100 . "AcDbPoint")
     (cons 10 (geo_z (car spv)))
   )
 )
 (setq spv (cdr spv))
      )
    )
  )
  (VL-CMDF "_vscurrent"
    "_2"
  )
)
(defun geo_z (T1 / 3Df A B C dBx dBy dBz dCx dCy dCz dT1x dT1y Zx Zy)
  (setq 3Df  (ssget "_C"
      (polar t1 5.49778714 0.0001414214)
      (polar t1 2.35619449 0.0001414214)
      '((0 . "3DFACE"))
      )
 A    (CDR
        (ASSOC 11 (ENTGET (SSNAME 3Df 0)))
      )
 B    (CDR
        (ASSOC 12 (ENTGET (SSNAME 3Df 0)))
      )
 C    (CDR
        (ASSOC 13 (ENTGET (SSNAME 3Df 0)))
      )
 dBx  (- (nth 0 B) (nth 0 A))
 dBy  (- (nth 1 B) (nth 1 A))
 dBz  (- (nth 2 B) (nth 2 A))
 dCx  (- (nth 0 C) (nth 0 A))
 dCy  (- (nth 1 C) (nth 1 A))
 dCz  (- (nth 2 C) (nth 2 A))
 dT1x (- (nth 0 T1) (nth 0 A))
 dT1y (- (nth 1 T1) (nth 1 A))
 Zy   (/ (- (* dCz dBx) (* dCx dBz)) (- (* dBx dCy) (* dCx dBy))) ;_изменение Z по Y
 Zx   (/ (- dBz (* dBy Zy)) dBx) ;_изменение Z по X
 T1z  (abs (+ (nth 2 A) (* dT1x Zx) (* dT1y Zy)))
 t1   (list (nth 0 T1) (nth 1 T1) T1z)
  )
)
Вложения
Тип файла: dwg
DWG 2007
Котлован_объем_recover.dwg (1.43 Мб, 1480 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 13.07.2009, 12:38
#6
Юта


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


Дима_, конечно не пересекаются, я это прекрасно понимаю.
Полилиния "Бровка" КАК БЫ пересекается с линиями триангуляции, если смотреть в плане (типа "сверху").
Вот именно в этих-то как бы пересечениях мне и нужны точки с высотными отметками триангуляционных линий в месте "пересечения".

Disney, спасибо, загружаю код. На чертеже не то, что хотелось.

Увы, код работает неправильно. Он ставит точки на углах каких только возможно, даже на углах рамок, где указаны высотные отметки. А мне надо - прямо на полилинии "Бровка", там, где существует видимое в плане "пересечение" с линиями триангуляции.

Можно даже упростить код: не обязательно использовать слой "Бровка", а просто спросить: "Укажите полилинию". А вот линиии триангуляции - обязательно в слое "Triangulate".

Спасибо вам за участие, жду ответа.

Последний раз редактировалось Юта, 13.07.2009 в 12:45. Причина: После загрузки и проверки кода
Юта вне форума  
 
Непрочитано 13.07.2009, 14:44
#7
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


А может можно еще проще: в 3D модели по всем имеющимся точкам (в том числе и проставленным вручную по дну котлована) создать 3D тело и посчитать его объем. Хотя это уже другая тема - про объем, а не про точки. Но все равно, кто знает, откликнитесь!
Малявка вне форума  
 
Непрочитано 14.07.2009, 08:15
#8
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


[FONT=Calibri]Не пойму, почему на пересечении с триангуляционной сеткой?[/FONT]
[FONT=Calibri]Проставил точки по бровке и подошве с шагом 4м, и обрати внимание на триангуляционные 3Dface-ы, я их руками подправил так чтобы они не пересекались с бровкой подошвой!!![/FONT]
[FONT=Calibri]Если опять не так, то вот тебе код, и тыкай каждую вручную, где тебе хочется…[/FONT]
Код:
[Выделить все]
 
(defun c:g (/ poin_t)
  (while (setq poin_t (getpoint "Укажите место вставки точки:"))
    (VL-CMDF "_vscurrent"
      "_h"
    )
    (entmakex
      (list
 '(0 . "POINT")
 '(100 . "AcDbEntity")
 '(370 . 0)
 '(100 . "AcDbPoint")
 (cons 10 (geo_z poin_t))
      )
    )
    (VL-CMDF "_vscurrent"
      "_2"
    )
  )
 
)
(defun geo_z (T1 / 3Df A B C dBx dBy dBz dCx dCy dCz dT1x dT1y Zx Zy)
  (setq 3Df  (ssget "_C"
      (polar t1 5.49778714 0.0001414214)
      (polar t1 2.35619449 0.0001414214)
      '((0 . "3DFACE"))
      )
 A    (CDR
        (ASSOC 11 (ENTGET (SSNAME 3Df 0)))
      )
 B    (CDR
        (ASSOC 12 (ENTGET (SSNAME 3Df 0)))
      )
 C    (CDR
        (ASSOC 13 (ENTGET (SSNAME 3Df 0)))
      )
 dBx  (- (nth 0 B) (nth 0 A))
 dBy  (- (nth 1 B) (nth 1 A))
 dBz  (- (nth 2 B) (nth 2 A))
 dCx  (- (nth 0 C) (nth 0 A))
 dCy  (- (nth 1 C) (nth 1 A))
 dCz  (- (nth 2 C) (nth 2 A))
 dT1x (- (nth 0 T1) (nth 0 A))
 dT1y (- (nth 1 T1) (nth 1 A))
 Zy   (/ (- (* dCz dBx) (* dCx dBz)) (- (* dBx dCy) (* dCx dBy))) ;_изменение Z по Y
 Zx   (/ (- dBz (* dBy Zy)) dBx) ;_изменение Z по X
 T1z  (+ (nth 2 A) (* dT1x Zx) (* dT1y Zy))
 t1   (list (nth 0 T1) (nth 1 T1) T1z)
  )
)
Вложения
Тип файла: dwg
DWG 2007
Котлован_объем_2.dwg (2.21 Мб, 1460 просмотров)
__________________
Почему все вдруг становятся умными, когда уже не надо?

Последний раз редактировалось Disney, 14.07.2009 в 08:23.
Disney вне форума  
 
Автор темы   Непрочитано 14.07.2009, 10:18
#9
Юта


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


Вручную точки я и без программы проставлю. Я хочу, чтобы массу точек не тыкать по всему чертежу.
Если не сложно дайте такой код:
Программа спрашивает: "Укажите бровку котлована". Я тыкаю в линию (или полилинию). И ВСЁ! Программа сама проставляет точки на кажущихся пересечениях указанной мной линии и всех линий триангуляции (слой "triangulate").
Спасибо.
p.s. А эти точки должны принадлежать слою "бровка-рельеф" и иметь высотную отметку, как на линии триангуляции.

Последний раз редактировалось Юта, 14.07.2009 в 10:21. Причина: Добавление p.s.
Юта вне форума  
 
Непрочитано 14.07.2009, 10:38
#10
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Юта Посмотреть сообщение
Вручную точки я и без программы проставлю.
А, отметку для точки вручную где возьмёшь?
Цитата:
Сообщение от Юта
Если не сложно дайте такой код:
Не сложно, но из принципа, пока не объясниш, зачем???
и ты же сама писала в первом посте
Цитата:
Сообщение от Юта
Даже научилась в лиспе ставить точку на пересечении двух примитивов.
Вот и ставь, раз умеешь...
Цитата:
Сообщение от Юта
линий триангуляции
Да не линии эта, а рёбра (кромки) 3Dface-ов (3D граней),
а как их перевести в линии, есть лисп, предоставленный Владимиром Азарко, его ты можешь найти перейдя по ссылки в моём первом тебе ответе в такой же теме на Caduser.ru
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 14.07.2009, 10:47
#11
Юта


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


Цитата:
А, отметку для точки вручную где возьмёшь?
Отметка ставится автоматом. Я нажимаю кнопку "Точка" и расставляю точки по всем пересечениям. Потом проверяю свойства точек - отметки стоят как надо.

Цитата:
Вот и ставь, раз умеешь...
Вот как я умею:
(defun C:IS ()
(setq p1 (getpoint "\nНачальная точка первой линии:\n"))
(setq p2 (getpoint "\nКонечная точка первой линии:\n"))
(command "_.line" "_none" p1 "_none" p2 "")
(setq p3 (getpoint "\nНачальная точка второй линии:\n"))
(setq p4 (getpoint "\nКонечная точка второй линии:\n"))
(command "_.line" "_none" p3 "_none" p4 "")
(setq px (inters p1 p2 p3 p4))
(command "_point" px)
);defun

А чтобы указать на линию (полилинию) - еще не научилась. Трудный для меня ЛИСП.

Цитата:
Да не линии эта, а рёбра (кромки) 3Dface-ов (3D граней),
У меня, то есть не у меня, а на моем 2D чертеже (разъяснение для блондинов) не ребра, а именно линии.
Юта вне форума  
 
Непрочитано 15.07.2009, 12:39
#12
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Ютачка, вот объясни, пожалуйста, мне идиоту,
почему именно на линиях триангуляционной сетки
тем более, что эта сетка не является константой, в зависимости от: алгоритма, очередности точек, и пр. факторов, она может иметь различную конфигурацию, зачастую не совсем адекватно отображающую действительность, что в свою очередь может привести к получению неверных данных, в частности объёма земляных масс
Я будучи геодезистом, не могу спокойно смотреть на это безобразие
Цитата:
Геодезия
(греч. geōdaisía, от gē — Земля и dáiō — делю, разделяю), наука об определении фигуры, размеров и гравитационного поля Земли и об измерениях на земной поверхности для отображения её на планах и картах, а также для проведения различных инженерных и народно-хозяйственных мероприятий. Название "геодезия" ("землеразделение") указывает на те первоначальные практические задачи, которые обусловили её возникновение, но не раскрывает её современных научных проблем и практических задач, связанных с разнообразными потребностями человеческой деятельности.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Автор темы   Непрочитано 15.07.2009, 13:31
#13
Юта


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


Потому что программа подсчета объема котлована VOLUME 1.2.vlx (или 1.5.vlx - без разницы) требует эти точки по краю бровки котлована. На разных высотах, соответственно рельефу. А точки съемки находятся очень далеко от бровки (типа фиг знает где). Вот я и хочу (точнее уже, только ручками) проставить эти точечки. Хотелось ЛИСПом, да время ушло. И ребята тут объяснили, что с таким кодом геморроя много
Юта вне форума  
 
Непрочитано 15.07.2009, 14:14
#14
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Юта Посмотреть сообщение
Потому что программа подсчета объема котлована VOLUME 1.2.vlx (или 1.5.vlx - без разницы) требует эти точки по краю бровки котлована. На разных высотах, соответственно рельефу. А точки съемки находятся очень далеко от бровки (типа фиг знает где). Вот я и хочу (точнее уже, только ручками) проставить эти точечки. Хотелось ЛИСПом, да время ушло. И ребята тут объяснили, что с таким кодом геморроя много
[FONT='Verdana','sans-serif']Вот, я тебе выкладывал файл, в котором, точки по бровке и подошве через 4м, ты просто не можешь понять, как их там нашли, вне линий треангуляции, потому что считаешь, что триангуляционная сеть состоит из линий, а она состоит из 3D граней, поэтому отметку Z можно определить в любой точки поверхности, построенной программой triangulate.
Чтобы понять, что такое поверхность, переключи визуальный стиль на "Реалистичный" или "Концептуальный", и покрути свой чертёж 3D орбитой.[/FONT]
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 15.07.2009, 15:47
#15
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


юта, а у вас откос котлована всегда 90 градусов чтоли (отвесный)?
Sleekka вне форума  
 
Автор темы   Непрочитано 15.07.2009, 16:01
#16
Юта


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


никогда такого не было. Мы шпунты не ставим.
На чертеже откос 45-60 градусов.
Юта вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поставить точки в местах пересечений

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение точки пересечения на 3D сети Electa AutoCAD 15 16.12.2008 18:36
как в solidworks поставить "групповой" размер от одной точки покругу? jeniabell SolidWorks 2 15.01.2008 14:38
DwgRuLispLib: Геометрия. Принадлежность точки дуге VVA Библиотека функций 3 10.12.2007 12:41
как в CIVIL 3D точки нанесенные в 3-ке - перенести в точки п maksimys AutoCAD 3 23.08.2007 14:13
Lisp - проблема с получением точки? Кулик Алексей aka kpblc LISP 3 08.09.2006 15:14