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

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

1 минуту назад, malvi.dp сказал:

На этой строчке затык

Добавь

Set ModView = swModel.ActiveView

swModel = активный документ

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


День добрый.

Может кто подскажет такую информацию:

Надо где-то в свойства вида (IView), либо в элементах типа IProjectionArrow, DrSection и т.п.( в общем, в каком-то любом интерфейсе описывающем дочерний вид), внести свои данные (пока видится данные типа ТЕКСТ). Есть какое-нибудь информационное поле позволяющее это?

З.Ы. Поясняю для чего:  хочу переработать макрос SetLabels, с добавлением возможности игнорирования некоторых видов( исключить их из автоматического переименования при наличии нескольких обозначений и только одном виде). Я в курсе что можно обойтись проверкой на то, находится ли вид в пределах чертежного листа. Хочется что бы сохранялась связь между видом и обозначениями при переименовании вида.

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

внести свои данные (пока видится данные типа ТЕКСТ). Есть какое-нибудь информационное поле позволяющее это?

З.Ы. Поясняю для чего:  хочу переработать макрос SetLabels, с добавлением возможности игнорирования некоторых видов

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

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

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

Спасибо. У самого такие мысли были, но надеялся, что можно обойтись без дополнительных объектов.

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

День добрый.

Есть такой вопрос:

При вызове команды "Редактировать текст в окне" из контекстного меню на метке вида, видна информация типа: <VLNAME><VLLABEL> и т.п.

Теперь сам вопрос:

 Как эту информацию можно получить с помощью SW API ? (  интерфейс INote.GetText(), то, что внутри угловых скобок, не видит )

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

Как эту информацию можно получить с помощью SW API ? (  интерфейс INote.GetText(), то, что внутри угловых скобок, не видит )

Возможно: swNote.PropertyLinkedText

http://help.solidworks.com/2010/english/api/sldworksapi/get_and_set_format_of_note_example_vb.htm

 

 

 

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

Супер! Именно то что надо ....

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

Кто-то пользуется надстройкой Rubberduck при написании макросов? Отпишитесь пожалуйста.

Полезная вещь?

Ссылку не даю, гуглится на раз

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

Rubberduck

Да, это ВЕЩЬ!!!

Офигенно понравилось!

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

Как устанавливается сие чудо?

Двойным щелчком :)

Все очень просто, ставишь, он интегрируется как аддон в MVBA.

Становится виден в аддон-менеджере, можно включать, отключать.

Убогая IDE для VBA стала напоминать хоть что-то немного стоящее.

На сайте есть подробное описание функций.

Одна автоматическая табуляция кода чего стоит.

Пока не нашел подсветку синтаксиса, может и нет, а то бы цены не было.

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

Попробуйте, мне понравилось, ставил последнюю версию

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

Столкнулся с проблемой при написании автономного приложения на C#.

Происходит необратимый рост ресурсов Solidworks если окно скрыто. При видимом окне все нормально.

Идет простой перебор большого количества чертежей с сохранением в PDF и если есть сама функция сохранения : 

boolstatus = swModExt.SaveAs(patchNew, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, swExportPDFData, ref errors, ref warnings);

то после закрытия чертежа:

swApp.CloseDoc(nameDoc);  //(swApp.QuitDoc(nameDoc));

Ресурсы потребления SolidWorks не падают пока его не закроешь. При переборе 50+ файлов чертежей, потребление видеопамяти улетает за 16 Gb и оперативной за 40 Gb.

 

 

Примерный код C#:

 

class Class1
    {
        static void Main(string[] args)
        {
            List<string> patch; //Список чертежей
            using (SLD1 solid = new SLD1())
            {
                for (int i = 0; i < patch.Count; i++)
                {
                    solid.SavePDF(patch[i])
                }
            }
        }
    }

    class SLD1: IDisposable
    {
        public SLD1()
        {
            swApp = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
            swApp.CommandInProgress = (bool)true;
            swApp.UserControl = (bool)false;
            swApp.Visible = (bool)false;
        }

        public void Dispose()
        {
            swApp.CommandInProgress = (bool)false;
            swApp.ExitApp();
            System.Runtime.InteropServices.Marshal.FinalReleaseComObject(swApp);
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }

        public void SavePDF(string patch)
        {
            swModel = ((ModelDoc2)(swApp.ActiveDoc));
            swModel = ((ModelDoc2)(swApp.OpenDoc6(patch, swDocumentTypes_e, 0, "", ref errors, ref warnings)));
            boolstatus = swModel.EditRebuild3();
            swModel.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swViewReverseWheelZoomDirection, true);
            swModExt = (ModelDocExtension)swModel.Extension;
            //Некоторый код подготовки листов в PDF
            boolstatus = swModExt.SaveAs(patchNew, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, swExportPDFData, ref errors, ref warnings);
            swApp.QuitDoc(swModel.GetTitle());
            swModel = null;
        }
    }

 

При создании окна Solidworks через Running Object Table (ROT) все тоже самое.

Если убрать само сохранение SaveAs, то роста потребления нет...

 

Может есть методы у Solidworks на очистку мусора и т.п.?

 

 

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

Может есть методы у Solidworks на очистку мусора и т.п.?

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

 

Так же, изучите зачем нужен DispatchWrapper

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

У меня нормально работает следующий код (упрощенно):

 

'===============================================================

Public Function DrawDocIsOpen(ByVal ffnDraw As String, _
                              ByRef bWasClosed As Boolean, _
                              ByVal swOpenDocOpt As swOpenDocOptions_e) As Boolean
   Dim oModelDoc As SldWorks.ModelDoc2
   Set oModelDoc = Nothing
   DrawDocIsOpen = False
   If moSW Is Nothing Then Exit Function
   Set oModelDoc = moSW.GetOpenDocument(ffnDraw)
   bWasClosed = oModelDoc Is Nothing
   If bWasClosed Then
      Set oModelDoc = moSW.OpenDoc6(ffnDraw, swDocDRAWING, swOpenDocOpt, vbNullString, 0, 0)
   End If
   DrawDocIsOpen = Not oModelDoc Is Nothing
   If DrawDocIsOpen Then moSW.ActivateDoc2 oModelDoc.GetTitle, False, 0

   Set oModelDoc = Nothing
End Function

'===========================================================

Public Function CreatePDF(ByRef ffnPDF As String ) As Boolean
   Dim oModelDoc  As SldWorks.ModelDoc2
   Dim w          As Long
   Dim e          As Long

   Set oModelDoc = moSW.ActiveDoc

   CreatePDF = oModelDoc.SaveAs4(ffnPDF, swSaveAsCurrentVersion, swSaveAsOptions_Silent, e, w)

   Set oModelDoc = Nothing

End Function

'============================================================

Public Sub CloseActiveDoc()
   Dim oModelDoc As ModelDoc2
   On Error Resume Next
   Set oModelDoc = moSW.ActiveDoc
   moSW.CloseDoc oModelDoc.GetTitle

   Set oModelDoc = Nothing
End Sub

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

Спасибо всем ответившим.

 

Может кому пригодится, пока смог реализовать такой костыль:

swApp = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
swApp.Visible = false;
swApp.CommandInProgress = true;
swModel = (ModelDoc2)swApp.OpenDoc6();
swApp.RunMacro(); //Проводим сохранение макросом VBA
swApp.QuitDoc();
swApp.CommandInProgress = false;
swApp.ExitApp();

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

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

Как изменить текст программно в обведенном окошке?

Может, кто сталкивался...

 

как изменить текст программно.JPG

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

Категорически не советую не разобравшись со структурой имен пытаться вольно менять их. Разорванные связи это еще самое легкое, что может произойти. У одной и той же детали как минимум три имени: имя в дереве, имя в свойствах, и имя-описание в общих свойствах. Я думаю, что разработчики уже сами запутались в этих именах. В вашем случае надо объявить деталь как компонент и далее:  swComp.Name2 = "ваше новое имя". Ну и да, с виртуальными компонентами вообще нет смысла делать какие-то операции с именами, пока не выведите их из этого статуса

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

В вашем случае надо объявить деталь как компонент и далее:  swComp.Name2 = "ваше новое имя".

Вручную приставку после крыши у виртуального компонента можно убрать.

swComp.Name2 приставку после крыши у виртуального компонента не убирает.

В принципе, она не мешает, но хотелось бы "чего-то светлого, чистого"... )

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

swApp.RunMacro();

Этим кодом вы проводите In-Process выполнение. Оно по умолчанию будет быстрее чем Stanalone программкой.

Кстати, в этом случае 

swApp.CommandInProgress 

не имеет смысла. Попробуйте убрать эту строку и всё останется на той же скорости.

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

Вручную приставку после крыши у виртуального компонента можно убрать.

swComp.Name2 приставку после крыши у виртуального компонента не убирает.

В принципе, она не мешает, но хотелось бы "чего-то светлого, чистого"... )

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

Связано вероятно с соответствующей галочкой Инструменты-Параметры...-Настройки пользователя-Внешние ссылки:

Цитата
Обновить имена компонентов, когда документы заменяются

Данный параметр следует отключать, только если используется диалоговое окно Свойства компонента для назначения имени компонента в дереве конструирования FeatureManager, отличающегося от имени файла компонента.

 

http://help.solidworks.com/2010/russian/solidworks/sldworks/allcontent/solidworks/core/assemblies/hidd_options_external_refs.htm

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

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

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

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

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

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

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

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

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

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

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

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




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