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

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

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

У 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 пользователей

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




  • Сообщения

    • Viktor2004
      какая ссылка не рабочая? Ссылка на этот же форум. Там в низу пятой страницы мое видео как создавать файлы MACRO
    • WSXASD
      Спасибо. Жаль только там ссылка не рабочая((( Уже весь интернет прошерстил. Нету
    • Павлуха
      Тат помогает серверный юпс. А сохранять солид сам напоминает.
    • Viktor2004
      Вот тут на пятой странице есть https://cccp3d.ru/topic/114285-софт-фанук/page/5/  
    • WSXASD
      Здравствуйте коллеги! Подскажите, как открыть и редактировать диалоговые окна меню Custom? Это своя оболочка от производителя. Зачем мне это нужно? Потому что станок шлифовальный китайский и сделан с китайской логикой. Меняя значения параметров обработки в этих окнах, я меняю переменные, которые затем используются в макропрограмме обработки. Чтобы понять как работает макропрограмма обработки, мне нужно знать какие именно переменные меняются, когда я меняю тот или иной параметр в диалоговом окне. Если я правильно понимаю (может быть и нет) то за эти меню отвечает файл PD0105M.000 Вот как и чем его открыть и посмотреть что внутри?
    • ak762
      а двухтомник какого года издание? а то встречаю в сети только однотомники
    • lem_on
      Артефакты на конкретной детали, конечно не тройное пересечение, но по факту оно так иногда и выглядит, ели не выпедриватся особо. 
    • lem_on
      Офигеть, Шура открыл для себя геометрию!!!  Только стол можно тоже наклонять, либо голову под стол кривой поворачивать и это как раз исправляется параметрами, взять хотя бы провисание головы если ось У на голове находится, что стол под нее криво ставить? 
    • Killerchik
      Конкретно DMU нет, но в принципе поворотные головы да, видел. Давайте разделим проблему на совсем простые кусочки. Меня сейчас интересует только один параметр - перпендикулярность оси вращения шпинделя этого пятикоординатного фрезера к поверхности его стола в плоскости YZ. Допустим, что ось Z параллельна оси вращения шпинделя. Соответственно, к оси Z поверхность стола будет также не перпендикулярна. 1. К столу станка притянута толстая плита, нижняя поверхность плиты шлифована. Поскольку стол не перпендикулярен оси вращения шпинделя, нижняя поверхность детали также будет не перпендикулярна оси вращения шпинделя. 2. При сверлении и/или растачивании цилиндрических отверстия(ий) двигаться должна только ось, параллельная оси вращения шпинделя. Так устроен процесс резания. 3. Просверленные и/или расточенные отверстия будут не перпендикулярны нижней поверхности детали. Это не исправить никакой компенсацией.
    • Ветерок
      Сделать одно отверстие. Два других делать до поверхности первого отверстия или до его оси. (надеюсь Инвентор это умеет). Или делать отверстия до точки пересечения их осей.   Но в самом углу всё равно придется строить сферу. Только прямыми отверстиями не получится.   Или строить хотя бы одно отверстие вращением со сферическим торцом.
×
×
  • Создать...