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

Проблема с экземпляром класса SolidWorks API


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

Есть две формы, в первой при нажатии на кнопку открывается SolidWorks по своему GUID. Далее открывается вторая форма и мне необходимо работать с SolidWorks из этой формы уже, но возникают проблемы с экземпляром класса в первой форме объявлен 

C#
1
2
3 
 //первая форма
public SldWorks SwApp; 
public IModelDoc2 swDoc;

Во второй форме нужно получить экземпляры классов (так как будут пустые параметры если просто объявлю во второй форме как и в первой и начну какие либо действия). Пишу во второй форме так 

C#
1
2
 //вторая форма 
 SldWorks SwApp = new SldWorks();

SwApp - получает параметры полученные в первой форме, а swDoc объявлен как обычно (IModelDoc2 swDoc) так как это интерфейс и нельзя получить экземпляр, далее нужно получить активный документ, пишу 

C#
1
2
 //вторая форма 
 swDoc = SwApp.IActiveDoc2;

но почему то параметры пустые, что в SwApp.IActiveDoc2 что соответственно в swDoc. Подскажите как быть? Если вы конечно поняли о чем я говорюag.gif

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


3 часа назад, mrazzzb сказал:

так как это интерфейс

Это не интерфейс)) это чуток быдлокода от индусов. Это так называемые In-Context объекты, с какого то перепоя с приставкой I.

 

3 часа назад, mrazzzb сказал:

Подскажите как быть?

передавать SwApp второй форме параметром, или создавая вторую форму сделать там открытое свойство и после создания но ДО отображения присваивать свойству второй формы объект SW.

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

сделать там открытое свойство

ошибся. публичное свойство

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

передавать SwApp второй форме параметром

Не совсем понимаю, как вы имеете в виду? Не могли бы привести пример?

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

Не совсем понимаю, как вы имеете в виду?

Can u in english? Because I don't understand your language.

 

http://stackoverflow.com/questions/4247807/passing-variable-between-winforms

 

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

Can u in english? Because I don't understand your language.

 

Издеваетесь?)) Все комментарии на русском оставляете, а пишите что не понимаете)))

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

Нет. Для меня предложение

28 минут назад, mrazzzb сказал:

Не совсем понимаю, как вы имеете в виду?

звучит как из гугл translate. Вот и переспросил.

- КАК я имею в виду?

- как я имею в виду ЧТО?

- как я могу иметь в виду ПЕРЕДАТЬ параметр?

- КАК я имею в виду передавать параметр?

:wallbash:

 

Лан, ответ всё равно дал выше :smile:

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

Нет. Для меня предложение

звучит как из гугл translate. Вот и переспросил.

Я уже грешным делом подумал о насмешке) Я просто не совсем понимаю как передать SwApp второй форме, параметром. 

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

как передать SwApp второй форме, параметром.

Во! Чётко и понятно)))

Во второй форме пропишите публичное свойство. При создании второй формы из первой, присвойте тому созданному свойству значение переменной, отображайте вторую форму и работайте с объектом SW который был создан в первой))

ТУТ всё подробно и на русском.

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

При создании второй формы из первой 

Она у меня не создается программно, я ее уже создал в "обозревателе решений" в ручную.

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

Она у меня не создается программно

:smile: всё что вы пишете в Visual Studio - создаётся программно. Visual Studio именно так и работает.

Как вы отображаете вторую форму?

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

:smile: всё что вы пишете в Visual Studio - создаётся программно.

 Я так и думал что вы это скажите)) В первой форме после запуска SolidWorks, написал так :

Form1 f1 = new Form1();
f1.Show();
Hide();

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

прочитайте тему по ссылке в 9 сообщении, там есть ответ на ваш вопрос

3 минуты назад, mrazzzb сказал:

Я так и думал что вы это скажите))

Ну так, чётко сформулированная мысль уже есть половина ответа.

 

Вот это

3 минуты назад, mrazzzb сказал:

Form1 f1 = new Form1();

и есть создание второй формы, ибо есть new. До new второй формы не существовало в оперативной памяти.

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

@streamdown ХВАЛА ИМХОТЕПУ! У меня получилось, я почему спрашивал как все-таки передать параметром, потому что я уже пробовал один их тех способов на том форуме который вы мне скинули, он ничего не передавал,(способ 2.2) т.е. null. Тут у меня и появились сомнения, казалось что нужно как-то по другому, а вот следующий способ 2.3, помог))) Спасибо Вам большое!! А-то я наверно больше и не попробовал никаких способов) Кстати еще один вопрос, с вашего позволения) Как программно получить высоту(или длину) ниже приведенной детали?

pastedImage_0.png

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

Как программно получить высоту(или длину) ниже приведенной детали?

Это вопрос из разряда "лечу недуг по фотографии" :biggrin:

Напрашивающийся очевидный ответ: выделить 2 грани, запустить на выбор:

 

- ClosestDistance

- GetDistance

- IMeasure Interface : Length Property 

- RayIntersections

- IExtrudeFeatureData2

- всякими другими методами http://www.streamdivision.com/naiti-gabarity-detali-part1/

- посчитать простенько, векторами да точками

Вы же помните, выше :biggrin:

41 минуту назад, streamdown сказал:

чётко сформулированная мысль уже есть половина ответа.

 

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

@streamdown Спасибо большое за подсказку, и кстати нахождение крайних точек я уже смотрел, спасибо)) Просто хотелось узнать какие еще способы есть) Я может не с того начинаю, но задача стоит в следующем, необходимо с помощью trackbar(ползунка) длиной равной высоте детали, при перемещении ползунка, обрезать деталь(с каким-либо шагом, не важно). Как это можно реализовать? Сначала найти высоту детали, для определения длины trackbar, а потом макрос записать как работает функция обрезки детали по выбранной оси?) Или может есть другой способ?

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

Хм, задачка вроде простенькая, но много переменных.

- откуда узнать с какой стороны обрезать?

- резать надо в реальном времени?

- а что если крайние плоскости не параллельны?

- зачем вообще макрос на такое? :biggrin: Делайте вырез и солидовским нумериком выставляйте размер отреза

7 часов назад, mrazzzb сказал:

Я может не с того начинаю

Может задача то вообще по другому звучит? А значит и решение другое надо.

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

- откуда узнать с какой стороны обрезать?

 

Не столь важно, попробовать хотя-бы от начала координат.

 

4 часа назад, streamdown сказал:

- резать надо в реальном времени?

 

В зависимости от сложности реализации, если возможно вообще в реальном времени, то так конечно же лучше.

 

4 часа назад, streamdown сказал:

- а что если крайние плоскости не параллельны?

 

Думаю ничего страшного:g:Есть функция обрезки детали в Солиде называется Section View(скрин ниже) там можно разрезать деталь в любом направлении, ссылаюсь на эту функцию, может можно как то к ней обратиться и обрезать деталь ползунком с приложения ?)) Или есть еще какой-то способ обрезки деталей, программно.

Снимок.PNG

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

Команда "Сечения", которую вы показали, это ни разу не "обрезать деталь".

Блин, надоело))) задавайте вопросы по API - отвечу. Остальное сами.

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

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

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

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

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

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

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

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

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

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

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




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