Вверх ↑
Этот топик читают: Гость
Ответов: 106
Рейтинг: 0
#1: 2020-06-22 14:24:34 ЛС | профиль | цитата
Здравствуйте.
Есть потребность в предпросмотре G-кода, что там в последствии станок фрезеровать будет.
Как это сделать прямыми линиями, я более менее понял, но как дело дошло до дуг, что то не пойму как это сделать...
Прикреплю несколько файлов в архиве, то как должно выглядеть на самом деле, краткое пояснение g-кода, мою программку недоделанную, пример g-кода... ну а также пробник где можно порисовать дуги и ее область.
Если кто то сталкивался, подскажите пожалуйста......

(упс, не допер как залить архив...)

Залил на яндекс диск https://yadi.sk/d/ri4UOL5GRd_NAA

Редактировалось 2 раз(а), последний 2020-06-22 14:27:30
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8886
Рейтинг: 823
#2: 2020-06-22 18:40:48 ЛС | профиль | цитата
Gitarist, окружности (дуги) рисуются проще через синусы/косинусы
SIN


Add(MainForm,2953706,259,63)
{
Width=434
link(onCreate,11335311:doWork2,[])
}
Add(Edit,12153667,161,133)
{
Left=5
Top=25
Text="100"
DataType=2
ClearAfterEnter=1
link(onEnter,6809032:doWork2,[(200,146)(200,118)])
}
Add(Label,13915465,112,175)
{
Left=20
Top=5
Width=91
Height=17
Caption="X Центр Y"
}
Add(Label,3205524,119,182)
{
Left=5
Top=50
Width=51
Height=17
Caption="Радиус R"
}
Add(Edit,15954973,266,133)
{
Left=5
Top=70
Text="80"
DataType=2
ClearAfterEnter=1
link(onEnter,5624251:doWork3,[(312,146)])
}
Add(Image,11758879,364,259)
{
Left=150
Top=30
Width=201
Height=201
Color=12639424
Point(doRefresh)
link(Bitmap,5323349:Var2,[])
}
Add(Label,13814760,259,287)
{
Left=50
Top=145
}
Add(Bitmap,16619400,364,63)
{
HWidth=201
HHeight=201
FillColor=12639424
Point(doCreate)
}
Add(Hub,14293548,175,224)
{
OutCount=3
link(onEvent1,14691064:doCalc,[])
link(onEvent2,13459956:doCalc,[])
link(onEvent3,10075584:doString,[(200,244)(200,293)])
}
Add(MathParse,13459956,210,231)
{
DataCount=3
MathStr="cos(%2/10)*%1 + %3"
ResultType=0
AngleMode=1
link(onResult,1116387:doDraw,[(249,237)(249,328)])
link(X1,14888807:Var1,[(216,208)])
link(X3,4405020:Var2,[])
}
Add(FormatStr,10075584,210,287)
{
Mask="X=%1 Y=%2"
link(onFString,13814760:doText,[])
link(Str1,13459956:Result,[])
link(Str2,13980225:Var1,[(223,271)])
}
Add(Img_Line,13468380,392,210)
{
Point(Point1)
Point(Point2)
Point(Size)
Point(Color)
link(onDraw,563300:doDraw,[])
link(Bitmap,3316699:Var2,[])
link(Point1,3319651:Point,[(405,178)(398,178)])
link(Point2,6834355:Point,[])
link(Size,1635941:Var1,[(419,194)])
link(Color,1635941:Var2,[])
}
Add(Img_Line,563300,441,210)
{
Point(Point1)
Point(Point2)
Point(Size)
Point(Color)
link(onDraw,11758879:doLoad,[(487,216)(487,230)(355,230)(355,265)])
link(Bitmap,3316699:Var3,[(447,187)])
link(Point1,2594502:Point,[(454,179)(447,179)])
link(Point2,14938808:Point,[])
link(Size,7114521:Var2,[])
link(Color,5246863:Var2,[])
}
Add(Hub,3052766,322,77)
{
link(onEvent1,16619400:doCreate,[])
link(onEvent2,4839593:doWork1,[(354,90)])
}
Add(PointXY,3319651,392,140)
{
X=100
link(X,8692592:Var2,[])
}
Add(PointXY,6834355,406,140)
{
X=100
Y=199
link(X,8692592:Var3,[(412,131)])
}
Add(PointXY,2594502,441,140)
{
Y=100
link(Y,15439192:Var2,[])
}
Add(PointXY,14938808,455,140)
{
X=200
Y=100
link(Y,15439192:Var3,[(468,124)])
}
Add(GetDataEx,5323349,364,182)
{
link(Data,16619400:Bitmap,[])
}
Add(GetDataEx,3316699,392,182)
{
Angle=3
link(Data,5323349:Var3,[])
}
Add(Memory,10239166,476,140)
{
Default=Integer(1)
}
Add(GetDataEx,1635941,420,189)
{
Angle=1
link(Data,7114521:Var1,[])
}
Add(GetDataEx,7114521,462,189)
{
Angle=1
link(Data,5246863:Var1,[])
}
Add(GetDataEx,5246863,469,189)
{
Angle=1
link(Data,10239166:Value,[(482,194)])
}
Add(Img_Point,1116387,364,322)
{
Color=255
Size=2
Point(X)
Point(Y)
Point(Color)
Point(Size)
link(onDraw,11758879:doRefresh,[(409,328)(409,301)(354,301)(354,279)])
link(Bitmap,11758879:ImageBitmap,[])
link(Y,13980225:Var3,[(384,313)(349,313)(349,271)])
link(Color,1580276:Value,[(391,306)(419,306)])
link(Size,2504854:Value,[(398,313)(461,313)])
}
Add(GetDataEx,8692592,392,126)
{
Angle=3
link(Data,4405020:Var3,[(349,131)(349,194)])
}
Add(GetDataEx,15439192,448,119)
{
Angle=3
link(Data,9720267:Var3,[(342,124)(342,187)])
}
Add(Edit,8039995,210,133)
{
Left=65
Top=25
Text="100"
DataType=2
ClearAfterEnter=1
link(onEnter,6809032:doWork3,[(256,146)])
}
Add(ScrollBar,10779851,119,224)
{
Left=135
Top=10
Width=230
Max=1800
Min=-1800
Page=10
link(onPosition,14293548:doEvent1,[])
}
Add(Memory,1580276,413,259)
{
Default=Integer(255)
}
Add(Memory,2504854,455,259)
{
Default=Integer(10)
}
Add(MathParse,14691064,266,224)
{
DataCount=3
MathStr="sin(%2/10)*%1 + %3"
ResultType=0
AngleMode=1
link(onResult,4839593:doWork2,[(305,230)(305,216)])
link(X1,14888807:Var2,[])
link(X3,9720267:Var2,[])
}
Add(GetDataEx,14888807,266,203)
{
link(Data,15954973:Text,[])
}
Add(GetDataEx,4405020,224,189)
{
Angle=3
link(Data,12153667:Text,[(167,194)])
}
Add(GetDataEx,9720267,280,182)
{
Angle=3
link(Data,8039995:Text,[(216,187)])
}
Add(HubEx,4839593,350,210)
{
link(onEvent,13468380:doDraw,[])
}
Add(GetDataEx,13980225,266,266)
{
link(Data,14691064:Result,[])
}
Add(HubEx,11335311,308,77)
{
link(onEvent,3052766:doEvent1,[])
}
Add(HubEx,5624251,308,112)
{
Angle=3
link(onEvent,11335311:doWork3,[])
}
Add(HubEx,6809032,252,112)
{
link(onEvent,5624251:doWork2,[])
}

карма: 19

0
Ответов: 2193
Рейтинг: 673
#3: 2020-06-22 19:19:45 ЛС | профиль | цитата
Gitarist писал(а):
ну а также пробник где можно порисовать дуги и ее область.

Попробуйте измененный элемент Img_Arc. При включении свойства UseAngle = True. Point3 будет задавать начало дуги, а Point4 конец дуги в градусах.
Зайдите в эту тему: Доработка элементов ГрафикаРисование
Скачайте архив с элементами в первом посте (testelements.zip).
Замените файл hiImg_Arc.pas в папке \Elements\delphi\code\ и файл Img_Arc.ini в папке \Elements\delphi\conf\.
Оригинальные файлы скопируйте для последующего восстановления.
Перезапустите HiAsm.
Схема для тестирования


Add(MainForm,2953706,161,280)
{
Width=362
Height=502
Position=1
}
Add(Img_Arc,8255685,434,532)
{
Point2AsOffset=0
Size=3
UseAngle=1
Direction=1
Point(Point1)
Point(Point2)
Point(Point3)
Point(Point4)
link(Bitmap,2330156:Var2,[])
link(Point1,2810144:Var2,[])
link(Point2,12373068:Var2,[])
link(Point3,11759686:Position,[])
link(Point4,8851225:Position,[])
}
Add(PaintBox,880944,434,105)
{
Left=20
Top=120
Width=300
Height=310
Color=16777215
ClearBeforeDraw=0
link(onBeforeDraw,15251476:doDraw,[(478,111)(478,96)(332,96)(332,538)])
}
Add(Edit,5113297,448,154)
{
Left=100
Top=20
Text="50"
link(onChange,8919054:doWork2,[])
}
Add(Edit,9314071,455,189)
{
Left=100
Top=40
Text="50"
link(onChange,12839978:doWork2,[])
}
Add(Edit,6904018,455,273)
{
Left=170
Top=20
Text="100"
link(onChange,528179:doWork2,[])
}
Add(Edit,13102730,462,308)
{
Left=170
Top=40
Text="100"
link(onChange,13288155:doWork2,[])
}
Add(PointXY,2063720,448,238)
{
link(X,5113297:Text,[])
link(Y,9314071:Text,[])
}
Add(PointXY,1671955,455,350)
{
link(X,6904018:Text,[])
link(Y,13102730:Text,[])
}
Add(HubEx,8919054,703,154)
{
Angle=3
link(onEvent,880944:doRefresh,[(707,146)(422,146)(422,111)])
}
Add(HubEx,12839978,703,189)
{
Angle=3
link(onEvent,8919054:doWork3,[])
}
Add(HubEx,528179,703,273)
{
Angle=3
link(onEvent,12839978:doWork3,[])
}
Add(HubEx,13288155,703,308)
{
Angle=3
link(onEvent,528179:doWork3,[])
}
Add(Img_Rectangle,15251476,385,532)
{
Point2AsOffset=0
LineStyle=2
Point(Point1)
Point(Point2)
link(onDraw,8255685:doDraw,[])
link(Bitmap,2330156:Var1,[(391,495)])
link(Point1,2810144:Var1,[(405,502)])
link(Point2,12373068:Var1,[(412,509)])
}
Add(GetDataEx,2330156,434,490)
{
link(Data,880944:Bitmap,[])
}
Add(GetDataEx,12373068,455,504)
{
link(Data,1671955:Point,[])
}
Add(GetDataEx,2810144,448,497)
{
link(Data,2063720:Point,[])
}
Add(ScrollBar,11759686,462,406)
{
Left=30
Top=70
Width=260
Max=359
link(onPosition,12145677:doEvent1,[])
}
Add(ScrollBar,8851225,469,483)
{
Left=30
Top=95
Width=260
Max=359
Position=90
link(onPosition,8737459:doEvent1,[])
}
Add(HubEx,15440027,703,413)
{
Angle=3
link(onEvent,13288155:doWork3,[])
}
Add(Label,3318855,630,378)
{
Left=295
Top=70
Caption="от 0"
}
Add(Hub,12145677,504,406)
{
link(onEvent1,7468557:doStrCat,[(556,412)(556,384)])
link(onEvent2,15440027:doWork2,[])
}
Add(StrCat,7468557,574,378)
{
Str1="от "
link(onStrCat,3318855:doText,[])
}
Add(Label,3796690,630,455)
{
Left=295
Top=95
Caption="до 90"
}
Add(Hub,8737459,518,483)
{
link(onEvent1,5464319:doStrCat,[(553,489)(553,461)])
link(onEvent2,15440027:doWork3,[(707,496)])
}
Add(StrCat,5464319,574,455)
{
Str1="до "
link(onStrCat,3796690:doText,[])
}
flood
Вот казалось бы открыть Paint (или какой другой редактор) и наглядно показать как рисуется дуга в этом g-коде.
карма: 10

1
Голосовали:Gitarist
Ответов: 106
Рейтинг: 0
#4: 2020-06-23 14:15:59 ЛС | профиль | цитата
sla8a писал(а):
Скачайте архив с элементами в первом посте (testelements.zip).
Замените файл hiImg_Arc.pas в папке \Elements\delphi\code\ и файл Img_Arc.ini в папке \Elements\delphi\conf\.

Сделал все, как вы написали, теперь программа не собирается... Видимо что то еще надо...
лог


C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(26) Error: Undeclared identifier: 'PGeometricPen'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(40) Error: Undeclared identifier: '_prop_UseOffsetFill'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(43) Error: Undeclared identifier: '_data_OffsetFill'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(70) Error: Undeclared identifier: '_prop_Outline'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(72) Error: Undeclared identifier: '_data_Pen'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(72) Error: Undeclared identifier: 'GEOMETRICPEN_GUID'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(73) Error: Operator not applicable to this operand type

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(94) Error: Undeclared identifier: '_prop_UseAngle'

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(113) Error: Operator not applicable to this operand type

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(113) Error: Type of expression must be BOOLEAN

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiImg_Arc.pas(113) Error: Missing operator or semicolon

C:\Users\USER\AppData\Roaming\HiAsm_AltBuild\Elements\delphi\code\hiMainForm_19D6610.pas(8) Fatal: Could not compile used unit 'hiImg_Arc.pas'



Леонид писал(а):
Gitarist, окружности (дуги) рисуются проще через синусы/косинусы

Спасибо за совет Леонид, не первый раз выручаете! Подумаю чуть позже (после того как разберусь с Img_Arc.ini\ini) как прикрутить вашу схемку к отрисовке дуг
SIN


Редактировалось 3 раз(а), последний 2020-06-23 14:24:48
карма: 0

0
Ответов: 2193
Рейтинг: 673
#5: 2020-06-23 16:40:15 ЛС | профиль | цитата
Gitarist писал(а):
программа не собирается
Попробуйте из этого архива и заодно замените и Img_Draw в папке \Elements\delphi\code\.
Архив с элементом и примером
карма: 10

0
Ответов: 106
Рейтинг: 0
#6: 2020-06-23 16:49:38 ЛС | профиль | цитата
Леонид писал(а):
Gitarist, окружности (дуги) рисуются проще через синусы/косинусы
SIN

Этот пример маленько не то что нужно. В нем можно задать центр дуги и получить к примеру массив координат точек для отрисовки.
А мне известно только 4 значения для постороения дуги: дуга по часовой или против (G02 или G03), координата начала дуги, координата конца дуги, и радиус.
Как используя эти 4 переменные отрисовать дугу?

например, такой текст как отрисовать:


G00X100Y100 - начало дуги
G03X200Y100A50 - "G03"- по часовой, "X200Y100"- конец дуги, "A50" - радиус.

Редактировалось 2 раз(а), последний 2020-06-23 16:51:21
карма: 0

0
Ответов: 490
Рейтинг: 162
#7: 2020-06-23 19:39:31 ЛС | профиль | цитата
Gitarist писал(а):
"G03"- по часовой

а разве G03 по часовой, вроде G03 - круговая интерполяция против часовой стрелки.
пояснение с рисунком https://www.intuwiz.ru/articles/g02-g03.html

Редактировалось 1 раз(а), последний 2020-06-23 19:52:05
карма: 4

0
Ответов: 2193
Рейтинг: 673
#8: 2020-06-23 19:52:05 ЛС | профиль | цитата
tig-rrr, правильно понимаю что координаты это диаметр (как в примере ТС) или хорда окружности от которой и рисуется дуга?
карма: 10

0
Ответов: 490
Рейтинг: 162
#9: 2020-06-24 09:18:33 ЛС | профиль | цитата
sla8a, в данном примере идеальные условия и хорда окружности = диаметру...

а реальная ситуация скорей всего должна описывать эти варианты


Редактировалось 1 раз(а), последний 2020-06-24 09:44:21
карма: 4

0
Ответов: 2193
Рейтинг: 673
#10: 2020-06-24 10:12:51 ЛС | профиль | цитата
Тогда достаточно стандартного элемента.
карма: 10

0
Ответов: 490
Рейтинг: 162
#11: 2020-06-24 14:53:23 ЛС | профиль | цитата
Или как предложил
Леонид писал(а):
окружности (дуги) рисуются проще через синусы/косинусы

рисовать самому

Add(MainForm,15196061,119,392)
{
Width=761
Height=446
Position=1
link(onCreate,1731741:doWork2,[])
}
Add(Edit,12153667,413,140)
{
Left=20
Top=25
Text="150"
DataType=2
ClearAfterEnter=1
}
Add(Edit,15954973,504,140)
{
Left=145
Top=25
Text="100"
DataType=2
ClearAfterEnter=1
}
Add(Hub,14293548,329,308)
{
OutCount=3
link(onEvent1,6809237:doWork3,[(385,314)])
link(onEvent2,15940227:doWork2,[])
link(onEvent3,3555499:doData,[(362,328)(362,482)])
}
Add(MathParse,13459956,399,315)
{
DataCount=3
MathStr="cos(%2)*%1 + %3"
AngleMode=1
link(onResult,9096087:doValue,[])
link(X1,14148705:Var1,[(405,257)])
link(X3,12153667:Text,[])
}
Add(Edit,8039995,455,140)
{
Left=75
Top=25
Text="150"
DataType=2
ClearAfterEnter=1
}
Add(MathParse,14691064,455,273)
{
DataCount=3
MathStr="sin(%2)*%1 + %3"
AngleMode=1
link(onResult,1085043:doValue,[])
link(X1,14148705:Var2,[])
link(X3,8039995:Text,[(475,179)(461,179)])
}
Add(For,6517650,280,308)
{
Point(doStep)
link(onEvent,14293548:doEvent1,[])
link(Start,2096612:Var2,[])
link(End,12140828:Text,[(293,186)(342,186)])
}
Add(DoData,3555499,434,476)
{
link(onEventData,5214857:doDraw,[])
}
Add(Button,6526443,119,441)
{
Left=325
Top=180
link(onClick,13968087:doEvent2,[(611,447)(611,419)])
}
Add(Img_Line,5214857,504,476)
{
Size=3
Point(Point1)
Point(Point2)
link(Bitmap,6637295:Bitmap,[(510,457)(671,457)])
link(Point1,2063720:Point,[])
link(Point2,6259505:Point,[(524,465)(566,465)])
}
Add(PaintBox,6637295,665,413)
{
Left=15
Top=55
Width=300
Height=305
Color=16777215
ClearBeforeDraw=0
link(onBeforeDraw,13814849:doEvent1,[(715,419)(715,200)(207,200)(207,230)])
}
Add(MemFIFO,1085043,504,273)
{
}
Add(MemFIFO,9096087,567,315)
{
}
Add(PointXY,2063720,511,371)
{
link(X,1085043:Value2,[])
link(Y,9096087:Value2,[(524,359)(580,359)])
}
Add(PointXY,6259505,560,371)
{
link(X,1085043:Value1,[(566,346)(510,346)])
link(Y,9096087:Value1,[])
}
Add(GetDataEx,14148705,455,252)
{
Angle=1
link(Data,15954973:Text,[(510,257)])
}
Add(Hub,13814849,217,224)
{
link(onEvent1,3423076:doData,[])
link(onEvent2,6517650:doFor,[(255,237)(255,314)])
}
Add(Edit,11892794,1022,203)
{
Left=395
Top=25
Text="150"
DataType=2
ClearAfterEnter=1
}
Add(Edit,10777866,1106,203)
{
Left=525
Top=25
Text="100"
DataType=2
ClearAfterEnter=1
}
Add(Hub,5078315,987,315)
{
OutCount=3
link(onEvent1,5002889:doCalc,[(1028,321)(1028,286)])
link(onEvent2,10186292:doCalc,[])
link(onEvent3,9477739:doData,[(1024,335)(1024,482)])
}
Add(MathParse,10186292,1050,322)
{
DataCount=3
MathStr="cos(%2)*%1 + %3"
AngleMode=1
link(X1,16768445:Var1,[(1056,264)])
link(X3,11892794:Text,[(1070,274)(1028,274)])
}
Add(Img_Point,10001748,1092,476)
{
Size=3
Point(X)
Point(Y)
Point(Color)
Point(Size)
link(Bitmap,3964531:Bitmap,[(1098,468)(1070,468)])
link(X,10186292:Result,[(1105,382)(1056,382)])
link(Y,5002889:Result,[])
}
Add(Edit,6404793,1064,203)
{
Left=450
Top=25
Text="150"
DataType=2
ClearAfterEnter=1
}
Add(MathParse,5002889,1106,280)
{
DataCount=3
MathStr="sin(%2)*%1 + %3"
AngleMode=1
link(X1,16768445:Var2,[])
link(X3,6404793:Text,[(1126,252)(1070,252)])
}
Add(GetDataEx,16768445,1106,259)
{
link(Data,10777866:Text,[])
}
Add(PaintBox,3964531,1064,406)
{
Left=395
Top=50
Width=310
Height=305
Color=16777215
ClearBeforeDraw=0
link(onBeforeDraw,16736643:doFor,[(1130,412)(1130,369)(871,369)(871,321)])
}
Add(For,16736643,882,315)
{
Point(doStep)
link(onEvent,5078315:doEvent1,[])
link(Start,13920560:Text,[])
link(End,11229334:Text,[(895,261)(937,261)])
}
Add(DoData,9477739,1029,476)
{
link(onEventData,10001748:doDraw,[])
}
Add(Hub,13968087,630,406)
{
InCount=2
link(onEvent1,3964531:doRefresh,[])
link(onEvent2,6637295:doRefresh,[])
}
Add(Edit,2463932,280,140)
{
Left=275
Top=25
Text="90"
DataType=2
ClearAfterEnter=1
}
Add(Edit,12140828,336,140)
{
Left=225
Top=25
Text="270"
DataType=2
ClearAfterEnter=1
}
Add(Edit,13920560,882,203)
{
Left=605
Top=25
Text="-180"
DataType=2
ClearAfterEnter=1
}
Add(Edit,11229334,931,203)
{
Left=655
Top=25
Text="0"
DataType=2
ClearAfterEnter=1
}
Add(ScrollBar,10999977,119,322)
{
Left=270
Top=380
Width=150
Max=30
Min=1
Page=10
Position=1
link(onPosition,16631915:doEvent1,[])
}
Add(Hub,16631915,182,322)
{
OutCount=3
link(onEvent1,6517650:doStep,[])
link(onEvent2,4207655:In,[])
link(onEvent3,1731741:doWork1,[(207,342)])
}
Add(LineBreak,4142984,833,329)
{
link(Out,16736643:doStep,[])
Primary=[4207655,-609,0]
}
Add(HubEx,1731741,203,406)
{
link(onEvent,13968087:doEvent1,[])
}
Add(DoData,3423076,308,224)
{
link(onEventData,6016783:doEvent1,[])
link(Data,2096612:Var3,[(314,208)])
}
Add(GetDataEx,2096612,280,203)
{
link(Data,2463932:Text,[])
}
Add(HubEx,6809237,381,273)
{
link(onEvent,14691064:doCalc,[])
}
Add(Hub,6016783,357,224)
{
link(onEvent1,6809237:doWork1,[(385,230)])
link(onEvent2,15940227:doWork1,[(375,237)])
}
Add(HubEx,15940227,371,315)
{
link(onEvent,13459956:doCalc,[])
}


Редактировалось 5 раз(а), последний 2020-06-25 18:49:26
карма: 4

1
Голосовали:Gitarist
Ответов: 106
Рейтинг: 0
#12: 2020-06-25 08:35:31 ЛС | профиль | цитата
tig-rrr писал(а):
Gitarist писал(а):
"G03"- по часовой

а разве G03 по часовой, вроде G03 - круговая интерполяция против часовой стрелки.
пояснение с рисунком https://www.intuwiz.ru/articles/g02-g03.html

Редактировалось 1 раз(а), последний 2020-06-23 19:52:05


Конечно же против... Очепятался, звинити пзязя...
tig-rrr писал(а):
рисовать самому

Прикольная схемка! Точно, отрисовывать можно же линиями, не обязательно дуги... Спасибо большое! Попробуем прикрутить...

--- Добавлено в 2020-06-25 08:40:57

sla8a писал(а):
tig-rrr, правильно понимаю что координаты это диаметр (как в примере ТС) или хорда окружности от которой и рисуется дуга?

но ведь дуга может быть иметь еще вот такой вид:


Редактировалось 4 раз(а), последний 2020-06-25 08:44:40
карма: 0

0
Ответов: 106
Рейтинг: 0
#13: 2020-06-25 14:09:22 ЛС | профиль | цитата
tig-rrr писал(а):
Или как предложил
Леонид писал(а):
окружности (дуги) рисуются проще через синусы/косинусы

рисовать самому


Но нет таких вводных как в вашем примере... угол, центр итд...
Нипанимаю чот

--- Добавлено в 2020-06-25 14:19:42

Кстати, если отрисовывать что то подобное как на картинке выше, G-Код выглядит примерно так:
G00X20.000Y20.000
G02X85.000Y160.000A85.089
G02X150.000Y20.000A85.089

Редактировалось 2 раз(а), последний 2020-06-25 14:20:06
карма: 0

0
Ответов: 8886
Рейтинг: 823
#14: 2020-06-25 14:35:59 ЛС | профиль | цитата
Ну, коллеги, создаётся впечатление, что вы или прогуливали арифметику в школе, или являетесь жертвами ЕГ или одно из двух
Gitarist, нарисованная вами "балда" целиком и полностью задаётся значением радиуса
Для решения поставленной ТС задачи в первую очередь надо вычислить положение ДВУХ центров искомой окружности!
Тут несколько путей -- решить систему из двух окружностей по двум точкам пересечения, или найти линию перпендикулярную нашей хорде и на ней искать точки на расстоянии радиуса опять через систему из двух уравнений, или повернуть координаты до параллельности одной из осей хорде, по Пифагору посчитать эти центры окружностей и повернуть координаты в исходное положение.
Когда центры найдены, то нарисовать кусочек окружности не составит труда с любой точностью.
К тому же ТС не рисует, но "фрезерует" и поэтому нужна равномерность, т. е. расчёт точек по углу с выходом на таблицу.
Придётся заняться самому
карма: 19

0
Ответов: 106
Рейтинг: 0
#15: 2020-06-25 15:20:12 ЛС | профиль | цитата
Леонид писал(а):
Тут несколько путей -- решить систему из двух окружностей по двум точкам пересечения, или найти линию перпендикулярную нашей хорде и на ней искать точки на расстоянии радиуса опять через систему из двух уравнений, или повернуть координаты до параллельности одной из осей хорде, по Пифагору посчитать эти центры окружностей и повернуть координаты в исходное положение.


Пожалуй, пойду лучше выйду в окно...
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)