Jump to content

Recommended Posts

alexey2121

Здравствуйте, хотел бы узнать возможно ли выбрать кромки в модели без использования метода SelectByRay  для последующего их скругления? Модель создается через макрос, с заданными пользователем размерами и выбирать вручную их не очень хороший вариант. Попробовал использовать Persistent ID для каждой кромки, но на сколько я понял генерируется он для каждой созданной вновь модели свой. И при генерации другой модели (даже с теме же размерами) уже получить доступ по PerID уже нельзя. Есть ли какие-то еще способы или переписывать макрос для работы с конкретно созданным файлом? P.S. Как вариант в  эскизе можно сделать скругление для  кромок во впадине, с верхними хотелось бы по другому.

Снимок экрана 2023-02-27 211344.png

Link to post
Share on other sites


alexey2121

Отвечу сам на этот вопрос, может кому пригодится. Нужно с помощью GetBodies2 получить тело созданное в нашей модели. После использовать GetEdges и получить массив кромок нашего тела. Затем можно обращаться к нашим кромкам как к элементам массива (в моем случае их всего 11, найти нужный номер  элемента в массиве не составило проблем) или же  в цикле присвоить кромкам Tracking ID и уже используя его также выбрать наши кромки используя Select4.

  • Нравится 1
Link to post
Share on other sites
streamdown
01.03.2023 в 20:55, alexey2121 сказал:

не составило проблем

Так в этом самая соль)) Я б например искал бы по длине, кто-то искал бы по площадям прилегаемых, кто-то по градусам между прилегающими плоскостями. У вас как надо было?

Link to post
Share on other sites
ЮрЮрыч

Здравствуйте, очередной ступор. Как выделить грань. SelectByID2(swFace, "FACE", 0,0,0,true,0,nothing,swSelectOptionDefault)дает ошибку не поддерживает свойство или метод. 

Link to post
Share on other sites
Kelny
1 час назад, ЮрЮрыч сказал:

Как выделить грань.

https://help.solidworks.com/SearchEx.aspx?query=select face&version=2010&lang=english,enu&prod=api

 

1 час назад, ЮрЮрыч сказал:

дает ошибку не поддерживает свойство или метод. 

В примерах обычно фигурирует такая конструкция (первый параметр пустой):

Цитата

В вашем случае вероятно ошибка как раз таки в:

Цитата

SelectByID2(swFace, "FACE"

swFace - вероятно должно быть именем элемента, если таковое имя присвоено этому элементу:

Цитата

 

Edited by Kelny
Link to post
Share on other sites
alexey2121
04.03.2023 в 11:49, streamdown сказал:

Так в этом самая соль)) Я б например искал бы по длине, кто-то искал бы по площадям прилегаемых, кто-то по градусам между прилегающими плоскостями. У вас как надо было?

К сожалению условие выбора только одно. Кромки образованы пересечением поверхностей после выреза под углом и боковой пов-ти усеченного конуса. Модель каждый раз строится с 0 в зависимости от введенных пользователем данных (высота ус. конуса, размеры выреза и др. параметры определяется расчетом/пользователем). Возможность искать в массиве конкретные кромки по геометрическому условию (наименьшая/наибольшая  длина и т.п.)  для данной задачи к сожалению не подходит. 

Link to post
Share on other sites
alexey2121
7 часов назад, ЮрЮрыч сказал:

Здравствуйте, очередной ступор. Как выделить грань. SelectByID2(swFace, "FACE", 0,0,0,true,0,nothing,swSelectOptionDefault)дает ошибку не поддерживает свойство или метод. 

После "Face" вместо 0,0,0 должна быть координата точки принадлежащая этой поверхности, только тогда будет корректно работать (при условии пустых кавычек вместо имени). Если выбрать поверхность и нажать ПКМ-Грань-Свойства грани можно задать ей имя. Например myFace_cccp3d. Если снова выбрать грань и нажать ПКМ, то в меню появится имя.

Если попробовать использовать это имя с SelectByID2, работать будет, но результат работы...Ну такой себе - у меня выбирает не то, что надо. Вот вариант с выбором используя имя.


 

Скрытый текст

 

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSelData As SldWorks.SelectData
Dim swFace As SldWorks.Face2


Sub main()
    Dim faceName As String
    faceName = "myFace_cccp3d"
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set swSelMgr = Part.SelectionManager
    Set swFace = Part.GetEntityByName(faceName, swSelFACES)
    swFace.Select4 False, swSelData
    
End Sub

 

p.s. Имена у поверхностей/кромок должны быть уникальными.

Снимок экрана 2023-03-06 183157.png

Снимок экрана 2023-03-06 190014.png

Link to post
Share on other sites
ЮрЮрыч

Да, через имя выделить грань, это то еще занятие. Тогда как можно узнать координаты точки на грани. Может цт какой-нибудь. 

Link to post
Share on other sites
brigval
3 часа назад, ЮрЮрыч сказал:

Да, через имя выделить грань, это то еще занятие. Тогда как можно узнать координаты точки на грани. Может цт какой-нибудь. 

Если построение идет программно, думаю, можно программно переименовывать элементы, а потом по известному имени (или там, по префиксу-суффиксу) искать.

Link to post
Share on other sites
v-david

А не слишком это все геморройно? Не проще строить через таблицы параметров или текстовые уравнения ?

Link to post
Share on other sites
ЮрЮрыч

Нет построение не програмное. Я делаю макрос для экспорта в dxf пластин solid не sheet. Пластины могут быть построены как угодно. Думал найти грань с макс площадью, выделить и exportDwg2. Метод getEntityName дает только пробелы. Но даже именованую вручную грань selectByID2 и то не выделяет. 

Link to post
Share on other sites
Shvg
2 часа назад, ЮрЮрыч сказал:

Нет построение не програмное. Я делаю макрос для экспорта в dxf пластин solid не sheet. Пластины могут быть построены как угодно. Думал найти грань с макс площадью, выделить и exportDwg2. Метод getEntityName дает только пробелы. Но даже именованую вручную грань selectByID2 и то не выделяет. 

Если вы нашли грань с максимальной площадью, то выделить программно ее можно через интерфейс IEntity.

Entity swEntity = swFace as Entity;
swEntity.Select4(false, swSelectData);

 

Предварительно создав объект SelectData

SelectionMgr swSelMgr = swModel.ISelectionManager;
SelectData swSelectData = swSelMgr.CreateSelectData();

 

Edited by Shvg
  • Нравится 2
Link to post
Share on other sites
ЮрЮрыч

Здравствуйте, спасибо, все работает. Как определить дату создания файла? FileDataTime не работает. 

Link to post
Share on other sites
Shvg
3 часа назад, ЮрЮрыч сказал:

Здравствуйте, спасибо, все работает. Как определить дату создания файла? FileDataTime не работает. 

Попробуйте SummaryInfo интерфейса IModelDoc2.

 
  • Нравится 1
Link to post
Share on other sites
  • 2 weeks later...
v-david

ЮрЮрыч! какие-то вопросы честно говоря недоделанные... Где повернуть, модель деталь или сборка... ну выражайтесь точнее пожалуйста

Link to post
Share on other sites
nicomed
4 часа назад, ЮрЮрыч сказал:

Добрый вечер. Как повернуть вид модели нормально к плоскости? 

ModelDoc2  метод ShowNamedView2 .. а там по мануалу можно посмотреть какой из видов нормальный ...

Link to post
Share on other sites
ЮрЮрыч
3 часа назад, v-david сказал:

ЮрЮрыч! какие-то вопросы честно говоря недоделанные... Где повернуть, модель деталь или сборка... ну выражайтесь точнее пожалуйста

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

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

ModelDoc2  метод ShowNamedView2 .. а там по мануалу можно посмотреть какой из видов нормальный ...

Это если есть вид именованый.

Link to post
Share on other sites
nicomed
5 часов назад, ЮрЮрыч сказал:

то если есть вид именованый

Вы текст в описании метода читали? Я, даже со своим школьным испанским понял,:

если вид именованный - пиши имя а в id вписывай -1 или 0 (не помню , а открывать хелп лень ).

если вид из стандарных - в первый параметр пустую строку, а во второй параметр  значение id вида, там есть ссылка на перечисление.

Edited by nicomed
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • Ветерок
      Он не вспомогательный. Это просто вид модели (основной). Не связанный ни с каким другим видом. Пусть даже это будет первый вставленный вид. Ориентация вида задана в модели. Я просто вставляю вид с заданной ориентацией. И хочу чтобы рядом с другим видем была стрелка с буквой. Пусть это будет нарисованная стрелка с буквой, но как получить изображение этой стрелки? Кроме рисование стрелки линиями.
    • Krusnik
      Есть "Вид модели" - это как раньше говорили основной вид. От него как правило ставятся все остальные виды. У него буквы нет. "Проекционный вид" - вид, который находится с другим видом в проекционной связи: снизу, сверху, слева, справа. Стрелка с буквой не ставится "3 стандартных вида" - это вид модели + вид сверху + вид слева на одной кнопке. Стрелки с буквами не ставятся. "Вспомогательный вид" - это как раз вид по стрелке. Стрелка и буква ставятся автоматически.   Но если у вас на листе мало места и вид слева нужно перенести на другой лист - то перенести не проблема, но стрелки то нет. Вот для таких ситуаций и придумана галочка "Стрелка" ("Arrow"). Ставите её, и у основного вида появляется стрелка, а над проекционным буква.   В остальных случаях удобнее пользоваться "Вспомогательным видом".  
    • BSV1
    • Savok
      Нельзя создать вспомогательный вид, если нет прямой кромки. Проекционный вид прекрасно создается
    • Fedor
      А виртуальные машины тоже будут облагаться и ПО на них считаться ?  Компиляторы и прочее фундаментальное ПО западное, так что и все производное будет таким :)   Лет 30-40 приучали к мировому ПО , а теперь за несколько лет все решили поменять ?  Далековато от реальности :)    Кто мзду то будет собирать ?  Менты c прокурорами как когда-то за винды директоров школ прихватывали ?  :)
    • Ветерок
      Так ведь ориентация нужного вида "кривая", никакой проекцией не получится. А для проекций и стрелки не нужны.
    • Savok
      На вставленном виде стрелок нет. Делаем проекцию с этого вида, на спроецированном виде уже есть возможность отобразить стрелку, ее можно подвигать, изначально она становится с противоположной стороны
    • BSV1
      Про процент не сказали, но распределять предполагают так:  
    • Ветерок
      Ага, заработало.   Про стрелки не понял. Если я вставил общий вид с ориентацией, сохраненной в модели, то у него нету стрелок.
    • Fedor
      А мздоимцам какой процент будет ?  :)  Интересно, сами то в такое верят ?  Что за вычислительная платформа ?   Вроде Mathematica что ли ?   https://ru.wikipedia.org/wiki/Mathematica      :)
×
×
  • Create New...