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

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

Формирование набора

Ответ
Поиск в этой теме
Непрочитано 04.04.2008, 10:43 #1
Формирование набора
Mazai
 
Москва
Регистрация: 04.04.2008
Сообщений: 97

Здравствуйте!
Подскажите пожалуйста, как можно сформировать набор - выбор секущим кругом.
То есть нужно определить примитивы, лежащие в области круга целиком или частично.
(Круга, как такового, на чертеже не нарисовано. То есть это воображаемая область.)
Просмотров: 3633
 
Непрочитано 04.04.2008, 10:47
#2
Кулик Алексей aka kpblc
Moderator

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


(ssget "_WP" <Список точек> [<Фильтр объектов>])
Список точек сформировать, разбив воображаемую окружность на N отрезков.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.04.2008, 11:00
#3
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,923
<phrase 1=


Кулик Алексей aka kpblc
жжошь
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 04.04.2008, 11:05
#4
Zouss


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


Кулик Алексей aka kpblc, все-таки секущим кругом будет (ssget "_СP" <Список точек> [<Фильтр объектов>])
Zouss вне форума  
 
Непрочитано 04.04.2008, 11:06
#5
Кулик Алексей aka kpblc
Moderator

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


> Zenon: А чего, я так через grvecs в свое время отрисовывал динамическую окружность (по некоторым условиям строить ее было нельзя). работало же...
> Zouss : Да, точно. Что-то я затупил
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.04.2008, 11:28
#6
Zouss


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


Алексей формулкой поделись, а то я свою записную книжку с наглоритмами дома оставил
Zouss вне форума  
 
Непрочитано 04.04.2008, 11:31
#7
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,923
<phrase 1=


Кулик Алексей aka kpblc а теперь тоже самое, но для прапорщиков. Тоисть 2 раза и медленно.
как и каким образом можно сформировать сию окружность, насколько я понял вопрос про выбор объектов с помощью окружности (наподобии выбора рамкой).
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 04.04.2008, 11:57
#8
Zouss


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


исходные данные:
координаты центра окружности и её радиус
нужна формула любви для определения координат точек на окружности
хотя вроде там ничего сложного нет - два прямоугольных треугольника
загоняем формулу в цикл от 0 до 360 и получаем список точек окружности
который список и передаем в ssget
чем мельче шаг угла, тем точнее аппроксимация окружности отрезками, впрочем для небольших радиусов это не принципиально - полиго то секущий
Zouss вне форума  
 
Непрочитано 04.04.2008, 12:13
#9
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun select-by-circle (center radius filter / pt_lst res)
                        ;|
*    Формирование набора примитивов, входящих в окружность.
*    Параметры вызова:
	center	центр "виртуальной" окружности
	radius	ее радиус
	filter	фильтр объектов. nil -> все
|;
  (if (and center radius)
    (progn
      (setq pt_lst ((lambda (/ ang step lst)
                      (setq step (/ pi 32.)
                            ang  (- step)
                            ) ;_ end of setq
                      (while (<= (setq ang (+ ang step)) (* 2. pi))
                        (setq lst (cons (polar center ang radius) lst))
                        ) ;_ end of while
                      (reverse lst)
                      ) ;_ end of lambda
                    )
            ) ;_ end of setq
      (if filter
        (setq res (ssget "_CP" pt_lst filter))
        (setq res (ssget "_CP" pt_lst))
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  res
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.04.2008, 12:33
#10
VVA

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


А потом потребуется эллипс, сплайн, полилиния с дуговыми сегментами
Код:
[Выделить все]
;;;Required Express tools
;;;Inside contour select
(defun C:ICS ( / en pl n ss lst)
  (vl-load-com)
   (if (and (setq en (car(entsel "\nУкажите полилинию,круг, эллипс, сплайн: ")))
           (wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE,CIRCLE,ELLIPSE,SPLINE")
           )
    (progn
      (ACET-SS-ZOOM-EXTENTS(ACET-LIST-TO-SS (list en)))
      (setq lst(acet-geom-object-point-list en nil))
      ;;;(setq lst (mapcar '(lambda(x)(trans x 0 1)) lst))
      (if (setq ss (ssget "_CP" lst))(SSSETFIRST ss ss))
      (setq ss nil)))(princ))
(princ "\nНаберите в командной строке ICS")
Кстати про обратную задачу (выделение снаружи контура) можно посмотреть здесь Выделение снаружи _pline
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 04.04.2008 в 12:48.
VVA вне форума  
 
Автор темы   Непрочитано 25.04.2008, 15:02
#11
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Спасибо за советы.

Последний раз редактировалось Mazai, 03.07.2008 в 09:24.
Mazai вне форума  
 
Автор темы   Непрочитано 03.07.2008, 09:26
#12
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Наверное глупый вопрос, но подскажите пожалуйста - почему у меня не получается выбрать объекты секущей линией, если они находятся вне видимого контура в модели? То есть, я программно перебираю линии чертежа и по этим линиям пробую определить какие объекты они пересекают. И набор создаётся только в том случае, когда пересекаемые объекты находятся на видимой части экрана. Что не так?

Использую набор:
(ssget "_F" lstKoord (8 . "Layer"))
Mazai вне форума  
 
Непрочитано 03.07.2008, 10:18
#13
VVA

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


Все так. Такая особенность ssget (или Автокад), если указываешь точки (список точек), то они должны быть видимы на экране.
Не зря в предыдущем коде есть такая строчка
(ACET-SS-ZOOM-EXTENTS(ACET-LIST-TO-SS (list en))) - показывает выбранные объекты целиком на экран.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.07.2008, 10:27
#14
Кулик Алексей aka kpblc
Moderator

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


Один момент: по-моему, если сначала делать набор, а потом уже функцию запускать, то объекты должны быть видны на экране. Если сначала функцию, а набор "по требованию" и мышой (без указания типа _L или _P) - то необязательно.
P.S. pickfirst = 1.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.07.2008, 11:13
#15
Mazai


 
Регистрация: 04.04.2008
Москва
Сообщений: 97


Выбор получился, спасибо.
Только вот, так как объектов много и предложенная команда от VVA приводит к выполнению ZOOM'а - происходит автоматическое изменение вида. Это занимает какое-то время. И при обработки большого количества линий приходиться ждать. Можно как-то отключить это отображение? Как например с переменной "CMDECHO" - отключения "шёпота" командной строки.

P.S.: пробовал баловаться с переменной "REGENMODE" - не помогло.
Mazai вне форума  
 
Непрочитано 03.07.2008, 16:49
#16
VVA

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


Посмотри эту тему
Там есть нужные тебе ф-ции lib:IsPtInView и lib:Zoom2Lst + ссылки на команды SCCP и SCWP
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.10.2013, 05:47
#17
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Не работает код из поста #10 ни в 2008 ни в 2013 а край как нужно.

Пишет:
Команда: ICS
Укажите полилинию,круг, эллипс, сплайн: ; ошибка: no function definition: ACET-LIST-TO-SS

Может всё же можно что то подправить?
Jonas вне форума  
 
Непрочитано 03.10.2013, 07:45
#18
gomer

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


экспресс тулз установи
gomer вне форума  
 
Непрочитано 03.10.2013, 10:19
#19
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Цитата:
Сообщение от gomer Посмотреть сообщение
экспресс тулз установи
Да, уже выяснил, почему то слетели, восстановил, всё работает.
Jonas вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Формирование набора



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сроки набора прочьности VVITTALIK Конструкции зданий и сооружений 9 21.02.2008 12:00
SCAD ФОРУМ (ФОРмирование Укрупненных Моделей) EUDGEN SCAD 55 21.07.2006 14:29
формирование справочников укрупненных показателей стоимости Иван33 Прочее. Архитектура и строительство 1 30.11.2005 17:27
Формирование отчета в Acess в виде таблице. Mikhail Программирование 72 25.02.2005 16:01