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

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

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

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

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


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

Ссылка на сообщение
Поделиться на других сайтах
01.03.2023 в 20:55, alexey2121 сказал:

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

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

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

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

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

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

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

 

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

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

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

Цитата

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

Цитата

SelectByID2(swFace, "FACE"

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

Цитата

 

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
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

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

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

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

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

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

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

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

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

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

Ссылка на сообщение
Поделиться на других сайтах
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();

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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