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

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

@@Almo,

1) Зачем выносить в отдельный поток?

2) Вы точно знаете зачем в вашем коде нужно применять дополнительные потоки?

3) Вы точно умеете обращаться с потоками? Представьте что станет с вашим "swApp", когда поток завершится.

:smile:  :smile:  :smile:

 

Как только вы решите вышеназванные вопросы для себя, вы сразу же найдёте решение.

Если же вас всё терзает мысль с потоками, то ищите InvokeRequired. Если же вы увязли в мыслях о потоках настолько глубоко, что хотите их синхронизировать, то можно QueueUserWorkItem.

Ну и если совсем просто, с вашим backgroundWorker, то возвращайте значение в конце выполнения (RunWorkerCompleted):

using System;
using System.Threading;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text;

namespace BGWorker
{
class Program
{
static bool done = false;

static void Main(string[] args)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(bg_DoWork);
bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
bg.RunWorkerAsync();

while (!done)
{
Console.WriteLine("Waiting in Main, tid " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100);
}
}

static void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Console.WriteLine("Completed, tid " + Thread.CurrentThread.ManagedThreadId);
done = true;
}

static void bg_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("Work Line: " + i + ", tid " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(500);
}
}
}
}
Ссылка на сообщение
Поделиться на других сайтах


streamdown

Спасибо за ответ но вы меня еще больше запутали))))

С вашим примером все понятно: выполняется bg_DoWork в цикле с задержкой 500нсек а между этим выполняется основной поток с задержкой 100нсек, когда bg_DoWork закончен выполняется bg_RunWorkerCompleted и финиш.

Но как мне применить это в моем случае до меня пока что не дошло....)))

Ладно буду думать и разбираться дальше.

 

ЗЫ еще мне не понятна ошибка которая выскакивает только тогда, когда запускаешь форму без режима отладки, в месте где я открываю деталь  IModelDoc2 swModelFlange = (IModelDoc2)swApp.OpenDoc6(asd, 1, 2, "", 0, 0); выскакивает ексепшн : COMExeption was unhandled by user cod (Ошибка на сервере. (Исключение из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))). Но когда ставишь флажок выше места исключения и прогоняешь код по шагам то все работает нормально и никаких ошибок нету... Что это за беда такая?

 

Спасибо.

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

@@Almo, объясните цель создания BGWorker?

 

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

 

выскакивает ексепшн : COMExeption

 

Читаем выше

 

Представьте что станет с вашим "swApp", когда поток завершится.

или приостановится ))) или вообще параллельно пойдёт)))

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

Подскажите, какими операторами возможно запрограммировать перемещения компонентов сборки?

Поиском по форуму подобного не нашел.
Проектирую манипулятор, хотелось бы вывести управление моделью на кнопки,

для начала кнопки на форме, в идеале - на W A S D (или курсор). Возможно ли такое?

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

как сделать чтобы ход был пошаговым?

При нажатии на кнопку при галочке полный ход перемещение должно быть полным, без галочки - только на определенный шаг.

При повторном нажатии - перемещение еще на один шаг.

Кубики.zip

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

Здравствуйте. "Оператор" SetTransformAndSolve, если я правильно понял Ваш вопрос.

Пример перемещения компонента в сборке, написанный на VBA http://help.solidworks.com/2015/english/api/sldworksapi/use_presentation_transforms_to_move_component_example_vb.htm

Если делать так как в идеале, с применением кнопок W A S D , думаю лучше будет делать программу на С#. С чтением клавиш по крайней мере будет меньше проблем. При написании прогаммы на c# названия "операторов" почти не отличаются от названий в vba.

Внизу пример, с ссылки что я давал, переведенный с  vba на c#/

Солиде открываете сборку, выбираете компонент, далее запускаете программу.

SldWorks sw = new SldWorks(); // связываемся с солидом
            ModelDoc2 sw_md = sw.ActiveDoc; // интерфейс - ModelDoc2 - здесь основные функции
            AssemblyDoc sw_assem = sw.ActiveDoc; // интерфейс - сборка, равная текущену активному документу, если текущий документ не сборка, будет плохо
            Component2 sw_comp; // интерфейс -  компонент сборки
            MathTransform swMathXform; // интерфейс -  "матрица трансформирования"
            MathUtility swMathUtil; // интерфейс -  "способы транстформирования"
            swMathUtil = sw.GetMathUtility();
            SelectionMgr swSelMgr; // интерфейс - менеджер выбранных объектов
            swSelMgr = sw_md.SelectionManager; // уже что то более конкретное
            sw_comp = swSelMgr.GetSelectedObjectsComponent(1); // а именно среди всех выбранных объектов, первый объект

            double[] arr = new double[] {0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }; // тут мы задаем новый массив
            var vXform = arr; // неопределенная переменная, которая равна массиву,
            for (int i = 1; i < 50; i++) // цикл
            {
                double kk = 0.001;
                int n = 10;
                arr[n] = arr[n] + kk; // элемент отвественный за Z координату, 9 - элемент за Х координату и т.д.

                vXform = arr; // неопределенная переменная, которая равна массиву,

                swMathXform = swMathUtil.CreateTransform((vXform)); // тут создаем трансформацию
                sw_comp.SetTransformAndSolve(swMathXform); // тут применяем трансформацию
                sw_md.GraphicsRedraw2(); // тут перерисовываем изображение, что бы мы видили, что что-то делается
                System.Threading.Thread.Sleep(100); // тут задержка между итерациями цикла, чтобы мы успевали что-то увидеть
            }
            MessageBox.Show("End"); // Что бы знать что, ждать больше нечего
Ссылка на сообщение
Поделиться на других сайтах
перемещения компонентов сборки

 

Матрицей поворотов

http://help.solidworks.com/2012/English/api/sldworksapi/rotate_assembly_component_on_axis_example_vb.htm

http://help.solidworks.com/2012/English/api/sldworksapi/align_assembly_component_to_assembly_origin_and_planes_example_vb.htm

 

 

var vXform = arr; // неопределенная переменная, которая равна массиву,

 

это не обязательно, можно сразу массив подставлять.

Раз уж на то пошло, то если метод требует на входе Object, то и создавайте Object. Это базовый класс

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

Знаю. На скорую руку так получилось. Так как alek77 написал что в апи практически ноль, вспомнил себя, решил пример переписать на c#, для обучения думаю пойдет.

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

@@Almo, объясните цель создания BGWorker?

 

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

 

выскакивает ексепшн : COMExeption

 

Читаем выше

 

Представьте что станет с вашим "swApp", когда поток завершится.

или приостановится ))) или вообще параллельно пойдёт)))

 

Да вы правы, я переосмыслил свой взгляд на потоки в моем приложении. Но даже при работе в одном потоке у меня выскакивает ексепшн (см., рис), но если поставить маркер при отладке и делать все "пошагово", то никаких эксепшенов нету. Не подскажете в чем проблема?

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

 

post-29842-0-75078800-1422439244_thumb.jpg

 

Спасибо.

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

Если Windows 7-8, попробуйте отключить UAC. Ну и, действительно

...
Object processSW...
....
Thread.Sleep(1000)

попробуйте. Не после каждого метода, а при загруженной работе. Например, после создания объекта SW.

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

Если Windows 7-8, попробуйте отключить UAC. Ну и, действительно

...
Object processSW...
....
Thread.Sleep(1000)

попробуйте. Не после каждого метода, а при загруженной работе. Например, после создания объекта SW.

 

Проблема решилась добавлением Thread.Sleep(1000) перед открытием документа. Не знаю с чем это связанно, видимо SolidWorks не успевает раздуплится и кидает эксепшн...

Thread.Sleep(1000);
IModelDoc2 swModelFlange = (IModelDoc2)swApp.OpenDoc6(pathOfFlange.Text, 1, 2, "", 0, 0);

Спасибо.

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

Здравствуйте. Делаю спецификацию. Ниже часть кода с помощью которой получаю элементы сборки.

for (int i = 0; i < sw_assy.GetComponentCount(true); i++)
{
    sw_component = sw_assy.GetComponents(true)[i];
    sw_comp_modeldoc2 = sw_component.GetModelDoc2();
// здесь некоторые действия
}

Проблема в том, что GetComponents выдает компоненты не в том порядке что в дереве построения в сборке. И порядок этот не стабилен. То есть один раз я получаю порядок деталей 1,3,2,4,5,6, другой раз 6,5,4,3,2,1, третий раз третий порядок. В чем может быть проблема?

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

Что-то я не понимаю, а зачем чтобы сгенерить спецификацию нужен именно тот порядок который в дереве?

Все равно придется фильтровать и сортировать потом полученный список функциями скорее всего уже не самого солида.

Ссылка на сообщение
Поделиться на других сайтах
В чем может быть проблема?
 

А нет проблемы. Читая хелп:

The components returned by this method can be in any order. 

 

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

Ссылка на сообщение
Поделиться на других сайтах
Что-то я не понимаю, а зачем чтобы сгенерить спецификацию нужен именно тот порядок который в дереве?

Дерево построения, во всех своих сборках, я строю в соответствии со спецификацией (необходимым мне порядком). То есть, сначала в сборке идут подсборки, потом детали, потом стандартные изделия, потом материалы. Далее, делая чертеж и спецификацию, я уже не задумываюсь о правильности порядка элементов, поскольку солид ориентируется на порядок построения в сборке (по крайней мере я так думаю) и в чертежи и в таблицу спецификации (солидовскую) попадает именно этот порядок.

 

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

Что же тогда использовать? Как получить тогда этот порядок?


Что же тогда использовать? Как получить тогда этот порядок?

Все вопросы снимаю. Нашел в хелпе. Всем спасибо.

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

 

Что-то я не понимаю, а зачем чтобы сгенерить спецификацию нужен именно тот порядок который в дереве?

Дерево построения, во всех своих сборках, я строю в соответствии со спецификацией (необходимым мне порядком). То есть, сначала в сборке идут подсборки, потом детали, потом стандартные изделия, потом материалы. Далее, делая чертеж и спецификацию, я уже не задумываюсь о правильности порядка элементов, поскольку солид ориентируется на порядок построения в сборке (по крайней мере я так думаю) и в чертежи и в таблицу спецификации (солидовскую) попадает именно этот порядок.

 

 

 

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

Что же тогда использовать? Как получить тогда этот порядок?

 

 

Что же тогда использовать? Как получить тогда этот порядок?

Все вопросы снимаю. Нашел в хелпе. Всем спасибо.

 

Отсортировать и отфильтровать полученный случайный список. А то как вы строите свое дерево сборки вообще маразм.

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

Для разных случаев, разные способа. А свой маразм, держите при себе.

Ссылка на сообщение
Поделиться на других сайтах
То есть, сначала в сборке идут подсборки, потом детали, потом стандартные изделия, потом материалы. Далее, делая чертеж и спецификацию, я уже не задумываюсь о правильности порядка элементов, поскольку солид ориентируется на порядок построения в сборке (по крайней мере я так думаю) и в чертежи и в таблицу спецификации (солидовскую) попадает именно этот порядок.

Может я не прав. Но есть снабжение и экономика проекта. Ну есть такая ненужная вещь.

 

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

Но тут приходит ЦУ с ВЕРХА, трубы не будет будет лист, технологи  ВОЛЬ, сделаем, дайте чертежи, Чертеж сборка двух П образок.

У меня к ВАМ вопрос, как Вы перетягиваете в таком случае дерево построения сборки.

 

ЗЫ. И при изготовлении в следующем месяце Вам поставили не лист, а все таки квадратную трубу? Опять перетаскиваете дерево?

 

ЗЫ. ЗЫ. Реальное производство и фантазии конструктора - это разные, зачастую непонимающие друг друга области одного и того же знания.

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

Это все верно. И я с Вами соглашаюсь. Все что Вы описали, касается реального производства. Однако мой случай - это оцифровывание чертежей (не всегда реальных изделий, и очень часто как раз таки фантазии). Заказчик дает мне сборку в бумажном виде (всегда в бумажном виде). Сборки сложностью до 30 уникальных деталей (это максимум). Спецификация сборки не всегда соответствует алфавиту. Поэтому, в данном случае, лучше настроить дерево построения в сборке, так как это экономит время. И это точно лучше, поскольку проверено на более чем 50 подобных сборках.

 

ЗЫ. Что же Вы не спрашиваете сначала, что за потребность такая, и что за случай такой.

Ссылка на сообщение
Поделиться на других сайтах
Дерево построения, во всех своих сборках, я строю в соответствии со спецификацией (необходимым мне порядком). То есть, сначала в сборке идут подсборки, потом детали, потом стандартные изделия, потом материалы.

 

Я еще в дереве построения создаю отдельные папки "сборки", "детали", "стандартные изделия", "прочие", "материалы".. Так значительно проще ориентироваться в дереве. Правда, внутри папки сортирую редко..

 

У меня к ВАМ вопрос, как Вы перетягиваете в таком случае дерево построения сборки.   ЗЫ. И при изготовлении в следующем месяце Вам поставили не лист, а все таки квадратную трубу? Опять перетаскиваете дерево?

 

Это дело нескольких секунд.. Дольше модель править с трубы на лист..

 

Все вопросы снимаю. Нашел в хелпе. Всем спасибо.

 

А поделиться со всеми??

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

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

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

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

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

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

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

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

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

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

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



  • Сообщения

    • davidovka
      в уравнении Гибкой области ячейки наименование первую строку исправьте на  r=ptstrim(1,asm_mbr_НАИМЕНОВАНИЕ,22,0)  
    • M_u_x_a
      @fenics555, согласен с Вами полностью. Риски, о которых Вы говорите - имеют место наравне с прочими. Выкладываю шаблон и форматку, сохранено в Creo 11. Если сравнить мануалы, реализовано по-разному. Но правка результатов не принесла.  
    • RokiSIA
      Вот и попались, пусть теперь они уже отбрехиваются
    • davidovka
      Выкладывайте свои, посмотри что не работает.
    • Anat2015
      А что, бывает по другому, программисты и операторы сразу сознаются?
    • fenics555
      так пока кто-то пользуется кнопкой "сделайкрасиво" он набивает номенклатуру, библиотеку изделий, с уже неправильно указанными параметрами. И вдальнейшем другим конструкторам пользоваться штатными средствами никак не получится, кроме как открыть КАЖДЫЙ файл, добавить нужные парметры (тут можно импортом из шаблона)  и лапками подправить. КАЖДЫЙ! И сборки. Все. Еще с булками разобраться. Иначе без этой DLLки выводиться будет ерунда. ДАЖЕ СРАНЫЙ ЧЕРТЕЖ ОБЫЧНОЙ ДЕТАЛИ! И никто другой даже не додумается, в чем же дело. Ну вот возьмет он (Конструктор с кнопочкой умной) и уволится от неразделенной любви, или по дороге на работу разобьется. Ну фактор человеческий. Бывает. Он работал, получал ЗП за то, что делал "вроде правильно", но любой другой придет- и не сможет сразбегу "в красоту"! И Бос такой, затягивая сигару: "Эх, салага, вот Стас был- да! ..." Ну там, слеза скупая, всё такое. И не объяснить, что он х8йню делал. Поэтому я стараюсь работу работать так, чтоб после меня "Фен -просто красавчик" сказал тот, кто будет после.
    • M_u_x_a
      Уважаемые Господа @fenics555 и @-stas- ! Каждый из вас по-своему прав. Пользоваться или нет дополнительными приложениями при возможности реализации штатными средствами - это выбор каждого инженера. Тут влияет ещё и специфика работы, взаимодействие с другими инженерами и тд. Лично я, пожалуй, вижу в конкретно этом инструменте скорее положительное, нежели бесполезное. В списке дополнительных приложений запущено и работает. Дело в том, что тот релиз, на который я жаловался, был под Creo 1. С этим мне помог уважаемый @davidovka , за что мой ему поклон. Однако, желаемого результата достичь не удалось, несмотря на правку графы таблицы согласно инструкции-мануалу. Теперь там просто пусто, не заполняет. Прошу кинуть в мою сторону шаблон детали и форматку с которыми оно точно работает. Успехов всем в делах и делишках.
    • Сергей Кочев
      При разборе полётов, все утверждали, что программа отлажена и её ни кто не менял и сделали по ней две детали. Ну вот зашёл в свойства файла программы и увидел, что программу редактировали именно в день аварии. Сздана 11.10 Изменена 30.10. Был в отпуске хотел посмотреть Action Log к сожалению уже данные перезаписались.
    • Даниил_91
      спасибо, просто по поиску не нашел конкретной темы кстати надо попробовать, об этом даже не подумал, спасибо
    • Onizuka
      Удалите параметр DRAWN_BY и создайте снова. Список должен обновиться после этого
×
×
  • Создать...