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

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

Поиск блоков пересекающих полилинию

Ответ
Поиск в этой теме
Непрочитано 03.08.2015, 16:07 #1
Поиск блоков пересекающих полилинию
tujn08
 
Регистрация: 26.12.2013
Сообщений: 283

Привет!
Помогите найти/написать функцию:
1) есть полилинии
2) есть дин.блоки
3) есть 2Д точки: начало и конец на полилинии (между точками могут быть несколько вершин). Эти точки могу являться как началом и концом полилинии, так и просто точки на линии

надо найти все блоки у которых точка вставки блока находится на участке п.3
Просмотров: 22278
 
Непрочитано 03.08.2015, 17:53
#2
Кулик Алексей aka kpblc
Moderator

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


Ну и в чем собственно вопрос? Получить точку вставки дин.блока, найти ближайшую к нему на полилинии, сверить расстояние с 0 (возможно, с некоторой точностью).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.08.2015, 18:39
#3
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Опять шлейф с пожарными датчиками?

----- добавлено через ~2 мин. -----
http://forum.dwg.ru/showthread.php?t=82243
Nike вне форума  
 
Автор темы   Непрочитано 03.08.2015, 20:23
#4
tujn08


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
точку вставки дин.блока, найти ближайшую к нему на полилинии,
Не подходит.
Вспомним задачу про короткий "путь между станциями метро", где станции это блоки, "метро"(если так можно выразиться- рельсы) - это полилинии.
Функцию по нахождению пути по максимально трем полилиниям написал. Одна полилиния может пересекать несколько блоков (переход высоты с отметки на отметку- например арка через догору). Нужно найти только те блоки которые попадают в определенный отрезок (в большинстве случаев это не вершины линии).

Цитата:
Сообщение от Nike Посмотреть сообщение
Опять шлейф с пожарными датчиками?
Почти - кабельный журнал под несколько разделов сразу см.выше ответ.

----- добавлено через 45 сек. -----
Блоки с переходом высоты тут не размещал еще
Вложения
Тип файла: dwg
DWG 2010
тестовый_файл_для_cable_magazine 24_07_15 - копия.dwg (126.1 Кб, 1477 просмотров)
tujn08 вне форума  
 
Непрочитано 03.08.2015, 20:32
#5
Кулик Алексей aka kpblc
Moderator

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


tujn08, ну йопырысыты! Ты просил алгоритм (поскольку ни кода не предоставил с указанием места "на котором споткнулся", ни языка не обозначил) - я тебе его дал. Этого что, мало?

----- добавлено через 53 сек. -----
Цитата:
Сообщение от tujn08 Посмотреть сообщение
Вспомним задачу про короткий "путь между станциями метро"
Вспоминать не собираюсь. У тебя была поставлена конкретная задача:
Цитата:
Сообщение от tujn08 Посмотреть сообщение
надо найти все блоки у которых точка вставки блока находится на участке п.3
Остальное - лишнее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2015, 21:16
#6
tujn08


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Остальное - лишнее.
Не понял предложение. Что лишнее?


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Получить точку вставки дин.блока, найти ближайшую к нему на полилинии, сверить расстояние с 0 (возможно, с некоторой точностью).
1) найти ближайшую линию - легко согласен
2) блок должен находиться между двумя точками (найденными заранее), но при этом быть на линии (п.1)- как это реализовать?

PS
блок могут пересекать сразу несколько линий (на "перекрестке"). Не суть Влияет- просто для информации

----- добавлено через ~13 мин. -----
Щас припоминаю, что есть функция поиска к ближайшей точке (вершине), но надо будет создавать дополнительные вершины на линии- так?
tujn08 вне форума  
 
Непрочитано 03.08.2015, 22:01
#7
Кулик Алексей aka kpblc
Moderator

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


Поехали с самого начала... На каком языке пишешь? Под AutoCAD или клон-кад?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.08.2015, 23:14
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
2) блок должен находиться между двумя точками (найденными заранее), но при этом быть на линии (п.1)- как это реализовать?
уравнение прямой, проходящей через две точки? Ну еще, естественно, с учетом погрешности.
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 02:30
1 | #9
roaa

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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
3) есть 2Д точки: начало и конец на полилинии (между точками могут быть несколько вершин). Эти точки могу являться как началом и концом полилинии, так и просто точки на линии
как вариант
запомнить как есть, обрезать полилинии в этих точках, на полученной полилинии найти блоки, вернуть все как было...
roaa вне форума  
 
Автор темы   Непрочитано 04.08.2015, 07:36
#10
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
уравнение прямой, проходящей через две точки?
Добрался до работы - из файл думаю будет понятно.

log- промежуточная информация для понимания и отладки
cable_magazine - длина между блоков.
На пути от блока до блока могут быть другие блоки, от которых и надо получить дополнительное расстояние.
Просто уравнение прямой не подойдет т.к. трасса может быть проложена "змейкой".
Вложения
Тип файла: dwg
DWG 2010
тестовый_файл_для_cable_magazine 24_07_15 - копия.dwg (228.5 Кб, 1277 просмотров)
Тип файла: rar Desktop.rar (2.2 Кб, 19 просмотров)
tujn08 вне форума  
 
Непрочитано 04.08.2015, 07:36
#11
RNB

Проектирование мостов
 
Регистрация: 29.01.2014
Новосибирск
Сообщений: 431


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Не подходит.
Вспомним задачу про короткий "путь между станциями метро", где станции это блоки, "метро"(если так можно выразиться- рельсы) - это полилинии.
Функцию по нахождению пути по максимально трем полилиниям написал. Одна полилиния может пересекать несколько блоков (переход высоты с отметки на отметку- например арка через догору). Нужно найти только те блоки которые попадают в определенный отрезок (в большинстве случаев это не вершины линии).
Offtop: "Ты втираешь мне какую-то дичь" (с)

Точка вставки блока есть, координаты точек, между которыми искать, есть. Какие, (простите) нахрен, несколько линий? Какие перепады высоты? Ощущение, что изобретается велосипед, но при этом разговор идет о влиянии массонов на устойчивость Эйфелевой башни.
RNB вне форума  
 
Автор темы   Непрочитано 04.08.2015, 07:46
#12
tujn08


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


Цитата:
Сообщение от RNB Посмотреть сообщение
Точка вставки блока есть, координаты точек, между которыми искать, есть.
Вот точки 1 и 2. надо найти блоки между ними на линии.
Я пояснял всю ситуацию до этого.

----- добавлено через ~36 мин. -----

Натолкнуло на мысль:
Если расстояние от Конца линии до Первой точки меньше чем расстояние от конца до проверяемой точки
И
Если расстояние от Начала линии до Ввторой точки меньше чем расстояние от конца до проверяемой точки
То проверяемая точка лежит между Первой и Второй точками.
Предварительно проверить какая точка из двух лежит ближе к началу линии.

----- добавлено через 32 сек. -----
всем спасибо!
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 79
Размер:	10.9 Кб
ID:	154376  

Последний раз редактировалось tujn08, 04.08.2015 в 08:23.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 09:39
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Ну я вообще бы искал пересечение полилинии с блоком.. потому что промахнулся пользователь, плюхнул блок рядом с полилинией. Визуально для него блок на полилинии, а реально алгоритм на определении нахождения точки вставки блока на сегменте полилинии будет этот блок пропускать.. или наоборот - при большой дельте захватывать и соседние блоки. А пересечение - в инете примеров более чем. А уж когда нашел полилинию - найти, к каким ближайшим смежным двум ее вершинам ближе всего вставка блока - задача тривиальная. Если это вообще нужно.
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 10:00
#14
tujn08


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


Я тоже хотел найти точки пересечения блока с линией, но выдаются минимум 3 точки- включая атрибутов которых не видно + габариты блока. Тот же блок может пересекать и другую линии. Это не то,что нужно.
Вот я искал точку вставки блока с концом линии с точностью - вполне гуд. А щас начал ломать голову как найти на участке это пересечение ))).
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ну я вообще бы искал пересечение полилинии с блоком
----- добавлено через ~5 мин. -----
к примеру:
(79.7366 217.659 -1.0e-008
134.718 217.659 -1.0e-008
134.718 217.659 1.0e-008
79.7366 217.659 1.0e-008)

не вижу нужной: (104.84 217.65 0.0)
tujn08 вне форума  
 
Непрочитано 04.08.2015, 10:32
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Я тоже хотел найти точки пересечения блока с линией, но выдаются минимум 3 точки- включая атрибутов которых не видно + габариты блока. Тот же блок может пересекать и другую линии. Это не то,что нужно.
Вот я искал точку вставки блока с концом линии с точностью - вполне гуд. А щас начал ломать голову как найти на участке это пересечение ))).
Хотите сделать полностью автоматическую систему? - тогда должна быть проведена нормализация (стандартизация) имен слоев и т.д. Настраиваться связи - каким кабелям в каких слоях данный блок может подсоединяться - для возможности фильтрации. А пересечение блоков с полилинией-чтобы только найти данную полилинию, а потом DistanceTO(Точка вставки блока) для поиска ближайших вершин полилинии.

----- добавлено через ~7 мин. -----
p.s. Давно отказался от попыток сделать полностью автоматическую систему - так как овчина не стоит выделки, имхо.
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 11:19
#16
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
(стандартизация) имен слоев и т.д
Это и делаю ))
1) стандартизация
2) автматизация
3) увеличение качества и объемов.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
А пересечение блоков с полилинией-чтобы только найти данную полилинию,
надо другой метод я считаю. Блок громоздкий и следовательно будет пересекать несколько линий- усложнит хоть и не намного.
Надо проверить принадлежит ли точка этой линии - дальше по алгоритму как писал выше.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 12:20
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
надо другой метод я считаю. Блок громоздкий и следовательно будет пересекать несколько линий- усложнит хоть и не намного.
Надо проверить принадлежит ли точка этой линии - дальше по алгоритму как писал выше.
Пробуйте. Вы сейчас по сути пытаетесь теоретически предугадать все возможные "шишки" и "подводные камни", на которых спотыкались целые команды разработчиков вертикальных решений/программ для автоматизации проектирования) только опытным путем на реальных задачах выясняются все плюсы и минусы.
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 12:43
#18
tujn08


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


Значит сделаю просто:
1) проверка на пересечение блокИ-линия
2) проверю все точки пересекающих блоков на нахождение их между нужными точками
Условия:
1) точка вставки должна быть почти на линии ( используем радиус от концов участка, погрешность уже становиться большой, если точка не по центру участка линии). Попасть в центр нужного участка - маленькая вероятность, что радует.
2) блок не должен пересекать другие линии - уже проблемотично т.к. габариты блока довольно большие. (делить блок на два разных блока?! - не серьезно...)
Мда... надо подумать еще варианты
tujn08 вне форума  
 
Непрочитано 04.08.2015, 12:54
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Попасть в центр нужного участка - маленькая вероятность, что радует.
и не надейтесь.. все возможные варианты надо рассматривать)
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 13:53
#20
roaa

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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
1) есть полилинии
2) есть дин.блоки
3) есть 2Д точки: начало и конец на полилинии (между точками могут быть несколько вершин). Эти точки могу являться как началом и концом полилинии, так и просто точки на линии
Накидал на скорую руку. Останется найти блоки на этой полилинии, а этого на форуме найти можно много...
Код:
[Выделить все]
 
(defun _poly_copy ( poly pt1 pt2 / plcopy pozp)
;;; Функция копирования полилинии от точки до точки
;;; Аргументы:
;;;   poly - vla-object или ent name полилинии
;;;   pt1, pt2 - точки
;;; Вызов:
;;; (_poly_copy (car (entsel))(getpoint "\n1:")(getpoint "\n2:"))
;;; Возвращает vla созданной полилинии

(defun LM:ListsUnion ( l / x u )
;;---------------------=={ Lists Union }==--------------------;;
;;                                                            ;;
;;  Returns a list expressing the union of a set of lists     ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  l - a list of lists for which to return the union         ;;
;;------------------------------------------------------------;;
;;  Returns:  A list of distinct items in the set of lists    ;;
;;------------------------------------------------------------;;
;|
_$ (LM:ListsUnion '((1 2 3 4 5) (1 3 5 7 9) (2 4 6 8)))
(1 2 3 4 5 7 9 6 8)
|;
  (setq l (apply 'append l))
  (while (setq x (car l)) (setq u (cons x u) l (vl-remove x l)))
  (reverse u)
)

(defun _sensor_row_num ( n0 nx )
;;; функция раскладки числа на ряд чисел
;;;   nx - число конечное
;;;   n0 - число начальное
;;; Вызов: (_sensor_row_num 1 5)
;;; Возврат (1 2 3 4 5)
  (cond 
    ((and (= (type n0) 'INT)(= (type nx) 'INT))
     (setq res nil)
     (if (> nx n0)
       (repeat (1+ (- nx n0))(setq res (cons nx res)  nx (1- nx)))
       (repeat (1+ (- n0 nx))(setq res (cons nx res)  nx (1+ nx)))
     )
     res
    )
  )
)

  (cond
        ((eq (type poly) 'ENAME)
         (_poly_copy (vlax-ename->vla-object poly) pt1 pt2)
        )
        ((not pt1)
         (setq pt1 (vlax-curve-getStartPoint poly))
         (_poly_copy poly pt1 pt2)
        )
        ((not pt2)
         (setq pt2 (vlax-curve-getEndPoint poly))
         (_poly_copy poly pt1 pt2)
        )
        ((> (vlax-curve-getDistAtPoint poly pt1)(vlax-curve-getDistAtPoint poly pt2))
         (_poly_copy poly pt2 pt1)
        )
        ((and
           (setq plcopy (vla-copy poly))
           (setq temp (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates plcopy))))
         )
         (setq pozp 
                    (LM:ListsUnion 
                      (mapcar '(lambda (x)(list (setq xt (* x 2))(1+ xt)))
                        (_sensor_row_num 
                          (atoi (rtos (vlax-curve-getParamAtPoint plcopy pt1)))
                          (1+ (atoi (rtos (vlax-curve-getParamAtPoint plcopy pt2))))
                        )
                      )
                    )
               
         )
         (setq tempp nil)
         (mapcar '(lambda (poz)(setq tempp (cons (nth poz temp) tempp))) pozp)
         (setq tempp (reverse tempp)
               tempp (subst (car pt1)(nth 0 tempp) tempp)
               tempp (subst (cadr pt1)(nth 1 tempp) tempp)
               tempp (reverse (subst (car pt2)(nth 1 (reverse tempp))(reverse tempp)))
               tempp (reverse (subst (cadr pt2)(nth 0 (reverse tempp))(reverse tempp)))
         )
         (vla-put-coordinates plcopy 
           (vlax-make-variant 
             (vlax-safearray-fill
	             (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length tempp)))) 
	             tempp
	           )
	         )
	       )
	       plcopy
        )
        (t nil)
  )
)

Последний раз редактировалось roaa, 04.08.2015 в 14:06.
roaa вне форума  
 
Автор темы   Непрочитано 04.08.2015, 15:23
#21
tujn08


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


Код:
[Выделить все]
 (progn
(vl-load-com)
(setq obj1 (vlax-ename->vla-object (car (entsel "выбрать линию"))))
(setq a (cdr (assoc '10 (entget (car (entsel "выбрать блок"))))))
(setq a_1 (list (nth 0 a) (nth 1 a) (+ 10(nth 2 a)) ))
(vlax-curve-getClosestPointToProjection obj1 a a_1) ; пересечение в 3д
)
Как насчет этого - подозреваю, что радоваться преждевременно??? )))

----- добавлено через ~43 мин. -----
и проверка на:
Если расстояние от Конца линии до Первой точки меньше чем расстояние от конца до проверяемой точки
И
Если расстояние от Начала линии до Ввторой точки меньше чем расстояние от конца до проверяемой точки
То проверяемая точка лежит между Первой и Второй точками.

----- добавлено через ~44 мин. -----
задача в определении точки вставки блока на проверяемой линии. Блок может пересекать несколько линий, но точка будет только на одной (не считая перекрестков).

----- добавлено через ~45 мин. -----
Цитата:
Сообщение от roaa Посмотреть сообщение
Накидал на скорую руку.
почитаю завтра- времени не хватило разобраться.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 17:54
#22
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Я тоже хотел найти точки пересечения блока с линией, но выдаются минимум 3 точки- включая атрибутов которых не видно + габариты блока
Как вариант: в составе блока должна быть одна характерная полилиния на особом слое, например, внешняя рамка, пересечение с которой должно быть однозначно истолковано как то, что блок находится на полилинии, изображающей кабель.
Примерный алгоритм:
1) найти все блоки, которые могут пересекаться с полилинией, например с помощью BSELPOLY
2) для каждого блока уточнить пересечение с характерной рамкой:
- сделать копию блока (vla-copy);
- запомнить последний примитив чертежа (entlast);
- подорвать копию (vla-explode);
- среди полученных "обломков" выделить ту самую характерную рамку (перебор с помощью entnext от ранее запомненной метки последнего примитива до текущего entlast по условиям "полилиния" и "спецслой");
- проверить ее пересечения с "кабельной" полилинией - если есть, значит блок на кабеле, оставить в списке блоков по п.1, если нет - удалить из этого списка;
- убрать мусор (от ранее запомненной метки последнего примитива до текущего entlast)


Как-то так Предлагаемые в п. 2 действия вообще-то относятся к низкому штилю программирования, гуру наверняка могут предложить вариант прямого доступа к подпримитивам блока.

Последний раз редактировалось kp+, 04.08.2015 в 18:01.
kp+ вне форума  
 
Автор темы   Непрочитано 04.08.2015, 18:18
#23
tujn08


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
гуру наверняка могут предложить вариант прямого доступа к подпримитивам блока.
Взрывать блоки не вариант- так сказать БД чертежа (как я ее называю) "переполняется"(как я понимаю по нумерации примитивов), что приводит к ошибкам этого файла. Спасает только своевременное копирование нужного в новый созданный файл.
Если кто сталкивался буду рад вразумительным объяснениям ))
А про доступ в примитивам блока это надо глянуть функции Lee Mac
tujn08 вне форума  
 
Непрочитано 04.08.2015, 18:23
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


ну пока остановился на вложенном внутри основного блока УГО спец-блоке - маленьком квадрате без атрибутов с точкой вставки в центре. В блоке перебираю примитивы, нахожу вхождение этого блока, затем дело техники - найти ближайшие вершины полилинии, опустить перпендикуляр, найти точку на сегменте полилинии. Чистая геометрия - и пофиг на полилинии блок или рядом где то) Почему вложенный блок-квадрат - так как не всегда геометрический центр УГО совпадает с желаемым центром разбития полилинии, а этот вспомогательный блок где нужно ставишь.
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 18:34
#25
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


В качестве рекламы
zamtmn вне форума  
 
Непрочитано 04.08.2015, 18:35
#26
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Взрывать блоки не вариант- так сказать БД чертежа (как я ее называю) "переполняется"(как я понимаю по нумерации примитивов), что приводит к ошибкам этого файла. Спасает только своевременное копирование нужного в новый созданный файл.
Если кто сталкивался буду рад вразумительным объяснениям ))
Связка explodeallproxy, removeallproxy, очистка списка аннот. масштабов, Audit с исправлением ошибок дает хорошие результаты. Сотни раз обсуждалось. А чтобы вызвать "переполнение БД чертежа", если чертеж 2D - не представляю, что надо изобразить. Не иначе, как карту мира в масштабе 1:100 в одном файле.
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
найти ближайшие вершины полилинии, опустить перпендикуляр, найти точку на сегменте полилинии. Чистая геометрия - и пофиг на полилинии блок или рядом где то)
Кажется, эта чистая геометрия в полном объеме реализована в грязной стандартной функции vlax-curve-getclosestpointto. Или о ней и идет речь?
kp+ вне форума  
 
Непрочитано 04.08.2015, 18:40
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


прикольно) Только лишняя операция - выравнивание выносок. В NetApi/Arx есть JIG классы - выноску можно сформировать и ставить на место визуально сразу. Не знаю, как в лиспе с этим дела обстоят.

----- добавлено через ~8 мин. -----
Цитата:
Сообщение от kp+ Посмотреть сообщение
Кажется, эта чистая геометрия в полном объеме реализована в грязной стандартной функции vlax-curve-getclosestpointto. Или о ней и идет речь?
На NetApi пишу. Да и по промежуточным коэффициентам заодно определяется - находиться ли объект на полилинии, рядом с нею и на каком расстоянии, либо за пределами полилинии.

Цитата:
Сообщение от kp+ Посмотреть сообщение
А чтобы вызвать "переполнение БД чертежа", если чертеж 2D - не представляю, что надо изобразить. Не иначе, как карту мира в масштабе 1:100 в одном файле.
ну в 2012 хэндл был типа long - т.е. 2 миллиарда всего, если со знаком. Если постоянно убивать/создавать примитивы - то каждому новому из БД чертежа следующий свободный номер присваивается.
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 20:16
#28
roaa

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


Действительно....пошло изобретение велосипеда...

Последний раз редактировалось roaa, 04.08.2015 в 20:27.
roaa вне форума  
 
Автор темы   Непрочитано 04.08.2015, 20:33
#29
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
В качестве рекламы
Примерно так планирую, только выноски автоматически расставлять. Плюс еще схемы внешних проводок(расключение) и все остальное автоматически отрисовывать.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 20:41
#30
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Зачем? на форуме есть несколько вариантов - гораздо полдезнее развивать уже существующее чем велосипедить
zamtmn вне форума  
 
Автор темы   Непрочитано 04.08.2015, 20:43
#31
tujn08


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Не иначе, как карту мира в масштабе 1:100 в одном файле.
В моем опыте достаточно: прокси-графика, копирование ген.плана(порядка 5 раз), изменение генплана несколько раз, взрыв прокси без своевременной чистки.
Ооо... кстати щас такая проблема- может кто сталкивался:
файл порядка 25-30Мб в нем всего лишь один блок из-за которого все тормозит и он не удаляется- файл виснет.
Вроде предлагается пересохранить из 15 в 13 версию.
tujn08 вне форума  
 
Непрочитано 04.08.2015, 20:45
#32
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


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

----- добавлено через ~2 мин. -----
13..16 акад-одна версия файла.. до этого была тройка 10..12
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 21:04
#33
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну человек хочет переплюнуть тот же электрикал - пускай пробует)
"плеваться" ни куда не хочу ). Назовем это переход с кульмана на САПР. Электрикал у нас никто не осилил разобраться и настроить под себя тем более. Еплан куда более подходит под наши задачи, но с англ. инструкцией сложно разобраться. Оказалось проще самим что-то этакое создать. В добавок лицензии приобретать не нужно.
Вот небольшая история: купили ModelStudio ЛЭП (ну и всю линейку вдобавок). Требуется всего-лишь провис проводов по профилю юзать. Как выяснилось- в есть ограничения поскольку программист не электрик и тонкостей не знает. Когда эти ограничения уберут? А так сами можем- разве нет. Чет я разгорячился ) ....

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
узкий круг задач, где реально сделать лучше именно под себя...
И тут в точку - все под себя. Ни одна САПР наши потребности не удовлетворяет: ни в экспликация, кабельном журнале, спецификации, схемах, БД оборудования производителей, документообороте и т.п..

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
13..16 акад-одна версия файла.. до этого была тройка 10..12
Сергей, вопрос.. возможно знаешь. Даунгрейд с 16 до 14 возможен при условии, что лицензия? (ModelStudio работает только на до 14версии включительно и тут с тех поддержкой возникают дилемы по этому поводу)
tujn08 вне форума  
 
Непрочитано 04.08.2015, 21:13
#34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


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

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от tujn08 Посмотреть сообщение
Сергей, вопрос.. возможно знаешь. Даунгрейд с 16 до 14 возможен при условии, что лицензия? (ModelStudio работает только на до 14версии включительно и тут с тех поддержкой возникают дилемы по этому поводу)
Насколько я слышал от нашего админа, что с 16 версии можно было до 13 даунгрейд сделать.. но это лучше уточнять у представителей аутодеска всетаки
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 21:16
#35
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Назовем это переход с кульмана на САПР.
С подходом Поиск блоков пересекающих полилинию это будет не сапр, даже не велосипед-кульман а самокат какойнить.

>>Ни одна САПР наши потребности не удовлетворяет: ни в экспликация, кабельном журнале, спецификации, схемах, БД оборудования производителей, документообороте и т.п..
Сомневаюсь. Скорее наоборот - лень разбираться, да еще и документация к ним какаято нетакая))
zamtmn вне форума  
 
Непрочитано 04.08.2015, 21:23
#36
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


кстати, тот же электрикал программируется аналогично голому автокаду, т.е. можете реализовать вывод информации в любом нужном виде, если не устраивают базовые возможности..
Сергей812 вне форума  
 
Автор темы   Непрочитано 04.08.2015, 21:25
#37
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
узкий сегмент рынка проектирования с большой типизацией.
ага
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и при этом замахиваетесь на автоматическую расстановку выносок,
скажу больше - для сметчиков "Красную кнопку" тоже запланировал. И компоновщик документации для заказчика
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а еще это все затевать на лиспе, насколько понимаю..
как распинаю C# переключись на него. Пока есть вот это:Пакетная печать- опять же под наши требования. И я знаю, что есть 5(известных мне) похожих программ...

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от zamtmn Посмотреть сообщение
а самокат какойнить
tujn08 вне форума  
 
Непрочитано 04.08.2015, 21:35
#38
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
как распинаю C# переключись на него
Его не пинать надо, а изучать и писать на нем) Когда увидите, что многие задачи по обработки информации в С# решаются буквально в несколько строк.. ощутите прелесть того XML-комментирования своего кода.. не говори уже о возможностях построения диалогов.. лисп хорош для небольших задач, имхо.. да и раньше просто альтернативы для него не было..
Сергей812 вне форума  
 
Непрочитано 04.08.2015, 22:13
#39
Кулик Алексей aka kpblc
Moderator

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


Offtop: Лисп хорош не только для небольших задач. Сделать на нем можно очень много - и при этом не зависеть от версии ACAD
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.08.2015, 20:38
#40
roaa

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


Offtop: Походу, велосипед купили...
roaa вне форума  
 
Непрочитано 05.08.2015, 21:05
#41
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Offtop: Пускай попробуют люди, понабивают шишек, приобретут какой то опыт. Сейчас это стало модный тренд - автоматизация, в нее ринулись кому не лень. Кто-то из опытных людей, давно занимающийся всеми эти вопросами, дал достаточно точное определение всем этим системам автоматизации - что это лишь рычаг. В сильной фирме с налаженными процессами автоматизация даст положительный эффект, в слабых фирмах с никчемным менеджментом - раскачает "лодку" так, что она может начать зачерпывать воду и будет еще хуже.
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 05:24
#42
skkkk


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


Offtop: Прошу прощения за отсталый ответ
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
В NetApi/Arx есть JIG классы - выноску можно сформировать и ставить на место визуально сразу. Не знаю, как в лиспе с этим дела обстоят.
Если я правильно понял о чем речь, то в лиспе я в свое время (лет 5 назад), начав программно создавать выноски, воевал с тем, чтобы созданная мультивыноска (строки и точка стрелки задавались программно) адекватно отображалась при запросе точки вставки полки. Визуализировалась, иначе говоря. При стандартном подходе он выдавал мне только резиновую нить, и я решил формировать блок, состоящий из текста в том же шрифте, чтобы видеть размеры самой выноски, и вставлял этот блок визуализируя его под курсором, резиновую нить при этом воспроизвести так и не удалось. Хотел даже как-нибудь программно "схватиться" за ручку только что отрисованной мультивыноски. Оно и понятно было сразу, что тут получится только через отрисовку временных примитивов (grvecs) по координатам из взорванных до линий текстов. На такое я не пошел, и оставил без резиновой нити. Привыкли, конечно, однако ее часто не хватает на загруженных чертежах. Это одна из немногих (кажется, трех) задач, которую не удалось решить на лиспе (без костылей и шаманских танцев, с ними думаю, можно) в моей хоть и не слишком долгой практике.
Цитата:
Сообщение от tujn08 Посмотреть сообщение
Примерно так планирую, только выноски автоматически расставлять. Плюс еще схемы внешних проводок(расключение) и все остальное автоматически отрисовывать
Сколько ни пытался, не смог придумать алгоритм, по которому можно заставить машину автоматически расставлять выноски так, как мне надо. Предпочитаю полку ставить самостоятельно. Интересно было бы посмотреть на видео, как это будет...
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2015, 06:09
#43
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
расставлять выноски так, как мне надо
Уточню, что выноска будет блок, а не типовая выноска как возможно Вы поняли.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 07:13
#44
skkkk


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


Думаю, это дела не меняет, - блок или мультилидер - как программно, без запросов точек у пользователя, поставить все выноски (допустим, штук 25) на чертеж? Они ведь должны находится по возможности на "самых пустых" местах чертежа, при этом, не пересекаясь друг с другом, не перекрывая друг друга и другие объекты, а если это невозможно, то перекрывать так, чтоб не нарушить читаемости чертежа. Выносок бывает очень много на чертеже, и я даже не решился начать продумывать алгоритм, который мало того, чтобы их наполнил, так еще и расставил. Вместо этого у нас идет автоматическая трассировка по оси трубопровода, стрелки выносок поочередно дают указания на характерные точки трассы, а пользователь вручную ставит на место выноски, иногда после этого еще слегка подправляя их положение вручную. При этом на насыщенных чертежах без определенных навыков будет очень нелегко. А если еще и программа их беспорядочно расставит.....вообще капец. Хотя в каждом деле своя специфика... если выноска будет всегда одного размера и стоять должна по определенным правилам, например, справа сверху от стрелки, то ничего сложного тут нет.

Последний раз редактировалось skkkk, 06.08.2015 в 07:20.
skkkk вне форума  
 
Автор темы   Непрочитано 06.08.2015, 07:29
#45
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
если выноска будет всегда одного размера и стоять должна по определенным правилам, например, справа сверху от стрелки, то ничего сложного тут нет.
Примерно так и будет. Взять габарит чертежа (прямоугольник или квадрат) - расставлять выноски за пределами этого габарита на определенно отступе (вспомним конструкторские чертежи). Ширина выносок статичная, а высота динамическая (от количества маркировок). У меня есть список линий (причем координаты на линиях) между блоками/приборами/зданиями - на эти линии и расставлять выноски. Маркировка формируется из названия блока (у нас) или можно правила придумать
Наложение на чертеж уже избежали получается. Пересечение линий выносок и в какую сторону выноску выкинуть- проверка координат относительно центра габарита (с возможным учетом заполненности каждой из 4х сторон) и только.

Учитывая вышеизложенное мной (т.е. информация выноски будет на пустом месте стоять). Для себя я понимаю ("самых пустых") , Надо с учетом масштаба запрограммировать правило: между приборами выноска обязательна- она стоит по середине участка или со смещением если есть повороты трассы (в зависимости от длины участка их дублировать несколько раз). Сложность не в алгоритме, а в его программировании на мой взгляд.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 09:33
#46
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


ИМХО. Автоматическая расстановка выносок неоправдает себя. Правильно это можно сделать только на самых простых чертежах, если чертеж насыщеный - забудь про "автоматику", ручками и вперед, благо размещать выноски если их содержимое считаетсяф автоматом можно и в полуобморочном состоянии)) Ставку нужно делать на редактируемость выноски и на повторное использование уже расставленых выносок после редактирования чертежа. Т.е. программа должна позволять не только быстро изготовить новый чертежик, но и внести изменения в старый.

Еще на правах рекламы)) :

Было 4 кабеля W1..W4, к ним добавилось еще 4 - G1..G4. Всё пересчиталось и обновилось
zamtmn вне форума  
 
Непрочитано 06.08.2015, 09:57
#47
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Примерно так и будет. Взять габарит чертежа (прямоугольник или квадрат) - расставлять выноски за пределами этого габарита на определенно отступе (вспомним конструкторские чертежи). Ширина выносок статичная, а высота динамическая (от количества маркировок). У меня есть список линий (причем координаты на линиях) между блоками/приборами/зданиями - на эти линии и расставлять выноски. Маркировка формируется из названия блока (у нас) или можно правила придумать
Наложение на чертеж уже избежали получается. Пересечение линий выносок и в какую сторону выноску выкинуть- проверка координат относительно центра габарита (с возможным учетом заполненности каждой из 4х сторон) и только.

Учитывая вышеизложенное мной (т.е. информация выноски будет на пустом месте стоять). Для себя я понимаю ("самых пустых") , Надо с учетом масштаба запрограммировать правило: между приборами выноска обязательна- она стоит по середине участка или со смещением если есть повороты трассы (в зависимости от длины участка их дублировать несколько раз). Сложность не в алгоритме, а в его программировании на мой взгляд.
Сколько человек будет работать с этой программой - больше вас в единственном числе? И все они будут подстраиваться под необходимый стиль работы программы, а не программа "самоадаптироваться" под возможности под реальные данные?


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если я правильно понял о чем речь, то в лиспе я в свое время (лет 5 назад), начав программно создавать выноски, воевал с тем, чтобы созданная мультивыноска (строки и точка стрелки задавались программно) адекватно отображалась при запросе точки вставки полки. Визуализировалась, иначе говоря. При стандартном подходе он выдавал мне только резиновую нить, и я решил формировать блок, состоящий из текста в том же шрифте, чтобы видеть размеры самой выноски, и вставлял этот блок визуализируя его под курсором, резиновую нить при этом воспроизвести так и не удалось. Хотел даже как-нибудь программно "схватиться" за ручку только что отрисованной мультивыноски. Оно и понятно было сразу, что тут получится только через отрисовку временных примитивов (grvecs) по координатам из взорванных до линий текстов. На такое я не пошел, и оставил без резиновой нити. Привыкли, конечно, однако ее часто не хватает на загруженных чертежах. Это одна из немногих (кажется, трех) задач, которую не удалось решить на лиспе (без костылей и шаманских танцев, с ними думаю, можно) в моей хоть и не слишком долгой практике.
ну по сути JIG класс - это временная графика + методы отслеживания действий пользователя, инкапсулированное в одном несложном классе - производном от общего класса JIG. Т.е. в саму БД чертежа объект из JIG заноситься один раз, после всех необходимых манипуляций с ним со стороны пользователя.
Сергей812 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 10:13
#48
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Было 4 кабеля W1..W4, к ним добавилось еще 4 - G1..G4. Всё пересчиталось и обновилось
У меня речь о почти полной автоматизации т.е. у меня не только выноски (назову это "попутным продуктом"). Основной - кабельный журнал, спецификация и схемы.
Да будет классно, если поменяв выноску поменяется все и везде - до этого еще пилить и пилить.
У меня в первую очередь идет оформление всех планов (хоть и вразрез всех правил проектирования), а потом обработкой программой. Нужно что-то изменить- меняй план и вновь отработка программы.Простой вариант -это все удалить программно и заново нарисовать (т.к. приборов может стать больше и листы надо сдвигать и менять размеры). Ну или вставить рядом для сравнения и сохранения релиза(версий) чертежа.
Про изменение отображение выносок думал и еще подумаю, что смогу сделать - сделаю. Двигать так и так можно вручную будет.
Информацию для размышления кидаете- не спорю. В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
У каждого свои задачи и условия.

Вот уже сделал: см. вложения
Помогло vlax-curve-getClosestPointTo и пару условий.
Спасибо всем за поддержку и советы!!!
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 34
Размер:	40.7 Кб
ID:	154511  Нажмите на изображение для увеличения
Название: Безымянный2.png
Просмотров: 23
Размер:	33.1 Кб
ID:	154512  
tujn08 вне форума  
 
Непрочитано 06.08.2015, 10:23
#49
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
при грамотной реализации "протыкивания" эти 200 камер прощелкаете за несколько минут)

----- добавлено через ~2 мин. -----
но вместо этого вы потратите кучу времени на автоматическую расстановку выносок)
Сергей812 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 10:29
#50
tujn08


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
прощелкаете за несколько минут)
у меня вся информация в блоках храниться - меняем там инфо и прощелкивать не надо. Ну если брать внезапное смещение номеров камер + изменение кабеля + добавление камер и других приборов.
У меня программа на коленке написана - доработать до красоты и удобства потом можно. Щас большие объемы появились + старые замечания - вручную куда дольше чем написать программу и спать дома, а не на работе.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 10:47
#51
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от tujn08 Посмотреть сообщение
у меня вся информация в блоках храниться - меняем там инфо и прощелкивать не надо. Ну если брать внезапное смещение номеров камер + изменение кабеля + добавление камер и других приборов.
Ну в первых вариантах программы было так же, в гиперссылках к блокам и полилиниям. Уже больше сотни проектов народ на ней сделал в офисе, и даже с "протыкиванием" получается быстрее, чем врукопашную. Но сейчас, смотря на все это дело через пару лет - понимаю, что нужно было разносить, как советовали умные люди: в блоках и полилиниях лишь идентификаторы, во внешней БД - вся информация, при необходимости доработаются алгоритмы обработки информации в самой программе, не влезая в чертежи.

Цитата:
Сообщение от tujn08 Посмотреть сообщение
У меня программа на коленке написана - доработать до красоты и удобства потом можно
не будет ни времени, ни желания - 100%. Какое "ядро"/принцип работы заложите сейчас в программу - так она и будет дальше жить, обрастая вспомогательным функционалом и костылями. Такие вещи надо продумывать на начальном этапе.
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 11:07
#52
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>В нашем случае протыкивать все блоки у нас не вариант (в случае видеонаблюдения с 200 камерами и несколькими кабелями под каждую, где не парная прокладка).
"Автоматическая" расстановка выносок - абсолютно не проблема - у меня не реализована за ненадобностью. после любой "автоматической" расстоновки всеравно потребуется ручное редактирование, т.к. выноска налезет на какиенибудь другие примитивы и потребуется вмешательство - красиво делать cpu научить трудно, с этим пока только голова справится.

>> Нужно что-то изменить- меняй план и вновь отработка программы.Простой вариант -это все удалить программно и заново нарисовать
Плавали знаем... такой вариант прокатит если результат работы программы уходит кудато отдельно - незнаю, таблицы какиенибудь или другие чертежи. Если программа дорабатывает исходный чертеж, рано или поздно встает выбор - поправить быстренько "наколенке" без автоматики или сделать по уму и снова заново всё это подвигать-подгонять. Как правило будет выбран первый вариант))

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

>>У меня речь о почти полной автоматизации
А я толкаю речь про то что автоматизация это хорошо, но она должна быть "прозрачной" и внесение крошечных изменений не должно приравниваться к переделке всего заново


Научите как тут можно автоматом расставить выноски - буду рад
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 38
Размер:	72.5 Кб
ID:	154530  

Последний раз редактировалось zamtmn, 06.08.2015 в 11:17.
zamtmn вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:09
#53
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Научите как тут можно автоматом расставить выноски - буду рад
Эту задачу тоже планирую захватить )))
Пока на ум приходит- в отдельном слое отрисовывать прямоугольником все помещения (если план "левый"). Как ни крути должна быть экспликация помещений с цифрами- проставить цифры (или уже иметь цифры от "строителей") и прямоугольники можно автоматом отрисовывать. Если план по уму нарисован (не картинка)- все проще становиться. По нормативам расставлять приборы в помещениях(можно сделать на выбор)- опять же получиться, что автоматом. По правилам последовательности приборов- связи между блоками можно "автоматом" получить. Дальше уже на выбор- или позволить программе автоматически стенку по которой трассу прокладывать, или рисовать/выбирать самим.
В тему скажу: камеры на плане расставлять буду почти автоматически - достаточно обозначить периметр + внутрении трассы. Заранее конечно стоит выбрать тип камер(там прописаны возможные кабеля), а от типа кабеля и камер расстояние между ними известно. Угол обзора камер тоже выбрать автоматически.
Просто ради спортивного интереса:
Как учитываешь высоты приборов и трассы? на плане их не видно


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
в блоках и полилиниях лишь идентификаторы, во внешней БД - вся информация,
так изначально и запланировал, НО в связи с необходимостью иметь какую ни какую автоматизацию сейчас - делаю без БД. У нас БД представляет табличную информацию обследования- из нее все, что можно, будет взято )). Останется расставлять блоки с выбором нужной "строки" из БД.

----- добавлено через -----
В общем "наполеоновские планы" у меня.
tujn08 вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:18
#54
tujn08


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


Вот еще тест провел. Вроде все работает как мне надо. Буду испытывать на "реальном проекте"
Надо еще вычет второго катета сделать и прибавить высоту приборов.
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 38
Размер:	35.3 Кб
ID:	154540  
tujn08 вне форума  
 
Непрочитано 06.08.2015, 12:38
#55
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Как учитываешь высоты приборов и трассы? на плане их не видно
Несколько вариантов
1 - трехмерная трасса и расстановка приборов на соответствующих высотах
2 - для 2Д есть возможность подкючить в трассу "муляжное" устройство "стояка" которое добавит для всех кабелей проходящих через него необходимую длину. Также для каждого устройства можно задать значение которое оно добавит к длине всех подключеных кабелей (по идее фича задумывалась как запас кабеля на разделку при подключении, но можно использовать и как этуляцию разности высот)
3 - тоже для 2Д. в случае если кабель начинается на одном плане, заканчивается на другом - к его длине автоматом добавляется разница высотных отметок "стояков" или "разрывов" (специальные блоки "заканчивающие" кабель на одном плане и "начинающие" на другом). сама высотная отметка стояков и разрывов задается им в их свойствах
zamtmn вне форума  
 
Автор темы   Непрочитано 06.08.2015, 12:44
#56
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Несколько вариантов
Я к тому, что ты их учитываешь все же, но на плане не показываешь?
Замечания не присылали по этому поводу?
Я работаю с 2Д и в каждый прибор вписываю высоты (они могут быть разные). Программе не важно на какой высоте на самом деле трасса же- ее принимаю за 0.000

----- добавлено через ~11 мин. -----

В выносках мы прописываем на какой высоте прибор или трасса.
tujn08 вне форума  
 
Непрочитано 06.08.2015, 18:07
#57
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Я к тому, что ты их учитываешь все же, но на плане не показываешь?
Случаи бывают разные

>>Замечания не присылали по этому поводу?
Думаешь эти +-метры когото кроме тебя интересуют?))

Вообще имхо лисп для таких задач не особо подходит - блоки+полилинии для устройств и трасс не сильно годятся, лучше отдельные примитивы. Также надо много всякой информации хранить в примитивах - на ум сразу лезет xdata - придется делать средства для массовой обработки этих xdata. и желательно не запросами в комстроке, а с удобным гуем
zamtmn вне форума  
 
Непрочитано 06.08.2015, 18:30
#58
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Думаешь эти +-метры когото кроме тебя интересуют?))
Когда подрядчику недоплачивают или у него недостает времени, он отключает голову и начинает придираться к каждой запятой в проекте.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Также надо много всякой информации хранить в примитивах - на ум сразу лезет xdata - придется делать средства для массовой обработки этих xdata. и желательно не запросами в комстроке, а с удобным гуем
В Acad Electrical другой вариант - почти вся необходимая инфа хранится в атрибутах блоков, и в каждом блоке их ...ва куча. Большинство скрыты.
Зато можно редактировать станд. средствами
kp+ вне форума  
 
Непрочитано 06.08.2015, 18:42
#59
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от kp+ Посмотреть сообщение
Когда подрядчику недоплачивают или у него недостает времени, он отключает голову и начинает придираться к каждой запятой в проекте.
А если объект с госфинансированием - то и со счетной палатой можно познакомиться, если запасы дикие на кабели заложены для отбивки монтажа)
Сергей812 вне форума  
 
Непрочитано 06.08.2015, 19:48
#60
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


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

Сергей812
Видимо я считаю хорошо, неразу проблем не имел))
zamtmn вне форума  
 
Автор темы   Непрочитано 06.08.2015, 20:39
#61
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Думаешь эти +-метры когото кроме тебя интересуют?))
Обязательно... к примеру КИП приборы на НПЗ - на установке высотой 30м - явно будет недобор.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
По атрибутам - наиболее удобный вариант, хотя минусов тоже хватает.
Согласен...

Что-то ушли от темы ))) Хотя я решил задачу уже. Еще раз спасибо всем!
tujn08 вне форума  
 
Непрочитано 06.08.2015, 21:54
#62
Дима_

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если я правильно понял о чем речь, то в лиспе я в свое время (лет 5 назад), начав программно создавать выноски, воевал с тем, чтобы созданная мультивыноска (строки и точка стрелки задавались программно) адекватно отображалась при запросе точки вставки полки. Визуализировалась, иначе говоря. При стандартном подходе он выдавал мне только резиновую нить, и я решил формировать блок, состоящий из текста в том же шрифте, чтобы видеть размеры самой выноски, и вставлял этот блок визуализируя его под курсором, резиновую нить при этом воспроизвести так и не удалось.
Примерно в то-же время я делал подобное и на лиспе - больше, чтоб показать как, а вообще это конечно решается джигом. Кстати, при условии установленных Экспрессов, появляються и соотв. лисп. функции для "визуального" перемещения - по моему в той, же теме я об этом писал.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.08.2015, 01:27
#63
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Как вариант готового jig'а, используемого в lisp: http://www.caduser.ru/forum/index.ph...171&MID=112412
Александр Ривилис вне форума  
 
Непрочитано 07.08.2015, 05:12
#64
skkkk


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Что-то ушли от темы )))
Вы, правы, прошу прощения, это я виноват.
zamtmn, Сергей812, Дима_, Александр Ривилис и все, кому интересен вопрос, предлагаю продолжить в более подходящей теме: Как визуализировать создаваемый объект?.

Уважаемая администрация, я извиняюсь за нарушение правил, сам не понял, что на меня нашло, о чем думал, но как-то отвело меня от темы разговора. И довольно нехило. Однако тема нужная, и не хотелось бы терять данную информацию. Как прикажете поступить? Если решите перенести в ту тему, то я вставил там все цитаты со ссылками сюда на посты, относящимися к той теме - может, удобней будет вам их отсюда тогда изъять? Готов понести посильный труд для устранения своей ошибки. Например, удалить потом свое то сообщение с цитатами. Но может быть, их лучше так уже и оставить в цитатах, а тут по возможности либо заоффтопить каждому свое, либо их поудалять, но там есть сообщения, в которых затрагиваются обе темы, я вроде как профильтровал.
Ей-Богу, не нарочно...
skkkk вне форума  
 
Непрочитано 11.08.2015, 14:25
1 | #65
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 3,072


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Поиск блоков пересекающих полилинию
Может быть пригодилось бы уже готовое из http://forum.dwg.ru/showthread.php?t=105238:
- PSI_SEL_ON_LINE - выбрать элементы на линиях с учетом указанного допуска. У блоков и текстов учитываются только точки вставки. Выбираются элементы относительно линии в зоне, шириной в допуск в каждую сторону.
- PSI_SEL_ON_LINE_3D - выбрать элементы на линиях с учетом 3D с учетом указанного допуска. У блоков и текстов учитываются только точки вставки. Выбираются элементы относительно линии в зоне, шириной в допуск в каждую сторону и в высоту.
- PSI_SEL_INTERSECT - выбрать элементы, пересекающие линии. У блоков и текстов учитываются габариты.
- PSI_SEL_INTERSECT_3D - выбрать элементы, пересекающие линии с учетом 3D. У блоков и текстов учитываются габариты.

Да! Еще команда FS из Express ищет блоки на линиях. (Иногда не находит).
__________________
количество моих сообщений не говорит о знании Автокада

Последний раз редактировалось АлексЮстасу, 11.08.2015 в 14:54.
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 12.08.2015, 08:12
#66
tujn08


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


Подскажите пожалуйста функцию поиска в указанной/выделенной области.
Нашел метод Select.
Требуется:
По двум точкам раскидать по наборам из нужных слоев все линии и блоки

----- добавлено через ~12 мин. -----
Нужно сделать вот это из выделенной области:
(setq nab_E (ssget "_X" (list (cons 8 "Pr_Equipment") (cons 0 "INSERT")))) ;создали набор из Boxes и AK_device
(setq nab_O (ssget "_X" (list (cons 8 "Pr_Obj") (cons 0 "INSERT")))) ;создали набор из Object
(setq nab_T (ssget "_X" (list (cons 8 "Pr_Track") (cons 0 "LWPOLYLINE")))) ;создали набор трасс
(setq nab_U (ssget "_X" (list (cons 8 "Pr_UGO_with_to") (cons 0 "INSERT")))) ;создали набор смены высоты

Последний раз редактировалось tujn08, 12.08.2015 в 08:23.
tujn08 вне форума  
 
Непрочитано 13.08.2015, 00:18
#67
skkkk


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Нужно сделать вот это из выделенной области
Убрать "_X" вообще - не то?
skkkk вне форума  
 
Автор темы   Непрочитано 18.08.2015, 13:20
#68
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Убрать "_X" вообще - не то?
Да увидел (до этого совсем забыл об этом).

Код:
[Выделить все]
 (progn
(princ "Выберите границу за пределами которой будут насставленны выноски.")(terpri)
	(setq point_1(getpoint "Первая точка: "))(terpri)
	(princ point_1)(terpri)
	(setq point_2 (getcorner point_1 "Вторая точка: "))(terpri)
	(princ point_2)(terpri)
	(setq point_0 (list (/ (+ (nth 0 point_1) (nth 0 point_2)) 2) (/ (+ (nth 1 point_1) (nth 1 point_2)) 2) (/ (+ (nth 2 point_1) (nth 2 point_2)) 2))  )
	(setq point_7 (list (nth 0 point_0) (nth 1 point_1) (nth 2 point_0))  )
	(setq point_8 (list (nth 0 point_2) (nth 1 point_0) (nth 2 point_0))  )
	(setq point_5 (list (nth 0 point_0) (nth 1 point_2) (nth 2 point_0))  )
	(setq point_6 (list (nth 0 point_1) (nth 1 point_0) (nth 2 point_0))  )
		;	|-----3-----1
		;	| (2) | (1) |
		;	4-----0-----6
		;	| (3) | (4) |
		;	2-----5-----|
	(setq
		nab_E1 nil
		nab_E2 nil
		nab_E3 nil
		nab_E4 nil
	)
	(setq nab_E1 (ssget "_W" point_1 point_0 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 1 четверть
	(setq nab_E2 (ssget "_W" point_3 point_4 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 2 четверть
	(setq nab_E3 (ssget "_W" point_0 point_2 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 3 четверть
	(setq nab_E4 (ssget "_W" point_6 point_5 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 4 четверть
	)
Щас такая проблема - не хотят создаваться наборы. Хотя бы nab_E3 создавался, а щас вообще ни один
tujn08 вне форума  
 
Непрочитано 18.08.2015, 13:33
#69
Кулик Алексей aka kpblc
Moderator

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


А точки, по которым ты выбор делаешь, попадают в отображаемую на экране область или нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.08.2015, 14:04
#70
tujn08


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


Код:
[Выделить все]
 	(command "_rectang" point_1 point_0)
	(setq nab_E1 (ssget "_W" point_1 point_0 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 1 четверть
	(command "_rectang" point_3 point_4)
	(setq nab_E2 (ssget "_W" point_3 point_4 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 2 четверть
	(command "_rectang" point_0 point_2)
	(setq nab_E3 (ssget "_W" point_0 point_2 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 3 четверть
	(command "_rectang" point_6 point_5)
	(setq nab_E4 (ssget "_W" point_6 point_5 (list (cons 8 "Pr_Equipment") (cons 0 "INSERT"))))  ; 4 четверть
Да.
Заметил такое, что отклонился от нужной точки и все вроде как заработало- почему так случилось не знаю. Может потому, что эта точка была на блоке?

----- добавлено через ~3 мин. -----
еще бывало, что точка 0 скакала:
в 2 и 3 четверти была правильной
в 1 и 4 была выше правильной

----- добавлено через ~13 мин. -----
все я понял ))

Как переключать режим выбора того, что за пределами экрана? У меня не выбиралось, нужное- я приближал.
tujn08 вне форума  
 
Непрочитано 19.08.2015, 10:48
#71
skkkk


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


Цитата:
Сообщение от tujn08 Посмотреть сообщение
Как переключать режим выбора того, что за пределами экрана?
Насколько я знаю, такого режима не существует. Я выходил из данной ситуации так: получал точки рамки интерактивно с помощью getcorner, затем перед запуском ssget с аргументом "_C" (но то же справедливо и для "_F") зумировал чертеж, чтобы точки попадали на экран, а после создания набора возвращал вид обратно. Для пользователя это незаметно, если, конечно, чертеж не сотни мегабайт весит.
skkkk вне форума  
 
Автор темы   Непрочитано 19.08.2015, 21:27
#72
tujn08


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
Насколько я знаю, такого режима не существует
Режим есть- знаю точно. В 10 версии при работе дома и на работе - в этом была разница в настройках.
tujn08 вне форума  
 
Непрочитано 19.08.2015, 21:41
#73
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Обязательно... к примеру КИП приборы на НПЗ - на установке высотой 30м - явно будет недобор.
В таких случаях над бы показать разрезик - как трасса эти 30м проходит, а не просто "стоячек" на плане

>>Режим есть- знаю точно.
нет такого режима
zamtmn вне форума  
 
Непрочитано 19.08.2015, 21:41
#74
skkkk


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


Сколько раз обсуждалось - за пределами экрана ни ssget, ни штатные приглашения выбора не выбирают объекты, захваченные рамкой, но не попавшие в видимую часть экрана.
skkkk вне форума  
 
Автор темы   Непрочитано 20.08.2015, 10:27
#75
tujn08


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


Цитата:
Сообщение от zamtmn Посмотреть сообщение
над бы показать разрезик
Уточнение: какой разрез? Профильный - зачем? Лишняя информация- достаточно высоты прибора (зачем показывать колонну - для того что бы показать, что лоток вертикально поднимается). Случаи спирального подъема по колонне уверен не будут.
Для "информационной" красоты приемлем только горизонтальный разрез (поэтажность на колонне) - для того что бы показать где датчик расположен относительно другого оборудования. Опять же высота прибора будет указана все равно. А если приборы на разных этажах- показать на каких они высотах достаточно. Для подсчета длины достаточно- остальное дело красоты в чертежах.

Сугубо мое мнение - так как я сделал бы и уверен сделаю, если придется!
tujn08 вне форума  
 
Автор темы   Непрочитано 21.08.2015, 14:31
#76
tujn08


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


Кто поможет разобраться с проблемой:

ssget
При максимальном "приближением" области расстановка блоков идет идеально. Т.е. координаты вычисляются правильно.
При даже небольшом "удалении" области (для наглядности еще "дальше" сделал) расстановка блоков идет черти как. Т.е. координаты плохо вычисляются.

Округления могут помочь?
Миниатюры
Нажмите на изображение для увеличения
Название: правильно.png
Просмотров: 38
Размер:	33.6 Кб
ID:	155480  Нажмите на изображение для увеличения
Название: не правильно.jpg
Просмотров: 24
Размер:	97.4 Кб
ID:	155481  
tujn08 вне форума  
 
Непрочитано 21.08.2015, 14:38
1 | #77
Кулик Алексей aka kpblc
Moderator

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


А ты проверь - как они вычисляются. И не срабатывают ли "грабли номер раз"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.03.2019, 22:30
#78
tonimikojanovka

Проектирование ИОС4 ЭЭ ОВиК ТМ ТС
 
Регистрация: 11.04.2013
Белгород
Сообщений: 16
Отправить сообщение для tonimikojanovka с помощью Skype™


Подскажите пожалуйста, есть ли такая чудо лиспа, чтобы автокадовские выноски, которые беспорядочно нанесены выставлялись бы в рядочек или в хороводик и не пересекали бы друг друга линиями привязки и линиями полки и текстом на полке не пересекали бы объекты нарисованные в модели и искали бы ближайшее свободное местечко для расположение полки и текста на ней ? Может лень (скорость работы) уже дошла до этого.

Последний раз редактировалось tonimikojanovka, 13.03.2019 в 00:07.
tonimikojanovka вне форума  
 
Непрочитано 13.03.2019, 00:04
#79
Кулик Алексей aka kpblc
Moderator

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


И какое это имеет отношение ко всей теме?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2019, 00:06
#80
tonimikojanovka

Проектирование ИОС4 ЭЭ ОВиК ТМ ТС
 
Регистрация: 11.04.2013
Белгород
Сообщений: 16
Отправить сообщение для tonimikojanovka с помощью Skype™


косвенное
tonimikojanovka вне форума  
 
Непрочитано 13.03.2019, 00:08
#81
Кулик Алексей aka kpblc
Moderator

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


Тогда в отдельную тему.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поиск блоков пересекающих полилинию



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Очистка рисунка от "пустых" блоков Makswell Готовые программы 15 26.10.2022 15:24
AutoCAD 2012 Поиск по атрибутам блоков yurka52rus AutoCAD 8 17.07.2020 12:09
Lisp. Поиск блоков в файлах и замена атрибутов AlexKey LISP 3 12.09.2013 16:39