Как узнать, пересекает ли точка 3D-объект в сгенерированном SolidWorks файле САПР?

Существует ли относительно простой способ узнать, пересекает ли 3D-точка сложную 3D-форму для любого созданного в SolidWorks файла САПР, такого как Part, IGES, STEP, ACIS и т. д.? Мне не нужно отображать объект в моем приложении.

Любое предложение будет оценено.

P.S. Мой вопрос очень похож на этот, но я не использую ни Java, ни файл PLY.


person Mehdi    schedule 06.12.2015    source источник
comment
В файле stl (например) вы можете перебрать все лица и выполнить некоторую триангуляцию. tutorial.math.lamar.edu/Classes/CalcII/EqnsOfPlanes.aspx . Надеюсь, это поможет.   -  person Hugues Paquet Blanchette    schedule 06.12.2015
comment
Большое спасибо за ваш полезный комментарий. Например, вы сказали, есть ли другой формат, с которым я могу работать? Считаете ли вы, что STL — самый простой формат, который можно использовать?   -  person Mehdi    schedule 07.12.2015
comment
Я не знаю других форматов, но .stl может быть в текстовом файле: en. wikipedia.org/wiki/STL_%28file_format%29 . Время обработки займет много времени   -  person Hugues Paquet Blanchette    schedule 07.12.2015
comment
О, я вижу. Я написал простой код, который загружает файл STL. Как вы сказали, формат довольно ясен, но определение того, находится ли точка внутри фигуры или нет, может занять довольно много времени, особенно если этот процесс следует повторить для большого количества точек.   -  person Mehdi    schedule 07.12.2015
comment
Вы проверили API SolidWorks? Под пересечением вы подразумеваете, что точка расположена на ребре, поверхности, вершине или в трехмерной точке или внутри трехмерной формы?   -  person Amen Jlili    schedule 09.12.2015
comment
Нет, я этого не сделал, потому что мне нужно было сделать это в моем приложении. Да, под пересечением я имел в виду почти все ситуации, которые вы упомянули. Я уже написал код, который загружает файл STL и определяет, находится ли какая-либо произвольная точка на ребре или грани или находится ли она внутри или снаружи фигуры.   -  person Mehdi    schedule 09.12.2015
comment
на самом деле ваше приложение будет использовать сборки взаимодействия SolidWorks, чтобы понять это и вернуть результат в ваше приложение, поэтому, технически говоря, вы делаете это внутри приложения.   -  person Amen Jlili    schedule 20.12.2015
comment
Хорошо, не могли бы вы опубликовать фрагмент кода, показывающий, как можно использовать эти сборки? Я в основном использую C#, однако подойдет любой другой язык программирования.   -  person Mehdi    schedule 21.12.2015


Ответы (1)


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

person Vlad    schedule 02.06.2017
comment
я устал его использовать, этот API вызывает сбой, не могли бы вы дать образец кода, например, как его использовать - person V01; 30.06.2020
comment
Это займет значительно больше времени, чем я готов выделить. Но если вы поделитесь своим кодом и расскажете мне, где и как он дает сбой, я могу помочь. - person Vlad; 30.06.2020
comment
вам решать. Создайте новый вопрос SO и вставьте сюда ссылку. ИЛИ добавьте код в pastebin/github и вставьте сюда ссылку. Не забудьте упомянуть, какое исключение вы получаете и в какой строке. - person Vlad; 02.07.2020