Отрисовка дуги на PictureBox

Автор alexwolf999, 07.06.18, 08:39:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

alexwolf999

Добрый день.
Проблема такая. Из чертежа надо вытащить дугу и отрисовать ее на PictureBox. Вытащить то я вытащил, а вот отрисовать не получается. Может кто то подскажет, как это сделать?

#programmer

07.06.18, 11:55:41 #1 Последнее редактирование: 07.06.18, 12:20:28 от #programmer
Только средствами самого C# по полученным параметрам.

Любо создать файл ресурсов (.rc) в него записать параметры дуги и отрисовать с помощью ksDrawSlideFromFile

alexwolf999

Это я понял. Весь вопрос в том, как преобразовать координаты. У меня дуга рисуется не в том месте.

Вы хотя бы картинку покажите, что не получается, да и зачем это нужно?

alexwolf999

Код отрисовки: Pen pen = new Pen(Color.Black);
            double x = _arc.Radius * Math.Cos((_arc.Angle1* 180 / Math.PI)) + _arc.X;
            double y = _arc.Radius * Math.Sin((_arc.Angle1* 180 / Math.PI)) +_arc.Y;
            double xc = x;
            double yc = _arc.Y + _arc.Radius;
            g.DrawArc(pen, (float)xc,(float)(yc), (float)(2*_arc.Radius), (float)(yc+_arc.Radius-y),(float)_arc.Angle1, (float)_arc.Angle2)


Код импорта дуги: ksArcByAngleParam par = (ksArcByAngleParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByAngleParam);
                               
                                if (par!=null)
                                {
                                    int t = doc.ksGetObjParam(reference, par, ldefin2d.ALLPARAM);
                                    ArcFigure arc = new ArcFigure(par.xc, par.yc, par.rad, par.ang1, par.ang2, par.dir, par.style, t);
                                    arcList.Add(arc);
                                }


Я выполняю заказ, а для чего это нужно... Вроде как дальше собираются делать программу для станка ЧПУ.

Для ЧПУ, фрагмент лучше подойдёт.
Можно всё собрать в группу и использовать функцию ksDrawKompasGroup - отрисовать группу как слайд в присланном окне, для фрагмента функцию ksDrawKompasDocument - отрисовать документ системы КОМПАС как слайд в присланном окне.


#programmer

07.06.18, 12:33:15 #6 Последнее редактирование: 07.06.18, 13:04:02 от #programmer
Получите параметры дуги по трём точкам (ko_ArcByPointParam 13  ksArcByPointParam)

И дальше Google в помощь:

https://stackoverflow.com/questions/2898089/c-sharp-drawing-arc-with-3-points
https://msdn.microsoft.com/en-us/library/7ak09y3z(v=vs.110).aspx

Многие станки (и программы) ЧПУ понимают dxf.
Может действительно достаточно взять сделать фрагмент и сохранить в dxf формате.
Возможно нужно сохранить в более старом (упрощённом) dxf формате.


P. S.
Система координат в КОМПАСе начинается внизу слева.
Система координат в окне программы - вверху слева.
Единицы измерения в КОМПАСе - мм, в окне программы - пикселы.

P.P.S.
Проще сохранить документ КОМПАСа в растровом формате и показать в окне своей программы.

alexwolf999

ЦитироватьP.P.S.
Проще сохранить документ КОМПАСа в растровом формате и показать в окне своей программы.
Ему требуется взаимодействие с элементами чертежа в окне программы.

ksArcByPointParam par1 = (ksArcByPointParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByPointParam);
                                if (par1!=null)
                                {
                                    int t = doc.ksGetObjParam(reference, par1, ldefin2d.ALLPARAM);
                                    ArcFigure arc = new ArcFigure(par1.xc,par1.yc, par1.rad, par1.x1, par1.y1, par1.x2, par1.y2, par1.dir,par1.style, t);
                                    arcList.Add(arc);
                                }

Вот что тут не так? Все поля равны 0.

DesignЯR

 В коде не видно где Вы выбираете какую-то конкретную дугу на чертеже.Может быть reference не определен - потому все его параметры равны нулям?