Форум программистов, компьютерный форум, киберфорум
Наши страницы

SolidWorks

Войти
Регистрация
Восстановить пароль
 
Armando_More
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 3
#1

Скорость рисования элементов в чертеже Solidworks во время выполнения кода C# - SolidWorks

06.12.2017, 10:17. Просмотров 146. Ответов 4
Метки нет (Все метки)

Я написала код в Visual Studio для SolidWorks 2012, который выполняет создание чертежа на основании 3В детали (основные виды), разрезы, сечения и проставления размеров. Можно ли увеличить скорость отрисовки элементов во время выполнения кода, так как сейчас это делается недостаточно быстро? Есть ли функция, которая бы ускорила этот процесс?

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swcommands;
using SolidWorks.Interop.swconst;
using System.IO;
 
namespace CreateDrawing
{
    public partial class Form1 : Form
    {
        SldWorks swApp;
     
        public Form1()
        {
            InitializeComponent();
        }
        //функция проверки открытия файла
        public bool IsFileOpen(string path)
        {
            if (string.IsNullOrEmpty(path))
                throw new ArgumentException("'path' cannot be null or empty.", "path");
 
            try
            {
                using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { }
            }
            catch (IOException)
            {
                return true;
            }
            return false;
        }
               private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string User;
            User = System.Environment.UserName;
            ModelDoc2 Part;
            SelectionMgr swSelMgr;
            SolidWorks.Interop.sldworks.View myView;
            DrawingDoc swDrawing;
 
            //запускает SolidWorks2012
            //object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromProgID("SldWorks.Application"));
            Guid myGuid1 = new Guid("B4875E89-91F6-4124-BB63-2539727E98FA"); //GUID для Solidworks 2012
            object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));
 
            swApp = (SldWorks)processSW;
            swApp.Visible = true;
 
            int longstatus = 0;
            int longwarnings = 0;
 
            try
            {
                Part = (ModelDoc2)swApp.ActiveDoc;
                if (IsFileOpen("C:\\IM\\IMWork\\Направляющий аппарат с торовой поверхностью.SLDPRT"))
                {
                    goto a;
                }
                else
                {
                    Part = (ModelDoc2)swApp.OpenDoc6(@"C:\IM\IMWork\Направляющий аппарат с торовой поверхностью.SLDPRT", 1, 0, "", ref longstatus, ref longwarnings);
                    goto a;
                };
                a:
                bool boolstatus;
                Object vScaleRatio;
                string retval;
            retval = swApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplateDrawing);
            //Part = swApp.NewDocument(@"C:\ProgramData\SolidWorks\SolidWorks 2012\templates\gost-part drw.drwdot", 0, 0, 0);
            Part  = (ModelDoc2)swApp.NewDocument(retval, 0, 0, 0);
            swSelMgr = Part.SelectionManager as SelectionMgr;
            swDrawing = Part as DrawingDoc;
            myView = (SolidWorks.Interop.sldworks.View)swDrawing.CreateDrawViewFromModelView3("C:\\IM\\IMWork\\Направляющий аппарат с торовой поверхностью.SLDPRT", "*Слева", 0.13835806060864, 8.53251696525708E-02, 0);
                boolstatus = Part.Extension.SelectByID2("Чертежный вид1", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
                boolstatus = swDrawing.ActivateView("Чертежный вид1");
                vScaleRatio = myView.ScaleRatio;
                myView.ScaleDecimal = myView.ScaleDecimal * 5;
                Part.EditRebuild3();
                myView = swDrawing.CreateUnfoldedViewAt3(-0.210437678570781, 8.53251696525708E-02, 0, false);
                Part.ClearSelection2(true);
                boolstatus = Part.Extension.SelectByID2("Чертежный вид1", "DRAWINGVIEW", 0, 0, 0, false, 0, null, 0);
                myView = swDrawing.CreateUnfoldedViewAt3(0.516477335382791, 8.53251696525708E-02, 0, false);
                Part.ClearSelection2(true);
                Part.ViewZoomtofit2();
 
                object pointArray, skSegment, myCenterLine;
                double[] points1;
                double[] points2;
                double[] points3;
                double Beta, D2, BetaToRad, L12;
                const double pi = 3.14159265358979;
             
                Beta = 5;//////////////////////////////
                BetaToRad = Beta * pi / 180;
                D2 = 420;////////////////////////////
                L12 = 64;///////////////////////////
 
                boolstatus = swDrawing.ActivateView("Чертежный вид1");
 
                skSegment = Part.SketchManager.CreateLine(0 - 0.04, -(((D2) / 2) + 10) / 1000.0, 0, 0 - 0.04, (((D2) / 2) + 10) / 1000.0, 0);
                skSegment = Part.SketchManager.CreateLine(0 - 0.04, (((D2) / 2) + 10) / 1000.0, 0, ((L12) + 10) / 1000.0, (((D2) / 2) + 10) / 1000.0, 0);
                skSegment = Part.SketchManager.CreateLine(((L12) + 10) / 1000.0, (((D2) / 2) + 10) / 1000.0, 0, ((L12) + 10) / 1000.0, -(((D2) / 2) + 10) / 1000.0, 0);
                skSegment = Part.SketchManager.CreateLine(((L12) + 10) / 1000.0, -(((D2) / 2) + 10) / 1000.0, 0, 0 - 0.04, -(((D2) / 2) + 10) / 1000.0, 0);
 
                boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                swDrawing.CreateBreakOutSection(((D2) / 2) / 1000.0);
                Part.ClearSelection2(true);
 
                boolstatus = swDrawing.ActivateView("Чертежный вид1");
                boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.139425110594787, 0.142762852404969, 0, false, 0, null, 0);
                boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.14214405415703, 2.72077510096118E-02, 0, true, 0, null, 0);
 
                myCenterLine = swDrawing.InsertCenterLine2();
                Part.ClearSelection2(true);
                boolstatus = swDrawing.ActivateView("Чертежный вид2");
 
                points1 = new double[33];
                points1[0] = -0.214318;
                points1[1] = -4.52024367223014E-02;
                points1[2] = 0;
                points1[3] = -0.117115767649788;
                points1[4] = -2.82090394582783E-02;
                points1[5] = 0;
                points1[6] = 5.91642854173952E-03;
                points1[7] = -3.29671906922048E-02;
                points1[8] = 0;
                points1[9] = 0.124870209389901;
                points1[10] = -3.02482471299611E-02;
                points1[11] = 0;
                points1[12] = 0.222752177630675;
                points1[13] = -3.56861342544485E-02;
                points1[14] = 0;
                points1[15] = 0.21935349817787;
                points1[16] = 0.111816553997272;
                points1[17] = 0;
                points1[18] = 0.201000629132725;
                points1[19] = 0.230770334845434;
                points1[20] = 0;
                points1[21] = 4.55695676061768E-03;
                points1[22] = 0.241646109094409;
                points1[23] = 0;
                points1[24] = -0.214318; ;
                points1[25] = 0.244365052656653;
                points1[26] = 0;
                points1[27] = -0.214318;
                points1[28] = 0.11045708221615;
                points1[29] = 0;
                points1[30] = -0.214318;
                points1[31] = -4.52024367223014E-02;
                points1[32] = 0;
                pointArray = points1;
                skSegment = Part.SketchManager.CreateSpline((pointArray));
                myView = swDrawing.ActiveDrawingView;
                longstatus = myView.Crop();
                boolstatus = Part.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                longstatus = myView.Crop();
 
                boolstatus = swDrawing.ActivateView("Чертежный вид1");
                points2 = new double[27];
                points2[0] = -4.24360470097527E-02;
                points2[1] = -4.24834931600578E-02;
                points2[2] = 0;
                points2[3] = -2.92421794975378E-04;
                points2[4] = -0.031607718911083;
                points2[5] = 0;
                points2[6] = 3.84525239669974E-02;
                points2[7] = -3.77253419261313E-02;
                points2[8] = 0;
                points2[9] = 4.86485623254112E-02;
                points2[10] = 5.74376827523982E-02;
                points2[11] = 0;
                points2[12] = 4.93282982159721E-02;
                points2[13] = 0.210378258128606;
                points2[14] = 0;
                points2[15] = 1.06704998614657E-03;
                points2[16] = 0.219894560596459;
                points2[17] = 0;
                points2[18] = -4.24360470097527E-02;
                points2[19] = 0.22057429648702;
                points2[20] = 0;
                points2[21] = -4.24360470097527E-02;
                points2[22] = 7.57905517975432E-02;
                points2[23] = 0;
                points2[24] = -4.24360470097527E-02;
                points2[25] = -4.24834931600578E-02;
                points2[26] = 0;
                pointArray = points2;
                skSegment = Part.SketchManager.CreateSpline((pointArray));
                myView = swDrawing.ActiveDrawingView;
                longstatus = myView.Crop();
                boolstatus = Part.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                longstatus = myView.Crop();
 
                boolstatus = swDrawing.ActivateView("Чертежный вид3");
                points3 = new double[33];
                points3[0] = -0.218673762287309;
                points3[1] = -0.049280852065667;
                points3[2] = 0;
                points3[3] = -0.101079453220269;
                points3[4] = -2.00522087715472E-02;
                points3[5] = 0;
                points3[6] = -4.7854141725201E-04;
                points3[7] = -4.58821726128624E-02;
                points3[8] = 0;
                points3[9] = 0.104880521619691;
                points3[10] = -2.27711523337909E-02;
                points3[11] = 0;
                points3[12] = 0.213638264109439;
                points3[13] = -5.74376827523981E-02;
                points3[14] = 0;
                points3[15] = 0.214997735890561;
                points3[16] = 8.73460619370789E-02;
                points3[17] = 0;
                points3[18] = 0.191206979720929;
                points3[19] = 0.232129806626556;
                points3[20] = 0;
                points3[21] = 1.71945917373321E-02;
                points3[22] = 0.236887957860482;
                points3[23] = 0;
                points3[24] = -0.218673762287309;
                points3[25] = 0.236208221969921;
                points3[26] = 0;
                points3[27] = -0.213915611053382;
                points3[28] = 8.19081748125915E-02;
                points3[29] = 0;
                points3[30] = -0.218673762287309;
                points3[31] = -0.049280852065667;
                points3[32] = 0;
                pointArray = points3;
                skSegment = Part.SketchManager.CreateSpline((pointArray));
                myView = swDrawing.ActiveDrawingView;
                longstatus = myView.Crop();
                boolstatus = Part.Extension.SelectByID2("Spline1", "SKETCHSEGMENT", 0, 0, 0, false, 0, null, 0);
                longstatus = myView.Crop();
                Part.ClearSelection2(true);
 
            longstatus = Part.SaveAs3(@"C:\IM\IMWork\Направляющий аппарат с торовой поверхностью.DWG", 0, 2);
 
                MessageBox.Show(@"Чертеж был успешно построен и сохранен в папку C:\IM\IMWORK\Направляющий аппарат с торовой поверхностью.DWG");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
Ссылка на файлы: https://www.dropbox.com/sh/ov0yfjij7...2kcKbOGia?dl=0

Буду очень благодарна за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2017, 10:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скорость рисования элементов в чертеже Solidworks во время выполнения кода C# (SolidWorks):

Тормозит изменение взаимного расположения проекций на чертеже в SolidWorks - SolidWorks
Доброго времени суток, уважаемые. собственно, проблема описана выше. железо: i5 4 Gb W7 x64 GeForse GTX 460 драйвер...

Засечь время выполнения (в ms) определённого кода или части кода - C#
Доброго времени суток всем. Хотелось бы поинтересоваться у знающих людей. Как можно засеч время выполнения(в ms) определённого кода...

Оценить скорость (время) выполнения метода - C#
Нельзя ли никак сию задачу решить? То есть к примеру, написал я метод, показался он мне не оптимальным - заменил его на другой. И как бы...

Scheme - скорость выполнения кода - Lisp
Началось все с одной несложной задачки - http://www.cyberforum.ru/haskell/thread1821507.html Я написал наивный алгоритм на Haskell, он...

.NET 4.x Почему плавает скорость выполнения кода? - C#
Здравствуйте, заметил такое дело. Имеем часть кода Где pg-это List<Page>(параметры страницы для сайта) состоит из 1000 строк. ...

Максимально сократить скорость выполнения кода - C#
Привет всем, есть такой код: (Выполняет скачивание строк с хешкодом/путем до файла, получает список файлов у меня в папке, и сравнивает...

4
densy
76 / 76 / 15
Регистрация: 30.08.2015
Сообщений: 311
08.12.2017, 11:20 #2
Цитата Сообщение от Armando_More Посмотреть сообщение
Есть ли функция, которая бы ускорила этот процесс?
такой нет.

Попробуйте следующее (направленные на уменьшение потребляемых ресурсов компъютера):
1) Работать с солидом в фоновом режиме;
2)
C#
1
 swApp.UserControl = false;
3) уменьшить точность отрисовки и включить опцию режим большой сборки.

Добавлено через 6 минут
если все же нужно видеть окно солида на момент работы кода тогда:
1) уменьшить окно солида к минимуму
2) не обновлять виды
C#
1
   .EnableGraphicsUpdate  =  False;
0
Armando_More
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 3
13.12.2017, 09:39  [ТС] #3
Спасибо! Функция EnableGraphicsUpdate помогла увеличить скорость выполнения кода.
0
Linoge
Эксперт Hardware
2146 / 1511 / 253
Регистрация: 25.10.2011
Сообщений: 4,517
13.12.2017, 19:18 #4
Armando_More, а может вообще погасить окно на время выполнения кода?
Если правильно понял swApp.Visible = False; а после обработки высветить.
Когда работал с e3series прокатывало.
0
densy
76 / 76 / 15
Регистрация: 30.08.2015
Сообщений: 311
18.12.2017, 00:45 #5
Armando_More, получается что вам все таки нужен графический интерфейс тогда еще вариант включить опцию OpenGL (немножко уменьшит нагрузку на видеокарту)

Скорость рисования элементов в чертеже Solidworks во время выполнения кода C#

непомню точно вроде с 15 версии солидворкс перешел на профессиональные видеокарты и что бы использовать другую требуется правки в реестре, иначе насколько понимаю изображение рендерится процессором.
0
18.12.2017, 00:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2017, 00:45
Привет! Вот еще темы с ответами:

Узнать скорость выполнения определённого участка кода - Delphi
Доброй ночи. Собственно вопрос заключается в следующем, нужно узнать скорость выполнения определённого програмного кода. Где-то мельком...

Как отследить скорость выполнения кода в приложении - .NET
Всем привет. Есть проект, клиент говорит что одна из операций занимает много времени, но судя по коду такого не должно быть. Тим лид дал...

Время выполнения кода - PHP
Имеется небольшой скриптик для получения сведений о времени выполнения PHP-кода: <?php echo "<h2>Тестирование PHP-кода</h2>\n\n"; ...

Надо улучшить скорость выполнения кода (формирование длинной строки) - C#
Есть метод который возвращает случайное слово: public static string RandomWord(int Number) { /* RandomWord causing it returns a...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.