dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

Добавление 3DSOLID в набор по точке внутри тела

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 11.01.2019, 20:19 #1
Добавление 3DSOLID в набор по точке внутри тела
Веселин
 
Регистрация: 15.05.2014
Сообщений: 38

Веселин вне форума Вставить имя

С помощью функции ssget пытаюсь выбрать 3DSOLID используя точку внутри, а не на ребре.
Когда установлен текущий визуальный стиль "Скрытый", то набор создаётся, а если обычный 2dкаркас, то нет.
Как можно выбрать тело проще, без изменения визуального стиля?
Просмотров: 359
 
Автор темы   Непрочитано 13.01.2019, 11:24
#2
Веселин


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


Расштрю вопрос. У меня есть точка в пространстве, и мнее нужно найти ближайший 3DSOLID, например куб.
При этом я знаю что искомый объект должен находиться не дальше чем 5мм от точки, и даже знаю в какой стороне.
Перебирать все объекты рисунка и оставить тот который ближе всех это один путь. Но объектов может быть много. Я ищу способ проще, без тупого перебора.
Веселин вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 13.01.2019, 12:09
1 | #3
koMon


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


Выбрать объекты секущей линией (fence) от искомой точки до точки на расстоянии 5 единиц в известном направлении и отфильтровать выбор на наличие 3dsolid-а.
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 13.01.2019, 12:36
1 | #4
ProjectMaster


 
Регистрация: 21.08.2017
Сообщений: 1,057


Создать сферу вокруг точки радиусом 5 мм.
Проанализировать пересечения с имеющимися телами в области видимости.

P.S. Извиняюсь, я не верно ответил, так как вопроса не понял.
ProjectMaster вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 13.01.2019, 14:16
#5
Веселин


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


Цитата:
Сообщение от ProjectMaster Посмотреть сообщение
Создать сферу вокруг точки радиусом 5 мм.
Проанализировать пересечения с имеющимися телами в области видимости.
Я так и делаю, да только у меня область видимости всё пространство модели. А это перебор как в прямом смысле, так и в переносном.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
Выбрать объекты секущей линией (fence) от искомой точки до точки на расстоянии 5 единиц в известном направлении и отфильтровать выбор на наличие 3dsolid-а.
Уже пытался именно так, но если секущая линия проходит не через ребро , то ничего не находит.

----- добавлено через ~21 мин. -----
Пока что код выглядит вот так, и чото виснет.
Код:
[Выделить все]
 ;; Сфера
(setq sphereObj (vlax-ename->vla-object (car (entsel))))
;; Поиск пересекаемого тела.
(vlax-for obj (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  (if (and (equal (vla-get-ObjectName obj) "AcDb3dSolid") (not (equal obj sphereObj)))
      (if (setq solidObj (vla-CheckInterference sphereObj obj :vlax-false :vlax-true))
        (progn
          (setq tmpfind obj) ; искомый объект
          (vla-Delete solidObj)
        )
      )
  )
  tmpfind ; VLA-object
)
Веселин вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 14.01.2019, 10:57
1 | 1 #6
koMon


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


Цитата:
Сообщение от Веселин Посмотреть сообщение
Уже пытался именно так, но если секущая линия проходит не через ребро , то ничего не находит.
побробовал смоделировать буквально. точка (примитив) ровно в центре (0,0,0) куба с ребром 5 единиц. секущая линия (0,0,0) (6,0,0) сечёт грань. куб выбирается.

Код:
[Выделить все]
 (setq point_inside_box (cdr (assoc 10 (entget (car (entsel "\nТочка внутри: ")))))
	  point_6_units_X (list (+ 6.0 (car point_inside_box)) (cadr point_inside_box) (caddr point_inside_box))
)
(setq 3d_solid_sset (ssget "_F" (list point_inside_box point_6_units_X)))
(command "_erase" 3d_solid_sset)
метод vla-CheckInterference с постоением сферы здесь вряд ли может быть полезен, поскольку определяет пересечение двух 3d тел и если таковое имеется, то строит его. здесь из двух перескаемых 3d тел, одно априори неизвестно и собственно ищется. вопрос с чем пересекать сферу?
Миниатюры
Нажмите на изображение для увеличения
Название: 3D_Solid_Sel.gif
Просмотров: 6
Размер:	209.5 Кб
ID:	209821  
koMon вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 14.01.2019, 16:51
#7
Веселин


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


koMon Да действительны, вы правы. У меня сразу не получилось по неизвестной причине. Спасибища!
Веселин вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Добавление 3DSOLID в набор по точке внутри тела

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СПДС 10 VBA. Как выделить/подсветить набор объектов СПДС, входящих в коллекцию? AlexV ПО от CSoft 16 27.12.2017 15:24
Autolisp. Как добавить в набор динамические блоки с определенными именем? vladimirr_b LISP 10 23.02.2016 13:53
Помогите найти ошибку с Lisp "автонумерацией листов" tujn08 LISP 14 12.05.2015 17:20
Как получить набор текста не в области видимости? prajdziswet Программирование 13 05.05.2015 08:14
Вершины тела (ACIS 3dSolid) Евгений А. Программирование 2 20.10.2006 11:43

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||