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

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

Как повернуть деталь в сборке? В смысле как это сделать через API?

Думаю, достаточно, чтоб разобраться дальше самому:

arr = NewMatrix(dXc, dYc, dZc, dA_rad)

oComp.Transform2 = oMathUtil.CreateTransform(arr)

moAsse.EditRebuild ' Rebuild to see updated transform

Private Function NewMatrix(ByVal dX_m As Double, ByVal dY_m As Double, _

						   ByVal dZ_m As Double, ByVal dA_rad As Double) As Double()

   Dim arr(15) As Double

 

   ' Поворот вектора OX

   arr(0) = Cos(dA_rad)

   arr(1) = Sin(dA_rad)

   arr(2) = 0#

   ' Поворот вектора OY

   arr(3) = -Sin(dA_rad)

   arr(4) = Cos(dA_rad)

   arr(5) = 0#

   ' Поворот вектора OZ

   arr(6) = 0#

   arr(7) = 0#

   arr(8) = 1#

   '

   ' Точка вставки

   arr(9) = dX_m

   arr(10) = dY_m

   arr(11) = dZ_m

   '

   ' Unit scaling

   arr(12) = 1

   ' No used so pad with zeros

   arr(13) = 0#

   arr(14) = 0#

   arr(15) = 0#

   '

   NewMatrix = arr

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


Думаю, достаточно, чтоб разобраться дальше самому:

...

Все правильно!

Т.е. все преобразования(перемещение/вращение/масштабирование) над объектами сводятся к матричным операциям.

Это, кстати, основа и OpenGL и DirectX.

PS. вернее, наоборот, OpenGL и DirectX - основа, а API SW - это уже следствие из них.

...Расскажите подробнее. Я слушаю очень внимательно...

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

Иначе уже при наложении 2-го сопряжения на пару объектов возникнут ошибки. А для полного определения положения объекта необходимо три сопряжения.

Отсюда вопрос: как программа будет определять эти параметры без участия пользователя?

Хотя, в принципе, это возможно решить и программно и без ошибок, но в 98% случаях это никак не будет соответствовать тому, что хотел пользователь.

Ответа у меня до сих пор нет, хотя этот вопрос у меня возник еще ~ в 2005-м году...

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

Можно ли управлять дизайном PropertyManagerPage (та, которая появляется слева при жмакании кнопочки гденить в меню/в панели/в табе)

в шаблоне аддона есть тока класс UserPMPAge - дизайнера нет.

Если используются контролы самого SW (PropertyManagerPageButton, PropertyManagerPageCombobox и т.д), то только програмно. Но можно сотворить свой UserControl и запихнуть его в PropertyManagerPage. На скриншоте DataGridView создан таким образом.

post-3876-1296139196_thumb.jpg

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

Если используются контролы самого SW (PropertyManagerPageButton, PropertyManagerPageCombobox и т.д), то только програмно. Но можно сотворить свой UserControl и запихнуть его в PropertyManagerPage. На скриншоте DataGridView создан таким образом.

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

подскажите пож-ста, как правильно выбрать элемент (эскиз "Bounding-Box1") в дереве чертежного вида детали?

я делаю так

Dim swModExt			As SldWorks.ModelDocExtension

Set swModExt = swModel.Extension

...

ViewName = swView.GetName2									 ' получил имя вида

bRetActiveView = swDraw.ActivateView(ViewName)		  ' активировал вид

bRetViewBoundary = swModExt.Extension.SelectByID2("Bounding-Box1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

swDraw.UnblankSketch												   ' отобразить эскиз
Ссылка на сообщение
Поделиться на других сайтах

подскажите пож-ста, как правильно выбрать элемент (эскиз "Bounding-Box1") в дереве чертежного вида детали?

я делаю так

Dim swModExt			As SldWorks.ModelDocExtension

Set swModExt = swModel.Extension

...

ViewName = swView.GetName2									 ' получил имя вида

bRetActiveView = swDraw.ActivateView(ViewName)		  ' активировал вид

bRetViewBoundary = swModExt.Extension.SelectByID2("Bounding-Box1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

swDraw.UnblankSketch												   ' отобразить эскиз
Первый аргумент функции SelectByID2 в этом случае должен иметь вид: "Имя эскиза@Имя детали@Имя вида", примерно так "Sketch1@Part1-2@Drawing View2". Особо обратите внимание на имя детали. Индекс и дефис обязательны.

Т.е. визуально нельзя располагать контролы, управлять их размерами и т.д. , как это обычно делается в средах разработки VB, VS... (конструктор форм)?

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

...

Визуально нельзя. В SW нет конструктора форм, насколько мне известно.

Что значит: "в SW - нет"

Когда я макрос на C# редактирую, все там есть...

Пока вот не смог разобраться:

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

Пускай для начала это будет обычная форма - не "PropertyManagerPage".

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

ssv22

Вы тоже перешли на шарп? (ну или диез - для особо любящих точность названия)

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

ssv22

Вы тоже перешли на шарп? (ну или диез - для особо любящих точность названия)

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

чтобы стартовал не макрос, а форма, на ней, ессенно, копочки, а вот к кнопочкам уже привязать сам макрос?

с такой функцией отлично справляется dll. Там хоть на панельке хоть в менюшке...кнопка - по которой стартует макрос

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

Что значит: "в SW - нет"

Когда я макрос на C# редактирую, все там есть...

Это VSTA (Visual Studio Tools for Application), под .NET. Там конструктор форм есть. А streamdown спрашивал о PropertyManagerPage и его контролах. Вот для него и нет дизайнера.
Ссылка на сообщение
Поделиться на других сайтах

Это VSTA (Visual Studio Tools for Application), под .NET. Там конструктор форм есть. А streamdown спрашивал о PropertyManagerPage и его контролах. Вот для него и нет дизайнера.

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

ssv22

ничего печального)))))

можно сотворить свой UserControl и запихнуть его в PropertyManagerPage

Осталось только разложить объявления в addin-е и вроде всё. Я прально понял, Shvg?

Или функции, выполняемые контролом в таскпейне тоже нужно где-то прописывать помимо класса этого таскпейна?

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

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

ViewName = swView.GetName2

bRetActiveView = swDraw.ActivateView(ViewName)

FileName = Left(MyDir, Len(MyDir) - 7) & "-1"

bRetViewBoundary = swModel.Extension.SelectByID2("Bounding-Box1@FileName@ViewName", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

swModel.UnblankSketch
не хочет отображать эскиз габаритной рамки листовой детали.

Встретил на офф. форуме следующую запись:

retval = swApp.ActiveDoc.Extension.SelectByID2(swsubfeat.Name & "@" & Left(swmodel.GetTitle, Len(swmodel.GetTitle) - 7) & "-1" & Right(flatview.Name, 1) & "@" & flatview.Name, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

что значат выделенные символы в контексте команды?

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

shvg

Вы были правы насчёт индексов.... ну оооооочень надо быть внимательным

Сложнее получить его, индекс, из вида. Особенно, если это разрез. :confused_1:
Ссылка на сообщение
Поделиться на других сайтах

Такой вопрос, как получить путь dll аддона?

Пример: Я создаю проект dll в visual studio. В dll есть форма с кнопкой. Кнопка открывает текстовый документ, находящийся в папке проекта. Как в таком случае динамически узнать путь к dll?

Нашел только GetModuleFileName - но он почему-то не работает.

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

Сам нашел, и коменты добавил))) всё на шарпе

using Microsoft.Win32;



private void CmdEdit_Click(object sender, EventArgs e) //Открываем для редактирования файл TT.txt находящийся рядом с нашей dll

	   {

			/**

			 * Тут смысл вот в чем, наша ДЛЛ регистрируется в реестре

			 * а значит нам достаточно получить её CLSID (который берется из SwAddin)

			 * и взять из него имя параметра

			 **/

			Microsoft.Win32.RegistryKey RegKey =

										   Microsoft.Win32.Registry.LocalMachine.OpenSubKey

										   ("SOFTWARE\\Classes\\CLSID\\{04966BA8-3F59-4CB3-A227-A1604EC8CEB7}\\InprocServer32", true);

			try

			{

				Object o1 = RegKey.GetValue("CodeBase");

				string loadstring = o1.ToString();

				string subloadstring = (loadstring.Substring(8)); //Удаляем всякую хрень в начале ключа

				int leight = subloadstring.Length; //Узнаем теперь длину всего параметра

				string subloadstring1 = (subloadstring.Remove(leight - 13, 13)) +"TT.txt"; //Удаляем имя нашей DLL с конца строки, прибавляем имя текстовика

				System.Diagnostics.Process.Start("notepad", subloadstring1); //Запускаем блокнот с путем, который получили

			}

			catch (Exception ex) { MessageBox.Show(ex.ToString()); }		   

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

подскажите пож-ста, как экспортировать в pdf определённый набор листов чертежа?

в хэлпе упоминается массив Sheets типа Object:

Dim instance As IExportPdfData

Dim Which As Integer

Dim Sheets As Object

Dim value As Boolean

value = instance.SetSheets(Which, Sheets)

сделал массив (Variant) нужных имён листов, как его правильно указать в операторе?

из хэлпа:

boolstatus = swExportPDFData.SetSheets(swExportData_ExportSpecifiedSheets, varSheetName)
но тут varSheetName - имя листа, а мне нужен список. В итоге получаю в pdf все листы чертежа.
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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