Zaokrąglanie rogu w skrypcie g-kodu piko

Dyskusje dotyczące działania obsługi programu PikoCNC
Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 742
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

Zaokrąglanie rogu w skrypcie g-kodu piko

#1

Post napisał: mitek » 29 lis 2012, 09:15

Witam

Mam do zrobienia coś takiego jak na rysunku chciałem napisać do tego skrypt by zautomatyzować ale mam spory problem z przeliczeniem środka okręgu względem wektorów. Dane to końce trzech prostych wektorów nie wiem jak zrobić łuki między 1 i 2 i 2 i 3 wektorem

Obrazek

to taki podstawowy program....

SetG(41); SetR(srednica_freza/2); write;

SetG(0); SetX(X1); SetY(Y); SetZ(10); SetF(Fxy);write;
SetG(1); SetX(X1); SetY(Y); SetZ(-glebokosc); SetF(Fxy);write;

SetG(1); SetX(X1); SetY(Y2); SetZ(-glebokosc); SetF(Fxy); write;
SetG(3); SetX(X1); SetY(Y2); SetR (10); SetZ(-glebokosc); SetF(Fxy); write;
SetG(1); SetX(X1+R1); SetY(Y2-R1); SetZ(-glebokosc); SetF(Fxy); write;

SetG(1); SetX(X2); SetY(Y1); SetZ(-glebokosc); SetF(Fxy); write;
SetG(1); SetX(X); SetY(Y1); SetZ(-glebokosc); SetF(Fxy); write;
SetG(0); SetX(X); SetY(Y1); SetZ(10); SetF(Fxy); write;

Czy sam G kod ma coś co pozwoli rozwązać ten problem?


Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi :-D

Tagi:

Awatar użytkownika

cosimo
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 2
Posty: 569
Rejestracja: 21 maja 2008, 10:02
Lokalizacja: Damasławek

#2

Post napisał: cosimo » 29 lis 2012, 14:06

...ale mam spory problem z przeliczeniem środka okręgu względem wektorów.
Po co liczyć środek skoro można podać „R” ?. Przypuszczam, że problem jest gdzie indziej - nie znasz faktycznych współrzędnych tego ukośnego wektora. Nie wiem czy to wszystko dobrze rozumiem (ten obrazek trochę niewyraźny) ale poniżej mała wariacja (chyba) na ten temat.

Kod: Zaznacz cały

const
Fxy=800; 
srednica_freza=5.0; 
glebokosc=4; 
R=10.0; // R narożnika

//==========================================
var v1,v2,v3,vp1,vp2,vp3:TLine; 
begin

  v1.s.x:=10; v1.s.y:=50;    // wektor 1
  v1.e.x:=10; v1.e.y:=30; 

  V2.s:=v1.e; 
  V2.e.x:=30; V2.e.y:=10;    // wektor 2

  V3.s:=V2.e;                // wektor 3
  V3.e.x:=80; V3.e.y:=V3.s.y; 

  vp1:=LinePar(v1,-R);       // liczymy wektory odsunięte
  vp2:=LinePar(v2,-R); 
  vp3:=LinePar(v3,-R); 

  SetG(41); SetR(srednica_freza/2); write; 

  SetG(0); SetZ(10); write; 
  SetG(0); SetPT(Vp1.s); SetF(Fxy); write; 
  SetG(1); SetZ(-glebokosc); write; 

  SetG(1); SetPT(Vp1.e); write; 
  SetG(3); SetPT(Vp2.s); SetR(R);  write; 
  SetG(1); SetPT(Vp2.e); write; 
  SetG(3); SetPT(Vp3.s); SetR(R);  write; 
  SetG(1); SetPT(Vp3.e); write; 
  SetG(0); SetZ(10); write; 

end.         
Obrazek

Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 2
Posty: 742
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

#3

Post napisał: mitek » 29 lis 2012, 17:11

Niby działa :) jakoś nie mogę pojąć jednak jak to działa :/

Tylko nie wiem dlaczego jak zmieniam R zmienia się cały rysunek a nie tylko zwiększa sam łuk...

Tak by sobie to wyobrazić to po wycięciu będzie z tego blat do kuchni nad szafki w tym szafkę narożną ustawiona pod kątem... Czyli szerokość blatu się nie zmienia a same łuki...

jak dokładnie działa SetPT umieszcza współrzędne dla X i Y ?
Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi :-D

Awatar użytkownika

cosimo
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 2
Posty: 569
Rejestracja: 21 maja 2008, 10:02
Lokalizacja: Damasławek

#4

Post napisał: cosimo » 29 lis 2012, 19:04

jak dokładnie działa SetPT umieszcza współrzędne dla X i Y
Właśnie. Zmienna typy TPoint jest tzw. recordem i składa się z dwóch zmiennych (extendend) „X” i „Y”. A zmienna typu TLine jest recordem składającym się z dwóch zmiennych typu TPoint „s” i „e”, Czyli początek (s) i koniec (e) wektora ;-)
Tylko nie wiem dlaczego jak zmieniam R zmienia się cały rysunek a nie tylko zwiększa sam łuk...
W takim razie taki wariant: (różnica jest w środkowej części)

Kod: Zaznacz cały

const
Fxy=800; 
srednica_freza=5.0; 
glebokosc=4; 
R=15.0; // R narożnika

//==========================================
var v1,v2,v3,vp1,vp2,vp3:TLine; pc:TPoint; 
begin

  v1.s.x:=10; v1.s.y:=80;    // wektor 1
  v1.e.x:=10; v1.e.y:=30; 

  V2.s:=v1.e; 
  V2.e.x:=30; V2.e.y:=10;    // wektor 2

  V3.s:=V2.e;                // wektor 3
  V3.e.x:=80; V3.e.y:=V3.s.y; 

  vp1:=LinePar(v1,R);        // liczymy wektory odsunięte
  vp2:=LinePar(v2,R); 
  vp3:=LinePar(v3,R); 

  LineInt(vp1,vp2,pc);       // punkt przecięcia vp1 vp2
  vp1.e:=pc; vp2.s:=pc; 

  LineInt(vp2,vp3,pc);       // punkt przecięcia vp2 vp3
  vp2.e:=pc; vp3.s:=pc; 

  vp1:=LinePar(vp1,-R);      // przesuwamy ponownie
  vp2:=LinePar(vp2,-R); 
  vp3:=LinePar(vp3,-R); 

  //SetG(41); SetR(srednica_freza/2); write; 

  SetG(0); SetZ(10); write; 
  SetG(0); SetPT(Vp1.s); SetF(Fxy); write; 
  SetG(1); SetZ(-glebokosc); write; 

  SetG(1); SetPT(Vp1.e); write; 
  SetG(3); SetPT(Vp2.s); SetR(R);  write; 
  SetG(1); SetPT(Vp2.e); write; 
  SetG(3); SetPT(Vp3.s); SetR(R);  write; 
  SetG(1); SetPT(Vp3.e); write; 
  SetG(0); SetZ(10); write; 

end.           

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „PikoCNC”