Перейти к публикации

Рекомендованные сообщения

в настройках пользователя солида: "Параметры->общие" есть параметр "ввести значение размера". Надо его выключать при расстановке размеров,  после снова включать. Тогда окно не будет возникать.

Изменено пользователем maxfox
Ссылка на сообщение
Поделиться на других сайтах


10 часов назад, Greml сказал:

swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, False

Спасибки. Самое оно.

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

Добрый вечер. Подскажите пожалуста. Каким способом можно проверить принадлежность координаты 3D  на совпадение с кромкой ? Предистория такова. Сейчас нанёс  свой эскиз , и он из-за отключенных привязок к геометрии модели не определен.  Чтобы определить его базовые точки мне нужно их привязать к вершинам 1 тела  или кромкам 2 тела. С вершинами я уже решил а с кромками беда. Для получения взаимосвязи мне нужно выделить кромку EDGE на заданной грани. Грань понятно я знаю какая. А вот ее массив кромок на совпадение с точкой эскиза каким то образом проверить нужно. Очень не хочется извлекать параметры кривой а потом еще проверять математически эту кривую на пересечение.  Как это сделать проще?

 

   'код не сначала
                                       ' kk=0.000001 погрешность
                                      '  vPoint массив вершин тела1 грани1
                                        vSkPtArr = swSketch.GetSketchPoints2 ' массив точек эскиза
                                                  Dim npt(2)  As Double
                                                  
              For i = 0 To UBound(vSkPtArr) ' в цикле укрепим их на геометрии модели
                           Set swSkPt = vSkPtArr(i)
                                                       
                                 npt(0) = swSkPt.x 'точка в 2D
                                   npt(1) = swSkPt.y
                                    npt(2) = swSkPt.z
                                     Set swXform = swSketch.ModelToSketchTransform
                                       Set swXform = swXform.Inverse
                                         Set swMathUtil = swApp.GetMathUtility
                                            Set swMathPt = swMathUtil.CreatePoint((npt))
                                                            Set swMathPt = swMathPt.MultiplyTransform(swXform)
                                    
                                                            ptx3d = swMathPt.ArrayData(0) 'точка эскиза трансформирована из 2 D в 3D
                                                            pty3d = swMathPt.ArrayData(1)
                                                            ptz3d = swMathPt.ArrayData(2)
                                                            'выделяем точку эскиза
                                boolstatus = Part.Extension.SelectByID2("Point2", "SKETCHPOINT", swSkPt.x, swSkPt.y, swSkPt.z, False, 0, Nothing, 0)
                                                                
          'проверим на совпадение с вершинами торцевой детали1
            For j = 0 To UBound(vmass1)
                vPoint = Split(vmass1(j), "/")
            'если совпадает с точкой из массива вершин тела1 то
           If Abs(CDbl(vPoint(0)) - ptx3d * 1000) < kk And Abs(CDbl(vPoint(1)) - pty3d * 1000) < kk And Abs(CDbl(vPoint(2)) - ptz3d * 1000) < kk Then
             boolstatus = Part.Extension.SelectByID2("", "VERTEX", ptx3d, pty3d, ptz3d, True, 0, Nothing, 0)
                   Part.SketchAddConstraints "sgCOINCIDENT" ' сопряжение
                            GoTo step1
                    End If
             Next j
                                                                
        ''       тот случай когда при не совпадении с первым телом и его вершинами 100% имеется сопряжение точки эскиза с кромкой 2го тела
                 'проверим на совпадение с кромками детали 2 грани2
                                                               
                      swface2.Select4 False, swSelData
                       Set faceObj = Part.SelectionManager.GetSelectedObject5(1)
                          edgeCount = faceObj.GetEdgeCount
                             edgeList = faceObj.GetEdges
                               Set swCurve = edgeObj.GetCurve
                                ' вот тут оочень не хочется извлекать параметры кривой
                                     Stop
                                                  
step1:
        Next i

 

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

проверить принадлежность координаты 3D  на совпадение с кромкой

:wallbash: вы специально слова из гугла подбираете? "Принадлежность на совпадение"

8 часов назад, Sla_68 сказал:

и он из-за отключенных привязок к геометрии модели не определен

вы сами создали такую ситуацию, а теперь её обходите)) Могли бы просто считать Relations для точки и увидеть что она Coincidence с прямой.

8 часов назад, Sla_68 сказал:

Очень не хочется извлекать параметры кривой а потом еще проверять математически эту кривую на пересечение

Жесть. Очень прям.

Начало: A(x1,y1,z1)

Конец: B(x2,y2,z2)

Искомая: p(x,y,z)

Цитата

(x - x1) / (x2 - x1) = (y - y1) / (y2 - y1) = (z - z1) / (z2 - z1)

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

Больше так не делайте!

 

 

-----------

Лан, теперь о насущном.

Так находим ближайшую точку к кривой http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icurve~getclosestpointon.html

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

8 часов назад, Sla_68 сказал:

100% имеется сопряжение точки эскиза

Нет у вас сопряжения. Вы их отключили. Не вводите себя же в заблуждение такими комментариями в коде.

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

--------------

Не, с таким подходом к делу, развитие текущего проекта малопонятная перспектива :sad:

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

--------------

Не, с таким подходом к делу, развитие текущего проекта малопонятная перспектива :sad:

Какого прокта?

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

Того, который делает @Sla_68  

С его исходными данными, и путями решений "проблем"

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

Того, который делает @Sla_68  

С его исходными данными, и путями решений "проблем"

Это все от моей необразованности. Мне немножко не хочется отвечать на ваши вопросы излишним флудом. Я уже почти все написал что хотел. Осталось определить эскиз.

12 часа назад, Sla_68 сказал:

boolstatus = Part.Extension.SelectByID2("", "VERTEX", ptx3d, pty3d, ptz3d, True, 0, Nothing, 0)

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

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

Так находим ближайшую точку к кривой http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icurve~getclosestpointon.html

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

Вот это очень круто мне помогло.

 

С вершинами и кромками геометрии тоже разобрался.

Не пойму что за косяк с сопряжением точки центра отрезка1 и  отрезка2 (имеющего координаты стартовой точки совпадающей со центром первого отрезка)

 

''''' код немного из контекста но смысл можно понять
Dim vSkSegArr As Variant
            Dim vSkSeg As Variant
            Dim swStartPt               As SldWorks.SketchPoint
            Dim swEndPt                 As SldWorks.SketchPoint
                vSkSegArr = swSketch.GetSketchSegments
                Part.ClearSelection2 True
           For Each vSkSeg In vSkSegArr
              If vSkSeg.GetType = 0 Then
                  Set swStartPt = vSkSeg.GetStartPoint2
                  Set swEndPt = vSkSeg.GetEndPoint2
                    spx = swStartPt.x 'точка начало
                    spy = swStartPt.y
                    epx = swEndPt.x 'точка конец
                    epy = swEndPt.y
                    cx = (spx + epx) / 2 'координаты центральной точки
                    cy = (spy + epy) / 2
                    ' x1 y1 - координаты стартовой точки отрезка2    
					If (Abs(cx - x1) < 0.00001 And Abs(cy - y1) < 0.00001) Then
                                 vSkSeg.Select4 False, swSelData
                                         Part.SelectMidpoint 'выделить сред точку
                        ElseIf (Abs(spx - x1) < 0.00001 And Abs(spy - y1) < 0.00001) Then
                         swStartPt.Select4 True, swSelData
                        End If
                    
               End If
            Next
           Part.SketchAddConstraints "sgCOINCIDENT"
            Stop

 

example.jpg

Дело в том что код работает если разнести немного отрезки и изменить условия elseIF  на иные какие либо (для проверки конечно). Тут такое чувство. что точкой как бы надо подвигать ...( Если б я делал это без макросов,  вручную - то я бы отодвинул и опять задвинул на место эту точку. ) Как создать подобное сопряжение?

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

Part.SelectMidpoint

Остановите тут выполнение и посмотрите - а точно точка то выделилась?

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

похоже что нет, вставил после 2 отрезка value = swSelMgr.GetSelectedObjectCount , value=1, тк внешне не понятно.  А почему тогда в разнесенном виде выделение происходит?

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

@Sla_68  прочитайте ремарку к методу http://help.solidworks.com/2015/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldoc2~selectmidpoint.html

11 минуту назад, Sla_68 сказал:

А почему тогда в разнесенном виде выделение происходит?

не знаю. Мучайте SelectData интерфейс.

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

@Sla_68 попробуйте скрыть всё кроме нужного тела, перед выделением.

Изменено пользователем maxfox
Ссылка на сообщение
Поделиться на других сайтах
52 минуты назад, streamdown сказал:

Судя по всему этот метод при таких условиях работать не будет.

1 минуту назад, maxfox сказал:

попробуйте скрыть всё кроме нужного тела, перед выделением.

мне кажется тут тела ни причем. Это же объекты эскиза.

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

Добрый вечер.

Подскажите пожалуйста. Не могу реализовать выделение замкнутого контура в эскизе. После включения

 Part.SelectionManager.EnableContourSelection = True

надо жмакнуть как то внутри контура.

Я пробовал через selectbyID2

boolstatus = Part.Extension.SelectByID2("Присадка_торец" & ind, "SKETCHREGION", ptx3d, pty3d, ptz3d, True, 4, Nothing, 0)

Но выделения области не происходит.

Как это сделать правильно?

(Вообще это нужно для того чтобы создать 2 выреза в разные стороны использовав при этом один эскиз.)

 

 

 

выделение_контура.jpg

Изменено пользователем Sla_68
Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, Sla_68 сказал:

Но выделения области не происходит.

Как это сделать правильно?

Добрый вечер. Немного подумав решил проблему по другому. Просто создал второй эскиз. Преобразованием объектов перенес те окружности какие мне были необходимы.

 

Я конечно еще тот почемучка.. Может надоел уже всех глупыми вопросами. Но их почему-то все больше и больше. По принципу " чем больше я знаю, тем больше понимаю что я ничего не знаю.. :wallbash:

На данный момент возник вопрос по силуэтным кромкам. Т.е есть плоскость, а на ней имеется эскиз. Необходимо перебрать силуэтные кромки вырезов, которые были созданы на той же детали. Как это сделать? Я по чесноку искал но нашел вот это http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iface2~igetsilhoutteedges.html

Примеров нет на басике поэтому не пойму как применять

силуетные.jpg

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

Очевидно, что найденный метод работает только на си- ком языке. Так написано в ремарке. Что странно, любопытно и обидно, одновременно. Потому что синтакис метода приведен для разных языков. Однако метод подсказывает направление. Можно попытаться спроецировать фейс на плоскость.но не знаю, есть ли подобные методы..

Изменено пользователем maxfox
Ссылка на сообщение
Поделиться на других сайтах
В 14.09.2017 в 08:52, maxfox сказал:

Очевидно, что найденный метод работает только на си- ком языке. Так написано в ремарке. Что странно, любопытно и обидно, одновременно. Потому что синтакис метода приведен для разных языков. Однако метод подсказывает направление. Можно попытаться спроецировать фейс на плоскость.но не знаю, есть ли подобные методы..

жаль если оно так как вы говорите...

 

Хотел спросить вот что. Обратил внимание на то что макрорекордер не пишет код полностью . А только отдельные фрагменты. Может ли это связано как либо с локализацией на русском языке? Дело в том что при работе с кодом, при использовании "меню поиска". невозможно использовать кириллицу. Хотя в экселе возможно.

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

Хотел спросить вот что. Обратил внимание на то что макрорекордер не пишет код полностью . А только отдельные фрагменты.

Можно попробовать запись через Пуск-...-Solidworks####-Инструменты Solidworks - Solidworks RX и там Запись ошибки.

1 час назад, Sla_68 сказал:

Может ли это связано как либо с локализацией на русском языке?

Всякое бывает, но наверно врятли.

 

1 час назад, Sla_68 сказал:

Дело в том что при работе с кодом, при использовании "меню поиска". невозможно использовать кириллицу.

Вероятно связанно с тем, что VBA не локализовали на русский и/или взяли корявый исходник без доработки, т.к. API то только на Английском, вот и не думали о совместимости с другими языками.

У Excel аудитория побольше вот и подумали о русском... Бывает локализация, что все функции и процедуры на русский переведены.

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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




×
×
  • Создать...