GreyWorm

Выбор двойников

Pinned posts

Возможно ли в NX сделать автоматический выбор двойников? Т.е. есть куча всяких линий, кривых, окружностей и какие-то из этих элементов накладываются друг на друга. Не пересекаются, а именно накладываются таким образом например что мы видим одну окружность, а на самом деле их там две одна на другой. Так вот можно ли в автоматическом режиме выделить всех двойников и удалить? Если нет то подскажите софт где это работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts

выделить перебором нужный можно (когда подводишь курсор к такому месту, вылезает окно с предложением выбора), удалить автоматом все "лишние", кроме одной - нет. А так... В АКАД есть функция "overkill", который как раз для этого предназначен. Удаляет наложения и объединяет коллинеарные отрезки и концентричные одинаковые дуги.

 

NX он по-другому работает. Кто знает, для чего ты использовал накладывающиеся кривые? Если один для вытягивания, другой для вырезки, третий как направляющую, то удалить невозможно будет без удаления зависимых операций. А иногда ещё и будет требоваться проекция в эскиз независимых/импортированных кривых, не изменяя по сути их положения. И опять получается, что ты связываешь одно с другим.

Изменено пользователем Bully

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В NX в навигаторе модели в режиме без порядка построения есть папка "неиспользуемые элементы" - вам туда ...

В Catia. например, для этого есть спец. команда "Удалить неиспользуемые"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, GreyWorm сказал:

есть куча всяких линий, кривых, окружностей и какие-то из этих элементов накладываются друг на друга

Как же Вы дошли до жизни такой? Нужно срочно пересмотреть методы работы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, lexincton сказал:

есть папка "неиспользуемые элементы" - вам туда ...

Это конечно не то, что спрашивал ТС, но я тоже бы посоветовал забыть об изначальном вопросе пойти по этому пути. А ещё лучше:

8 часов назад, Ветерок сказал:

Нужно срочно пересмотреть методы работы.

Если конечно это всё не результат работы в АКАДах/компасах (импортированная геометрия т.е.). Тогда пересматривать надо методы работы в них.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 27.12.2017 в 14:48, Bully сказал:

удалить автоматом все "лишние", кроме одной - нет

Понял что нет такой фунции. Ок.

 

В 28.12.2017 в 03:33, lexincton сказал:

В NX в навигаторе модели в режиме без порядка построения есть папка "неиспользуемые элементы" - вам туда ...

Как это может мне помочь? Для чего вообще этот режим?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
34 минуты назад, GreyWorm сказал:

Понял что нет такой функции. Ок.

Не знаю такую функцию (нигде). Как программа определит, что лишнее (ей же нужно сказать об этом)? А вот сказать можно (а потом удалить лишние)....

Может быть поясните смысл, откуда там "лишние" и что в конечном итоге хотите получить?

Изменено пользователем Атан

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, Атан сказал:

Не знаю такую функцию (нигде). Как программа определит, что лишнее (ей же нужно сказать об этом)? А вот сказать можно (а потом удалить лишние)....

Может быть поясните смысл, откуда там "лишние" и что в конечном итоге хотите получить?

в Компасе есть такая примочка

в НХ - только в ручном режиме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, Атан сказал:

Не знаю такую функцию (нигде). Как программа определит, что лишнее (ей же нужно сказать об этом)?

Я не могу объяснить доходчивей чем в своем первом посте. По-моему там все ясно. К тому же уже назвали много вариантов. Функция такая есть и много где. Раньше я знал только в Рино эту функцию. Называется selectDuplicates. Вот подсказали про Акад - функция Overkill. В компасе @valeo-ua сказал есть такая примочка, но не уточнил как зовется. Режим неиспользуемых элементов о котором сказал @lexincton я пока не понял к чему здесь упомянулся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

И, работая во всех этих программах, Вы всегда создаёте кучу дублирующих объектов? Однозначно Вам надо пересмотреть методы своей работы. Если в "обычных" программах это не большое зло, то при подобном подходе в параметрических программах можно получить очень большие неприятности.

Изменено пользователем Ветерок

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отказался использовать напрямую для расчета программ ЧПУ конструкторские файлы Автокада, частично из-за двойников. Даже Рино находит только абсолютно одинаковые элементы, если наложены чуть разные линии, всё. А при выборе контура для обработки это беда. Вообще, если у конструктора задача только выпустить чертеж, то использовать эти разработки для ЧПУ нельзя.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ни разу не могу припомнить, чтобы у меня в треххмерке когда-то были двойники в принципе!!
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, lobzik сказал:

 

Ни разу не могу припомнить, чтобы у меня в треххмерке когда-то были двойники в принципе!!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Ветерок , спасибо за подобные советы, но не трудитесь) Люди в мире работают ведь не только с чертежами, техническими деталями, чпу и т.д. Есть и те кто занимается дизайном, художественной графикой, созданием художественных изделий и тому подобными вещами, использует в работе corel, photoshop, ArtCam. Работает с векторными и растровыми изображениями, делает трассировку чтобы получить из растра вектора, которые могут представлять из себя черт знает что в определенных случаях. Ну и иногда возникает необходимость пользоваться параметрическим софтом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В любой работе и в любом софте надо работать аккуратно и грамотно. И не надо оправдывать собственное раздолбайство некими "творческими и художественными" задачами. Я сам работаю с дизайнерами и делаю много чего нестандартного. И никаких дублирующих элементов у меня нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, Ветерок сказал:

В любой работе и в любом софте надо работать аккуратно и грамотно. И не надо оправдывать собственное раздолбайство некими "творческими и художественными" задачами. Я сам работаю с дизайнерами и делаю много чего нестандартного. И никаких дублирующих элементов у меня нет.

Молодец!

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, GreyWorm сказал:

Молодец!

Да, в отличие от тебя, раздолбая.

И в твоих оценках не нуждаюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, Ветерок сказал:

Да



1111.jpeg.3a453eebefcc66dcc3103401fde03e35.jpeg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, valeo-ua сказал:

в Компасе есть такая примочка

в НХ - только в ручном режиме.

Как это работает в Компасе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, Атан сказал:

Как это работает в Компасе?

http://forum.ascon.ru/index.php/topic,12375.msg66665.html#msg66665

в 08-м году была такая команда

еще: http://forum.ascon.ru/index.php/topic,25155.msg182148.html#msg182148

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 минут назад, valeo-ua сказал:

Как это работает в Компасе? Как выделяем (рамкой или нет), что выделяем (все примитивы или только определённые), что нажимаем, как нажимаем? В модели, в чертеже? Нужно в модели...

Если Вы не знаете, так и напишите.....

Изменено пользователем Атан

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
54 минуты назад, Атан сказал:

Как это работает в Компасе? Как выделяем (рамкой или нет), что выделяем (все примитивы или только определённые), что нажимаем, как нажимаем? В модели, в чертеже? Нужно в модели...

Если Вы не знаете, так и напишите.....

да что вы прицепились "знаю или не знаю"

я эту "Проверка наложения элементов" пользовал всего пару раз

после НГ, если не забуду, - на работе посмотрю- вспомню как оно работает.

если вам срочно - сами ройте команду и проверяйте как оно работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, valeo-ua сказал:

да что вы прицепились "знаю или не знаю"

я эту "Проверка наложения элементов" пользовал всего пару раз

после НГ, если не забуду, - на работе посмотрю- вспомню как оно работает.

если вам срочно - сами ройте команду и проверяйте как оно работает

Рыл, не нашёл ...

С Новым Годом!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Фильтр Region Boundary Curves при выборе контура не поможет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 30.12.2017 в 09:52, GreyWorm сказал:

Я не могу объяснить доходчивей чем в своем первом посте. По-моему там все ясно. К тому же уже назвали много вариантов. Функция такая есть и много где. Раньше я знал только в Рино эту функцию. Называется selectDuplicates. Вот подсказали про Акад - функция Overkill. В компасе @valeo-ua сказал есть такая примочка, но не уточнил как зовется. Режим неиспользуемых элементов о котором сказал @lexincton я пока не понял к чему здесь упомянулся.

По нужным кривым можно сделать какое-нибудь построение, например выдавливание, выбранные кривые будут удалены из списка неиспользуемых, все оставшиеся дупликаты в неиспользуемых можно быстро удалить. Либо ручным выбором, как уже говорилось

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ID: 26   Опубликовано: (изменено)

20 часов назад, lexincton сказал:

По нужным кривым можно сделать какое-нибудь построение, например выдавливание, выбранные кривые будут удалены из списка неиспользуемых, все оставшиеся дупликаты в неиспользуемых можно быстро удалить. Либо ручным выбором, как уже говорилось

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

 

В 01.01.2018 в 14:46, Посторонним В сказал:

Фильтр Region Boundary Curves при выборе контура не поможет?

Неа)

 

Вопрос уже решен. Ясно что в NX нет такой команды, ясно где есть. Поэтому спасибо всем кто откликнулся.

 

Ну и подытожу))):  @Ветерок

 
В 30.12.2017 в 19:25, GreyWorm сказал:

Молодец!

 

В 30.12.2017 в 19:27, Ветерок сказал:

Да, в отличие от тебя, раздолбая.

И в твоих оценках не нуждаюсь.

1111.jpeg.3a453eebefcc66dcc3103401fde03e35.jpeg
 

 

 

Изменено пользователем GreyWorm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
28 минут назад, GreyWorm сказал:

Их могут быть сотни и тысячи элементов

Ну-ну! Это диагноз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Ветерок сказал:

Ну-ну! Это диагноз.

Тысячи и десятки тысяч!) Но не так что у тебя есть две окружности и на них наложены 10 тысяч других, как подумал ветерок который кроме операции вытягивания ничего не применяет. А так что у тебя огромных размеров рабочая область в которой десятки тысяч кривых, полученные к примеру после трассировки и пара сотен наложенных элементов. Так уж работают некоторые функции в разных программах, не дают идеальной геометрии. Это тебе не бобышки тянуть @Ветерок)))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, GreyWorm сказал:

Тысячи и десятки тысяч!) Но не так что у тебя есть две окружности и на них наложены 10 тысяч других, как подумал ветерок который кроме операции вытягивания ничего не применяет. А так что у тебя огромных размеров рабочая область в которой десятки тысяч кривых, полученные к примеру после трассировки и пара сотен наложенных элементов. Так уж работают некоторые функции в разных программах, не дают идеальной геометрии. Это тебе не бобышки тянуть @Ветерок)))))

показать в файле могёте?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Федор Марценюк сказал:

посмотреть что не так

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

1 пользователю понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу



  • Реклама

  • Сообщения

    • Knight of Truth
      По Windows 7 - не знаю. На этой оси у нас обновления не тестировались - так как решили не тратить время и не пробовать снова эту отраву на вкус, ведь принцип действия патчей одинаков, не зависимо от операционной системы, а разработчики Microsoft по указу сверху могут добавлять новые компоненты этих патчей в любые обновления "стабильности" и "безопасности". Интересная информация: компания ASUS уже выкатила новые версии БИОС для своих материнских плат, где в процессор прошивается новый микрокод, устраняющий "уязвимости" системы. Подозреваю, что там припасено дополнительное урезание мощности компьютерного железа.
    • soklakov
      у Ансиса есть старый курс " Aeroacoustics using ANSYS Fluent 14.5 ".   сам не читал, но говорят там довольно понятно всё.
    • Борман
    • Tad
      По поводу дрожания - надо развоздушить систему. Если воздух не обнаружится - пробовать немного уменьшить коэффициент усиления ПИД регулятора осей Y при рабочей скорости. По поводу отключения - мало информации.
    • soklakov
      Крайне интересно. Правильно ли я понял, что Ваша софтина умеет прикладывать нагрузки к кубику, не спрашивая меня, какую из шести граней закрепить, а какую нагрузить? Если так, то тревожит вопрос: откуда она знает?
    • soklakov
      Подробностей? А то и правда, секретный танк, о котором ученые еще ничего не знают, работает при -300 по цельсию.
    • Sla_68
      Можете меня обзывать как хотите, быдло-кодером ну и т.д. Ну хоть убейте меня , я не знаю как выполнить данную задачу без дополнительных построений.  А так код вполне себе рабочий.Определяет все что мне нужно. Только что написал. Выкладываю код. Там имеется еще наборчик пользовательских функций. Но они все тригонометрические. Поэтому пока без них. Sub Назначение_свойств_профиля() 'On Error GoTo ex Dim swFace As SldWorks.face2 Dim swSurf As SldWorks.Surface Dim swDisplayDimension As SldWorks.DisplayDimension Dim swDim As SldWorks.Dimension Dim v1 As SldWorks.Vertex Dim v2 As SldWorks.Vertex Dim swRefAxis As SldWorks.RefAxis Dim vAxisParam As Variant Dim x As Double Dim y As Double Dim z As Double Dim x1 As Double Dim y1 As Double Dim z1 As Double Dim fx As Double Dim fy As Double Dim fz As Double Dim fx1 As Double Dim fy1 As Double Dim fz1 As Double Dim sm() As Double Dim swFeatMgr As SldWorks.FeatureManager Set swApp = Application.SldWorks Set part = swApp.ActiveDoc Set swFeatMgr = part.FeatureManager Set swSelMgr = part.SelectionManager part.SketchManager.AddToDB = True swApp.SetUserPreferenceToggle swSketchAutomaticRelations, False 'автопривязки отключаем swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swSketchInference, False 'прилипание ..отключает все взаимосвязи swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, False 'убивает диалог с размером false -выключает диалог tt = part.GetTitle mg = Mid(tt, 10, 2) lRetVal = part.AddCustomInfo3("", "материал", swCustomInfoText, mg) partTitle = part.GetTitle namedetal = partTitle & ".SLDPRT" arrbody = part.GetBodies2(swSolidBody, False) Set body = arrbody(0) glavfaces = вернуть_номера_главных_плоскостей(body) Set swFace = glavfaces(2) Set swSurf = swFace.GetSurface '======================================================== If swSurf.IsPlane Then edjearr = вернуть_2_главных_кромки(swFace1) Set Edge = edjearr(2) params = Edge.GetCurveParams2 x1 = params(0): x2 = params(3): an1 = x1 - x2: bn1 = x2 - x1 'вектор оси y1 = params(1): y1 = params(4): an2 = y1 - y2: bn2 = y2 - y1 z1 = params(2): z1 = params(5): an3 = z1 - z2: bn3 = z2 - z1 pvec = перпендикулярный_вектор(an1, an2, an3) Set axeobj = Edge Set faceObj = swFace ElseIf swSurf.IsCylinder Then params = swFace.GetSurface.CylinderParams x1 = params(0): x2 = params(3): an1 = x1 - x2: bn1 = x2 - x1 'вектор оси y1 = params(1): y1 = params(4): an2 = y1 - y2: bn2 = y2 - y1 z1 = params(2): z1 = params(5): an3 = z1 - z2: bn3 = z2 - z1 pvec = перпендикулярный_вектор(an1, an2, an3) part.Insert3DSketch2 True 'вход строим 3 точки для плоскости Set swSketch = swApp.ActiveDoc.GetActiveSketch2 swSketch.Name = "точка" загрузочная_точка_смещена 0.1, (x1 + x2) / 2, (y1 + y2) / 2, (z1 + z2) / 2, pvec(0), pvec(1), pvec(2), fx0, fy0, fz0 Set swSketchPt0 = part.SketchManager.CreatePoint(fx0, fy0, fz0) part.Insert3DSketch2 True 'выход part.BlankSketch 'скрывает эскизы swSketchPt0.SelectByMark False, 2 swFace.SelectByMark True, 2 bret = part.InsertAxis 'вставка оси Set swFeatMgr = part.FeatureManager swFeatures = swFeatMgr.GetFeatures(True) Set axeobj = swFeatures(UBound(swFeatures)) 'ось axeobj.Name = "ось профиля" axeobj.SelectByMark False, 2 swSketchPt0.SelectByMark True, 2 Set faceObj = part.CreatePlaneThruLineAndPt(False) 'создает плоскость faceObj.Name = "плоскость распила" faceObj.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.BlankRefGeom Else Exit Sub End If '=============================================== загрузочная_точка_смещена 3, x1, y1, z1, an1, an2, an3, fx1, fy1, fz1 'точки оси загрузочная_точка_смещена 3, x2, y2, z2, bn1, bn2, bn3, fx2, fy2, fz2 'точки оси загрузочная_точка_смещена 0.1, fx1, fy1, fz1, pvec(0), pvec(1), pvec(2), fx11, fy11, fz11 'точки будущих линий2 загрузочная_точка_смещена 0.1, fx2, fy2, fz2, pvec(0), pvec(1), pvec(2), fx22, fy22, fz22 'точки будущих линий2 '==================================================== faceObj.SelectByMark False, 2 part.SketchManager.InsertSketch True 'вставка 2D эскиза на рабочей плоскости Set swSketch = swApp.ActiveDoc.GetActiveSketch2 swSketch.Name = "контур_распила" Dim swMathPt1 As SldWorks.MathPoint Dim swMathPt11 As SldWorks.MathPoint Dim swMathPt111 As SldWorks.MathPoint Dim swMathPt2 As SldWorks.MathPoint Dim swMathPt22 As SldWorks.MathPoint Dim swMathPt222 As SldWorks.MathPoint Set swMathPt1 = get2Dpoint(swSketch, fx1, fy1, fz1) Set swMathPt11 = get2Dpoint(swSketch, fx11, fy11, fz11) Set swMathPt2 = get2Dpoint(swSketch, fx2, fy2, fz2) Set swMathPt22 = get2Dpoint(swSketch, fx22, fy22, fz22) Set skSegment1 = part.SketchManager.CreateCenterLine _ (swMathPt1.ArrayData(0), swMathPt1.ArrayData(1), swMathPt1.ArrayData(2), _ swMathPt11.ArrayData(0), swMathPt11.ArrayData(1), swMathPt11.ArrayData(2)) skSegment1.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.SketchAddConstraints "sgPERPENDICULAR" Set skSegment2 = part.SketchManager.CreateCenterLine _ (swMathPt2.ArrayData(0), swMathPt2.ArrayData(1), swMathPt2.ArrayData(2), _ swMathPt22.ArrayData(0), swMathPt22.ArrayData(1), swMathPt22.ArrayData(2)) skSegment2.SelectByMark False, 2 axeobj.SelectByMark True, 2 part.SketchAddConstraints "sgPERPENDICULAR" '======================================================================================== Set v1 = ближайшая_вершина_к_координате(body, fx1, fy1, fz1, vdis1) Set Edge1 = ближайшая_кромка_к_координате(body, fx1, fy1, fz1, edis1) Set v2 = ближайшая_вершина_к_координате(body, fx2, fy2, fz2, vdis2) Set edge2 = ближайшая_кромка_к_координате(body, fx2, fy2, fz2, edis2) '=================================== If vdis1 <= edis1 Then v1.SelectByMark False, 2 Set swStartPt1 = skSegment1.GetStartPoint2 swStartPt1.SelectByMark True, 2 part.SketchAddConstraints "sgCOINCIDENT" Else Edge1.SelectByMark False, 2 skSegment1.SelectByMark True, 2 part.SketchAddConstraints "sgTANGENT" part.SketchAddConstraints "sgCOLINEAR" End If '================= If vdis2 <= edis2 Then v2.SelectByMark False, 2 Set swStartPt2 = skSegment2.GetStartPoint2 swStartPt2.SelectByMark True, 2 part.SketchAddConstraints "sgCOINCIDENT" Else edge2.SelectByMark False, 2 skSegment2.SelectByMark True, 2 part.SketchAddConstraints "sgTANGENT" part.SketchAddConstraints "sgCOLINEAR" End If '===================================== skSegment1.SelectByMark False, 2 skSegment2.SelectByMark True, 2 Set swDisplayDimension = part.AddDimension2(0, 0, 0) Set swDim = swDisplayDimension.GetDimension swDim.DrivenState = 1 swDim.Name = "длина" dlina = """длина@контур_распила@@default@" & namedetal & """" shirina = "1" lRetVal = part.DeleteCustomInfo2("", "длина") lRetVal = part.DeleteCustomInfo2("", "ширина") lRetVal = part.AddCustomInfo3("", "длина", swCustomInfoText, dlina) lRetVal = part.AddCustomInfo3("", "ширина", swCustomInfoText, shirina) part.SketchManager.InsertSketch True 'выход из эскиза part.BlankSketch ' скрыть эскиз part.SketchManager.AddToDB = False swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swSketchInference, True 'прилипание ..отключает все взаимосвязи swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, True 'убивает диалог с размером true -включает диалог swApp.SetUserPreferenceToggle swSketchAutomaticRelations, True 'автопривязки включаем End Sub Function ближайшая_вершина_к_координате(body, x, y, z, dis) vList = body.GetVertices Dim arr() As Double Dim edjpoint As Variant Dim arrobj() As Object Dim arrobjdis() As Double If IsEmpty(vList) Then dis = 1000000 Set ближайшая_вершина_к_координате = Nothing Exit Function End If For i = 0 To UBound(vList) edjpoint = vList(i).GetClosestPointOn(x, y, z) 'ближайшая точка ReDim Preserve arr(i) 'массив дистанций ReDim Preserve arrobj(i) arr(i) = длина_линии(x, y, z, edjpoint(0), edjpoint(1), edjpoint(2)) Set arrobj(i) = vList(i) Next i max_min_indexarray arr, max1n, max2n, min1n, min2n dis = arr(min1n) Set ближайшая_вершина_к_координате = arrobj(min1n) End Function Function ближайшая_кромка_к_координате(body, x, y, z, dis) edgeList = body.GetEdges Dim arr() As Double Dim edjpoint As Variant Dim arrobj() As Object Dim arrobjdis() As Double For i = 0 To UBound(edgeList) edjpoint = edgeList(i).GetClosestPointOn(x, y, z) 'ближайшая точка ReDim Preserve arr(i) 'массив дистанций ReDim Preserve arrobj(i) arr(i) = длина_линии(x, y, z, edjpoint(0), edjpoint(1), edjpoint(2)) Set arrobj(i) = edgeList(i) Next i max_min_indexarray arr, max1n, max2n, min1n, min2n dis = arr(min1n) Set ближайшая_кромка_к_координате = arrobj(min1n) End Function Sub max_min_indexarray(mass, max1n, max2n, min1n, min2n) 'сортировка и удаление повторов в массиве max1n = 0 max2n = 0 min1n = 0 min2n = 0 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) > max1 Then max1 = CDbl(mass(i)) Next i max2 = 0 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) = max1 Then max1n = i Exit For End If Next i For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) > max2 And i <> max1n Then max2n = i max2 = mass(i) End If Next i ''''''''''''''''''''''''''''''''''''''''''''''''''обратная min1 = max1 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) < min1 Then min1 = CDbl(mass(i)) Next i min2 = max1 For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) = min1 Then min1n = i Exit For End If Next i For i = LBound(mass) To UBound(mass) If CDbl(mass(i)) < CDbl(min2) And i <> min1n Then min2n = i min2 = CDbl(mass(i)) End If Next i End Sub  
    • vad0000
      В первую очередь выкладывайте машинные параметры станка. 
    • Nevskiyalexxx
      Так то лучше вместо planarа несколько Z-levelов создать - он и припуск будет видеть и деталь гарантированно не зарежет.
    • lexincton
      Поменял вывод инструмента в событии начала траектории Прописать статично эту строку перед инструментом