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

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

 

как програмно
 

Точно программно? Может проще ручками выбрать детали?

 

 Доброго времени суток . Я хочу добавить кнопку "выбрать все".

При наличии в сборке 100 элементов пользователь ручку сломает  :biggrin:

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


Салют! Помогите, я пытаюсь изменить толщину Листового металла, но у меня не выходит! При чем я могу изменить другие параметры, но только не толщину...(

я использовал два примера:
 

получаю толщину

http://help.solidworks.com/2013/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ISheetMetalFeatureData~Thickness.html

 

на втором примере могу изменить все параметры кроме толщины
http://help.solidworks.com/2013/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IFeature~ModifyDefinition.html

 

 

 

 

post-41325-0-27574400-1415883360_thumb.jpg

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

я пытаюсь изменить толщину Листового металла

 

Тоже не получилось. А вот на базовой кромке сработало

 

SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
Feature myType = (Feature)swSelMgr.GetSelectedObject6(1, -1);
BaseFlangeFeatureData swBaseFlange = default(BaseFlangeFeatureData);
swBaseFlange = (BaseFlangeFeatureData)myType.GetDefinition();
Boolean ooo = swBaseFlange.AccessSelections(swModel, null);
swBaseFlange.OverrideThickness = true;
swBaseFlange.Thickness= 0.8/1000D;
ooo = myType.ModifyDefinition(swBaseFlange, swModel, null);
Ссылка на сообщение
Поделиться на других сайтах

@@maikl_lug, можно посмотреть. SW точно 2011?

Я работаю в Solid Works 2015 . А в чем разница? Библиотеки не настолько поменялись и в примере все функции с 2011 ( если не путаю

Помоги пожалуйста. Как выделить в  список обьекты  например"вытянутая-бобышка1"  во всех деталях и использовать их в selectbox и на оборот

Я Английский не очень понимаю и справка туго дается И много там не пишут ( засранцы ).

Буду признателен    В Любой помощи   .Кроме вопросов а нахрен оно тебе надо

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

Доброго времени суток!

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

Спасибо.

 

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SldWorks swApp;
        IModelDoc2 swModel;

        PartDoc swPart;
        DrawingDoc swDrawing;
        AssemblyDoc swAssembly;
        ModelView myModelView;

        private void button1_Click(object sender, EventArgs e)
        {

            Process[] processes = Process.GetProcessesByName("SLDWORKS");

            foreach (Process process in processes)
            {
                process.CloseMainWindow();
                process.Kill();

            }

            Object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("SLDWORKS.Application"));
            swApp = (SldWorks)processSW;
            swApp.Visible = true;

            
            bool boolstatus = false;
            int longstatus = 0;
            int longwarnings = 0;


            //Создаем новый документ на основе шаблона указанного в пути, после чего делаем активным (Creating a new document after that making it active)
            swModel = ((IModelDoc2)(swApp.NewDocument("C:\\Solidworks Library\\templates\\Сборка.asmdot", 0, 0, 0)));
            swApp.ActivateDoc2("Assem1", false, longstatus);

                 swModel = ((IModelDoc2)(swApp.ActivateDoc2("Assem1", false, longstatus)));


            //add component to assembly
            swApp.OpenDoc6("C:\\Solidworks Library\\My Library\\А100.30.01.001  Фланец.sldprt", 1, 2, "", 0, 0);
            swAssembly = ((AssemblyDoc)(swModel));
            Component2 comp = default(Component2);
            comp = swAssembly.AddComponent4("C:\\Solidworks Library\\My Library\\А100.30.01.001  Фланец.sldprt", "Default", 0, 0, 0);
            if (comp == null)
                System.Windows.Forms.MessageBox.Show("AddComponent() is false");
            
            
            swApp.CloseDoc("C:\\Solidworks Library\\My Library\\А100.30.01.001  Фланец.sldprt");

        
            comp = swAssembly.GetComponentByName("А100.30.01.001  Фланец");
            if (comp == null)
                System.Windows.Forms.MessageBox.Show("GetComponentByName() is false");
                 
            if (comp != null)
                  {
                       swPart = comp.GetModelDoc2() as PartDoc;

                       if (swPart == null)
                           System.Windows.Forms.MessageBox.Show("GetModelDoc2() is false");
                     
                      if (swPart != null)
                      {
                          IEntity face = (IEntity)swPart.GetEntityByName("Number1", (int)swSelectType_e.swSelFACES);
                          if (face != null)
                          {
                              face = comp.GetCorresponding(face) as IEntity;
                              face.Select4(false, null);
                          }
                      }
                  }
            
Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток!

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

Спасибо.

Похоже, что имя неправильное. Нужен еще и номер компонента. Что то типа этого:

comp = swAssembly.GetComponentByName("А100.30.01.001 Фланец-1");

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

 

Доброго времени суток!

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

Спасибо.

Похоже, что имя неправильное. Нужен еще и номер компонента. Что то типа этого:

comp = swAssembly.GetComponentByName("А100.30.01.001 Фланец-1");

 

 

Изменил на имя А100.30.01.001  Фланец<1> взятое из свойств конкретной детали из сборки, результат тот же...

Возможно нужно еще каким то боком имя конфигурации подвязывать?

post-29842-0-16374800-1415976408_thumb.jpg

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

Изменил на имя А100.30.01.001  Фланец<1> взятое из свойств конкретной детали из сборки, результат тот же...

Возможно нужно еще каким то боком имя конфигурации подвязывать?

 

Угловые скобки (<>) не нужны. К Component Name добавляется дефис (-) и Instance Id.

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

@@Almo,

 

 

Похоже, что имя неправильное.

 

посмотрите код в примерах, с getselectedobject.

Выделите деталь, далее getselectedobject, приравняйте его к Component2, получИте имя Name2. Таким образом вы поймёте, как оно там всё именуется.

Дальше, если вы собираетесь ещё и получить ссылку на саму поверхность, то нужно ещё достучаться до детали посредством GetCorresponding.   Не заметил, что это уже сделано))

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

Ну, собственно, так и есть:

SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
Component2 myType = (Component2)swSelMgr.GetSelectedObject6(1, -1);
String tempName = myType.Name2;
AssemblyDoc swAssembly = (AssemblyDoc)swModel;
Component2 comp = swAssembly.GetComponentByName(tempName);
Ссылка на сообщение
Поделиться на других сайтах

Вот один хитро...ый код. 

            String assyName = swModel.GetTitle().Remove(swModel.GetTitle().LastIndexOf(".")); //При условии что в винде включена видимость расширения
            AssemblyDoc swAssembly = (AssemblyDoc)swModel;
            for (int i = 0; i < 100; i++)
            {
                Boolean bRet = swModel.Extension.SelectByID2("Test" + "-" + i.ToString() + "@" + assyName, "COMPONENT", 0, 0, 0, false, 0, null, 0);
                if (bRet)
                {
                    break;
                }
            }
            SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
            Component2 myOldComp = (Component2)swSelMgr.GetSelectedObject6(1, -1);

Но это при условии уникального компонента. Если вам нужна какая-то конкретная поверхность, то правильный путь это траверсить сборку с компонентами и искать её.

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

streamdown

 

посмотрите код в примерах, с getselectedobject.
 

Ну, собственно, так и есть:

SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
Component2 myType = (Component2)swSelMgr.Component2 myType = (Component2)swSelMgr.GetSelectedObject6(1, -1);(1, -1);
String tempName = myType.Name2;
AssemblyDoc swAssembly = (AssemblyDoc)swModel;
Component2 comp = swAssembly.GetComponentByName(tempName);

 

Спасибо за предложение, но теперь метод GetSelectedObject6 на выходе дает null, не подскажете почему? И теперь получается нужно как-то получить порядковый номер компонента чтобы получить его имя чтобы получить сам компонент в целом, какой-то замкнутый круг...

 

 

PS в принципе задача решилась написанием номера компонента через "-", но все равно интересно как сделать вами-описанным способом с GetSelectedObject6...

comp = swAssembly.GetComponentByName("А100.30.01.001  Фланец-1")

По поводу хитрого кода, не могли бы вы объяснить эту строку:

String assyName = swModel.GetTitle().Remove(swModel.GetTitle().LastIndexOf("."))

Спасибо.

 

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

Спасибо за предложение,

давай по порядку:

String assyName = swModel.GetTitle().Remove(swModel.GetTitle().LastIndexOf("."));

 

Удаляем расширение файла, если в винде включён триггер (показывать расширения файлов)

for (int i = 0; i < 100; i++)
            {
                Boolean bRet = swModel.Extension.SelectByID2("Test" + "-" + i.ToString() + "@" + assyName, "COMPONENT", 0, 0, 0, false, 0, null, 0);
                if (bRet)
                {
                    break;
                }
            }

Перебираем возможные числа, которые могу содержаться в наименовании компонента в сборке. Где имя компонента "Test", assyName - имя сборки. Если компонент с таким именем существует,  то выделяем его, прерываем цикл и продолжаем код.

Component2 myOldComp = (Component2)swSelMgr.GetSelectedObject6(1, -1);

Так как ранее мы выделили компонент, то и myOldComp не будет null.

не могли бы вы объяснить эту строку:
 

Не, можно же ещё хитрее

String modelName = swModel.GetTitle().ToLower().Contains(".sldasm")
                ? swModel.GetTitle().Remove(swModel.GetTitle().LastIndexOf("."))
                : swModel.GetTitle();

Теперь точно всегда сработает. Пояснение: если в имени модели в окне содержится ".sldasm", то удаляем эту часть, если не содержится, то возвращаем имя модели. Где имя модели - это имя, которое отображается на самом верху окна solidworks.

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

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

Делаю макрос деталь должна быть приблезительно вот такой  ( http://s010.radikal.ru/i311/1411/24/503b3e9131d3.png ), записываю все нормально, но вот когда запускаю макрос на выполнение то получается вот такое вот ( http://s020.radikal.ru/i708/1411/10/04f3827c6445.png ), я не могу понять почему так получается? почему когда я указываю плоскость для эскиза Плоскость 1, а он выбирает перпендикулярную плоскость и рисует эскиз там. Как с этим боротся ?

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

streamdown, спасибо большое за разъяснение, все понятно и во всем написанном разобрался, никак не доходили руки отписаться... Копаем дальше...-)
Вот у меня возник вопрос по поводу установки SolidWorks API SDK.msi. Я его поставил, но в VS2012 шаблон API не появился, более того, прошарив весь диск С на наличие архива swcsharpaddin.zip и непосредственно самого шаблона я понял что их попросту нету...
Попробовал способом описанным здесь https://forum.solidworks.com/thread/43558 извлечь выше-упомянутый архив из msi, но не понял что делать с этим окном (см., рис.)... Мб что подскажете?
 

post-29842-0-02916200-1416916451.jpgpost-29842-0-55662900-1416916458.jpg


 to GoOFee
возможно это поможет https://solidworks.jiveon.com/thread/85884 - но не уверен, пускай спецы еще скажут свое слово...

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

Как с этим боротся ?

 

 

Указывать плоскость явно.

Вот как пример. Макрос записал 

 

На будущее, если у вас не получается создать ничего  :smile:  то лучше просто ставьте задачу. Может кто и возьмётся.

Если же у вас не получается что-то, показывайте кусок кода который не работает.

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

 

 

Мб что подскажете?

 

ну а почему бы и не подсказать))) http://www.streamdivision.com/ustanovka-shablona-addina/

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

 

Мб что подскажете?

 

ну а почему бы и не подсказать))) http://www.streamdivision.com/ustanovka-shablona-addina/

 

 

Спасибо все работает!!!

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

 

Как с этим боротся ?

 

 

Указывать плоскость явно.

Вот как пример. Макрос записал 

attachicon.gifMacro1.zip

 

На будущее, если у вас не получается создать ничего  :smile:  то лучше просто ставьте задачу. Может кто и возьмётся.

Если же у вас не получается что-то, показывайте кусок кода который не работает.

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

 

 

Мб что подскажете?

 

ну а почему бы и не подсказать))) http://www.streamdivision.com/ustanovka-shablona-addina/

 

Спасибо, хотя сам разобрался)) но теперь вылезла другая проблема,

необходимо задать радиус окружности 9мм, и при исполнении макроса в этой вот строке myDimension.SystemValue = 0.009;

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

вот 

http://s017.radikal.ru/i426/1411/47/cb4dde24b3e7.png

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

Хотите так поработать)) ладушки "выкладываю" пояснения

Переменная https://yadi.sk/i/Lq229GVzcx9kA пустая, смотрите почему у вас параметр для переменной

https://yadi.sk/i/Lq229GVzcx9kA не найден.

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

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

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

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

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

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

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

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

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

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

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




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