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

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

 

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

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

 

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

При наличии в сборке 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 пользователей

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




  • Сообщения

    • Cefius
      Добрый день! Интересует макрос сохраняющий тела из многотела в стп формат. У вас есть такой? Можете поделиться за вознаграждение?
    • Bellka
      станок был выкуплен и попал мне в руки, сейчас работает но тем кто его пытался ломать чинить точно спасибо не скажу
    • Девочка_конструктор
      Подскажите пожалуйста, как вы задаете тепловые трубки для расчета теплоотвода? Как отдельное тело (например, из меди), отдельно пористую среду и отдельно течение жидкости (в таком случае сложно задать конвекцию жидкости, тем более она у меня осуществляется без учета гравитации) / или как тепловую трубку? Тогда вопрос, как выбирать поверхности теплопоглощения и поверхности теплоотвода, если по сути это одни и те же поверхности, только в одном месте они поглощают тепло, в другом - отдают.  Считаю радиоэлектронный модуль, у меня микропроцессоры мощностью более 60 Вт нагреваются до 150 градусов. Хочу оценить влияние тепловой трубки, помогла бы она в этой ситуации отвести тепло должным образом или нет. Но гравитацию использовать не могу, конструкция не позволяет. Следовательно, нужно как-то разумно задать пористую среду для тепловой трубки, чтобы конденсат жидкости возвращался в зону нагрева. Помогите 
    • Ветерок
      Этот вариант хорош ещё тем, что сечение всегда будет ориентировано по нормали к цилиндру - не будет никаких перекосов на стенках. Но есть подозрение, что на цилиндре эта схема будет сложнее, чем на плоскости, поскольку края каждого "следующего" сечения наезжают на "предыдущее" (за счет изгиба стенки цилиндра). И точки касания двух стенок расположены не на диаметре шара, а на некой хорде, не проходящей через центр.
    • andrei4ik
      ну я же не новую деталь создаю... но щас гляну конечно но хз нет не хранит.... ошибка никуда и не ушла, и кажу более... если я добавляю какую сборку в главную сборку тот все детали в добавленной сборке становятся сокращенными
    • maxx2000
      можно и по линии сделать фрезой диаметром меньше чем паз
    • maxx2000
      зачем вообще считать то что априори не требует расчёта? Там чтобы что-то согнуть веса будут к тонне приближаться
    • persona1980_1
      Можно еще воспользоваться пользовательским анализом для создания дополнительных графиков и их уже учитывать при протягивании сечения как у вас на картинке (не по нормали к траектории). Там высота сечения будет меняться в зависимости от этого дополнительного графика.
    • maxx2000
      @filsan цилиндрическая. Я бы отдал модель, да Крео 11. Цилиндр, его пересекает поверхность, поверхность утолщаю с вычитанием материала. получаются два разорванных фрагмента, затем через всё вытянул цилиндр диаметром чуть меньше начального. Можно заморочиться построить поверхность с диркой, повлияет только на число фичеров в дереве
    • Kelny
      Рекомендовал бы удалить ветки реестра с настройками всех версий (возможно программа при запуске пытается стянуть настройки с другой версии в дополнении к основной), а потом поставить программу с нуля. Так же после настройки стоит сохранить настройки программы через Мастер настроек Solidworks, что бы при сбое можно было восстановить все ваши настройки, а не настраивать всё с нуля (это долго и нудно).   Это есть, но всё же первая настройка настройка, так понял, работает и надо просто добавить все кнопки сразу. А если вызвать настройку повторно, то все пользовательские кнопки остаются, но пусты, в них нет данных для запуска и они не отображаются на работающей панельки.   Как вариант загнать нужные кнопки во всплывающую панельку вызываемую клавишей "S" на клавиатуре.
×
×
  • Создать...