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

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

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

У Solidworks есть проблема порядка отображения окон макросов, возможно, это так же зависит от операционной системы, например, Windows7. Так окно не всегда появляется наверху, а может запуститься под другими окнами. Для поиска окна макроса используйте клавиши Alt+Tab.

Или в текст активации окна добавлять WinAPI для отображения поверх всех окон, например:

Const SWP_NOMOVE = 2

Const SWP_NOSIZE = 1

Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE

Const HWND_TOPMOST = -1

Const HWND_NOTOPMOST = -2

Private Declare Function FindWindowExW& Lib "user32" (ByVal hParent&, ByVal hChildAfter&, _

ByVal lpClassW&, ByVal lpTitleW&)

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _

ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long



Private Sub UserForm_Activate()

Dim windowHWND As Long

Dim meCap As String

meCap = Me.Caption

Me.Caption = Me.Caption & Hex$(Now) & Hex$(Timer)

Debug.Print Hex$(Now) & Hex$(Timer)

windowHWND = FindWindowExW(0, 0, StrPtr("ThunderDFrame"), StrPtr(Me.Caption))

Me.Caption = meCap

Debug.Print "Window.HWND = " & windowHWND

SetWindowPos windowHWND, HWND_TOPMOST, 0, 0, 0, 0, FLAGS

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


Всем привет.Срочно нужна помощь. Пишу программу на делфи работающею с Solid Works API . И появился вопрос как выбрать определенную плоскость для построения эскиза.

единственное что знаю надо просканировать featuremaneger(дерево конструирования) и найти в нем плоскость.

С помощью этих функций:

GetNextFeature

GetFirstSubFeature();

GetTypeName;

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

ModelDoc2 swModel;

ModelDocExtension swExt;

bool boolstatus;



swModel = (ModelDoc2)swApp.ActiveDoc;

swExt = (ModelDocExtension)swModel.Extension;

boolstatus = swExt.SelectByID2("Front Plane", "PLANE", 0, 0, 0, false, 0, null, 0);

Русский вариант:

boolstatus = swExt.SelectByID2("Спереди", "PLANE", 0, 0, 0, false, 0, null, 0);
Ссылка на сообщение
Поделиться на других сайтах

streamdown. Спс.

boolstatus = swExt.SelectByID2("Спереди", "PLANE", 0, 0, 0, false, 0, null, 0);

но если этот метод использовать при смене языка он не сможет выбрать плоскость?

есть вроде метод пройтись по дереву можно проверить каждый элемент, на Feature Types и если этот элемент окажется плоскостью, проверить та ли это плоскость которая нас интересует.

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

azzzazzzelDEAN

Я же ссылку на справку дал, там как раз то что нужно. Искомый индекс плоскости "Const ReqPlane", как только траверс попадает на неё, происходит выделение. Далее, insertSketch() и рисуйте)))

Пишу программу на делфи

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

azzzazzzelDEAN

Я же ссылку на справку дал, там как раз то что нужно. Искомый индекс плоскости "Const ReqPlane", как только траверс попадает на неё, происходит выделение. Далее, insertSketch() и рисуйте)))

Похвально, только вот вам мало кто поможет, если полезут ошибки во время дебага. Непопулярный язык для API SW.

СПС. к сожалению другого языка не знаю :(

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

СПС. к сожалению другого языка не знаю :(

Чем не повод выучить? ;)

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

Чем не повод выучить? ;)

Уже сам задумывался об этом:) но нет времени а по учебе мы все на дельфе делаем:)
Ссылка на сообщение
Поделиться на других сайтах

программирование под CAD на delphi?

Ну да:) если честно дурдом полный ни методичек ни книг, все инфа на английском а примеры си или бейсик. Разбираемся как можем:)

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

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

Ну да:) если честно дурдом полный ни методичек ни книг, все инфа на английском а примеры си или бейсик. Разбираемся как можем:)

Скорее всего - лучше не будет. :) Но если уже в чем то да и разбираться, то не в delphi.

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

там еще какаето матрица есть

ой есть))) да непростая. Можно и по ней, но это уже хитрый способ. Проще надо быть с этим API)))
Ссылка на сообщение
Поделиться на других сайтах

ой есть))) да непростая. Можно и по ней, но это уже хитрый способ. Проще надо быть с этим API)))

ну если проще то это:

boolstatus = swExt.SelectByID2("Спереди", "PLANE", 0, 0, 0, false, 0, null, 0);
по мне так приемлемый вариант:) ток с языками может запара быть но мне не на продажу:) вот не знаю устроит ли препада этот вариант:)

Если знаете как сделать с помощью матрицы подскажите если не сложно:)

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

должны знать какая по счету плоскость которая нам нужна

Угу. В принципе - этого достаточно, ибо "спереди-сверху-справа" это как бы основа. Даже если вы переименуете плоскости , ориентация по матрице останется той же.

А дальше...хитрости))) Выделив нужную делаем ориентацию перпендикулярно плоскости. Повторный запуск команды - обратная сторона.

C#

swModel.Extension.RunCommand((int)swCommands_e.swCommands_NormalTo, "");

VBA

swModel.Extension.RunCommand swCommands_e.swCommands_NormalTo, ””

И без всяких матриц.

Ссылка на сообщение
Поделиться на других сайтах
Угу. В принципе - этого достаточно, ибо "спереди-сверху-справа" это как бы основа. Даже если вы переименуете плоскости , ориентация по матрице останется той же.

А дальше...хитрости))) Выделив нужную делаем ориентацию перпендикулярно плоскости. Повторный запуск команды - обратная сторона.

C#

procedure FindPlanes(Model_doc: IModelDoc2; var PlaneXY, PlaneYZ, PlaneXZ, Point: IFeature; var PointName: WideString);var  CurFeature: IFeature;  FeatureName: WideString;  CurPlane: IRefPlane;  CurPlaneParams: Variant;begin  CurFeature:= Model_doc.IFirstFeature;  while CurFeature <> nil do  begin     FeatureName:= CurFeature.GetTypeName;     if FeatureName = 'RefPlane' then     begin        CurPlane:= (CurFeature.GetSpecificFeature) as IRefPlane;        if CurPlane <> nil then        begin           CurPlaneParams:= CurPlane.GetRefPlaneParams;           if (CurPlaneParams[0]=0) and (CurPlaneParams[1]=0) and (CurPlaneParams[2]=0) then           begin              if (CurPlaneParams[6]=0) and (CurPlaneParams[7]=0) and (CurPlaneParams[8]<>0) then                PlaneXY:= CurFeature;              if (CurPlaneParams[6]<>0) and (CurPlaneParams[7]=0) and (CurPlaneParams[8]=0) then                PlaneYZ:= CurFeature;              if (CurPlaneParams[6]=0) and (CurPlaneParams[7]<>0) and (CurPlaneParams[8]=0) then                PlaneXZ:= CurFeature;           end;        end;     end;     if FeatureName = 'OriginProfileFeature' then     begin       PointName := CurFeature.Name;       Point:= CurFeature;     end;     CurFeature:= CurFeature.IGetNextFeature;  end;end;
Ссылка на сообщение
Поделиться на других сайтах
  • 1 месяц спустя...

Иногда при запуске программы (отладке) solidworks вывешивает окошко о сборе данных и виснет - программа не запускается. Решение:

32bit machine:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

x64 machine:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727

and type the following command:

ngen.exe executeQueueditems

This should cause .NET to compile all .NET components that have been queued up as soon as possible instead of in the background when the machine is idle.

The .NET components in the queue may come from SolidWorks, 3rd party applications based on .NET, and the .NET framework itself.

On a 64-bit machine, please invoke the above command from both a 32-bit and a 64-bit DOS command prompt.

Апдейт. Такое нужно проделать не только когда происходит отладка DLL, но и просто SW всё время вывешивает окно

Изображение

Ну и батничек для исправления этого дела.

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

Очень интересная работа с .NET

Позднее связывание и отвязка своей программы от версии SW.

<noindex>http://streamdown.blogspot.ru/2013/03/blog-post.html</noindex>

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

Подскажите пожалуйста, мне необходимо написать макрос, который в зависимости от свойств модели будет отображать те или иные виды на чертеже. Как свойства модели прописываются в бэйсике? Там где стоит Х мне нужно прописать свойство модели:

Dim swApp As Object

Dim Part As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _

Application.SldWorks

Set Part = swApp.ActiveDoc

boolstatus = Part.Extension.SelectByID2("Чертежный вид1", "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0)

If X = 1 Then

Part.UnsuppressView

Else

Part.SuppressView

End IF

End Sub

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

Свойства из модели или чертежа?

В справке не то? <noindex>http://help.solidworks.com/2012/english/ap..._example_vb.htm</noindex>

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • Snake 60
      Рад помочь ) Сам "ехал на этом коне", вот и запомнил )
    • Guhl
      Важно, что теперь мы знаем, что такая хрень лечится перекатыванием образа на другой диск А что там было, никто и не знает скорее всего  
    • куркуль
      Пожалуйста, проверьте кабель profibus, положение оконечных резисторов, поскольку, судя по характеру описания проблемы, это похоже на проблему сбоя связи profibus. Должны быть включены только два резистора разъемов profibus, а остальные должны быть выключены. Пожалуйста, обратитесь к чертежу OEM, чтобы проверить это. ХТХ. Это ответ от сименса на похожею ошибку.  РЕЗИСТОРЫ - вероятно переключатели на разъёмах профибас. И что по ручному пульту. он ведь тоже прописан.  
    • Andrey_kzn
      А оси начинают движение в референтную точку? Или сразу при запуске реферирования возникает ошибка? Датчики какие на линейной и на круговой оси, чисто инкрементные (надо доехать до концевика при реферировании), или с кодированным расстоянием?  Как организованы аппаратные концевики на круговой оси В? Ошибки с 300000 номерами - это ошибки привода.  NC и PLC  здесь не причём. Такое впечатление, что есть какой-то контроль фактического положения осей перед выполнением процедуры реферирования - дабы не въехать никуда, пока ось не знает своего положения.  попробуйте отреферировать оси из другого положения, разверните ось В, сместите ось V.
    • Anat2015
      Надо пользоваться как Гуглом, так и Яндексом, иногда помогает одно, в другом случае - другое. Раньше пользовался только гуглом, после февраля 2022 стал замечать проблемы, особенно по китайским сайтам.
    • A_1
      Добрый день. Отправляю фрагмент из руководства по эксплуатации по циклу G76. Значение P (высота резьбы) для метрической резьбы можно найти умножив шаг резьбы на коэффициент 0.542. В цикле G76 она задаётся в дискретах станка (в микронах обычно). Это значение всегда примерное, так как на него влияет величина радиуса при вершине резца. Нельзя полагать, что задав рассчитанную высоту резьбы мы получим годную деталь, всегда требуется коррекция, в том числе из-за разной жёсткости системы СПИД. Но правильнее корректировать значение X в цикле G76, а уточненная высота резьбы зависит от этого значения.
    • Maik812
      По компасу есть, по SW 2014 и ниже есть, по step пишите рег выражение. По igs рег выражение и тд. По Creo тоже есть через регулярные. T-Flex нах.. нужен такой CAD :)   #- CMNM ((.*))\. $1 Выводит значение после #- CMNM , но абракотабра.. нужно ковыряться в регулярках чтоб переводил в юникод. http://wincmd.ru/plugring/PCREsearch.html PCREsearch   Еще Можно и http://wincmd.ru/plugring/WinScriptAdv.html скриптовый плагин Все то что выводит ехплорер выводит Shelldetals
    • Maik812
      Есть возможность просто строчку вывести, часто этого достаточно. TextLine.zip  
    • Maik812
      Все есть Плагин PCREsearch  из чего хочешь выведет данные любые,  не закрытый формат был бы. Но даже pdf , есть конверте и выводит .  
    • Rich
      Спасибо, дружище, заработало. До момента установки 23 версии как второй и не знал о таком трабле, все старые вещи работали как часы, ну изредка менял библиотеку.
×
×
  • Создать...