Ich habe für meine Druckerklasse (ohne XBTools !) eine Funktion geschrieben, die die Drehung der Schrift in 1° Schritten berechnet, zuerst der Aufruf:
nDrehen ist in ° ... statt dem Array kann man natürlich auch cos() und sin() aus den Tools verwenden.
Code: Alles auswählen
*----------------------------------------------------------
function HbGradToXppArray(nDrehen,nFaktor)
local nX, nY, aCosSin, nDrehenInt
DEFAULT nFaktor TO 1 // Werte zwischen -1 und 1, für Ausgabe in Bildpunkten sind diese Werte zu klein
// über Faktor kann die Länge bestimmt werden: 1 = 1/10mm, 10 = 1 mm etc.
// Valuerange is -1 to 1, for printtext etc. are the values to low
// the length could be defined with nFaktor: 1 = 1/10mm, 10 = 1 mm etc.
aCosSin := { {1.0000000000000000,0.0000000000000000} , ; // 0 Grad -> nDrehenInt+1 -> 1. Element
{0.9998476951563913,0.0174524064372835} , ; // 1 Grad -> nDrehenInt+1 -> 2. Element
{0.9993908270190958,0.0348994967025010} , ;
{0.9986295347545739,0.0523359562429438} , ;
{0.9975640502598243,0.0697564737441253} , ;
{0.9961946980917455,0.0871557427476582} , ; // Falls jemand eine bessere Funktion weiß, bitte mitteilen.
{0.9945218953682733,0.1045284632676535} , ; // if someone knows a better (fast) way, let me know.
{0.9925461516413220,0.1218693434051475} , ;
{0.9902680687415704,0.1391731009600654} , ;
{0.9876883405951378,0.1564344650402309} , ;
{0.9848077530122080,0.1736481776669303} , ;
{0.9816271834476640,0.1908089953765448} , ;
{0.9781476007338058,0.2079116908177593} , ;
{0.9743700647852353,0.2249510543438650} , ;
{0.9702957262759965,0.2419218955996677} , ;
{0.9659258262890683,0.2588190451025208} , ;
{0.9612616959383189,0.2756373558169992} , ;
{0.9563047559630355,0.2923717047227367} , ;
{0.9510565162951535,0.3090169943749474} , ;
{0.9455185755993169,0.3255681544571567} , ;
{0.9396926207859084,0.3420201433256687} , ;
{0.9335804264972018,0.3583679495453003} , ;
{0.9271838545667874,0.3746065934159120} , ;
{0.9205048534524404,0.3907311284892738} , ;
{0.9135454576426009,0.4067366430758001} , ;
{0.9063077870366499,0.4226182617406994} , ;
{0.8987940462991670,0.4383711467890774} , ;
{0.8910065241883679,0.4539904997395468} , ;
{0.8829475928589270,0.4694715627858908} , ;
{0.8746197071393958,0.4848096202463371} , ;
{0.8660254037844388,0.4999999999999999} , ;
{0.8571673007021124,0.5150380749100541} , ;
{0.8480480961564260,0.5299192642332049} , ;
{0.8386705679454240,0.5446390350150271} , ;
{0.8290375725550418,0.5591929034707468} , ;
{0.8191520442889918,0.5735764363510460} , ;
{0.8090169943749475,0.5877852522924731} , ;
{0.7986355100472929,0.6018150231520483} , ;
{0.7880107536067219,0.6156614753256583} , ;
{0.7771459614569709,0.6293203910498374} , ;
{0.7660444431189780,0.6427876096865393} , ;
{0.7547095802227720,0.6560590289905073} , ;
{0.7431448254773943,0.6691306063588583} , ;
{0.7313537016191706,0.6819983600624985} , ;
{0.7193398003386513,0.6946583704589973} , ;
{0.7071067811865476,0.7071067811865475} , ;
{0.6946583704589973,0.7193398003386511} , ;
{0.6819983600624985,0.7313537016191705} , ;
{0.6691306063588583,0.7431448254773941} , ;
{0.6560590289905073,0.7547095802227720} , ;
{0.6427876096865394,0.7660444431189780} , ;
{0.6293203910498375,0.7771459614569709} , ;
{0.6156614753256583,0.7880107536067219} , ;
{0.6018150231520484,0.7986355100472929} , ;
{0.5877852522924731,0.8090169943749475} , ;
{0.5735764363510461,0.8191520442889918} , ;
{0.5591929034707468,0.8290375725550418} , ;
{0.5446390350150272,0.8386705679454240} , ;
{0.5299192642332049,0.8480480961564260} , ;
{0.5150380749100544,0.8571673007021123} , ;
{0.5000000000000001,0.8660254037844386} , ;
{0.4848096202463371,0.8746197071393958} , ;
{0.4694715627858909,0.8829475928589269} , ;
{0.4539904997395468,0.8910065241883678} , ;
{0.4383711467890774,0.8987940462991670} , ;
{0.4226182617406994,0.9063077870366499} , ;
{0.4067366430758002,0.9135454576426009} , ;
{0.3907311284892737,0.9205048534524404} , ;
{0.3746065934159122,0.9271838545667874} , ;
{0.3583679495453004,0.9335804264972018} , ;
{0.3420201433256688,0.9396926207859084} , ;
{0.3255681544571568,0.9455185755993168} , ;
{0.3090169943749474,0.9510565162951535} , ;
{0.2923717047227368,0.9563047559630354} , ;
{0.2756373558169992,0.9612616959383189} , ;
{0.2588190451025208,0.9659258262890683} , ;
{0.2419218955996677,0.9702957262759965} , ;
{0.2249510543438652,0.9743700647852353} , ;
{0.2079116908177595,0.9781476007338056} , ;
{0.1908089953765449,0.9816271834476640} , ;
{0.1736481776669304,0.9848077530122080} , ;
{0.1564344650402309,0.9876883405951378} , ;
{0.1391731009600655,0.9902680687415704} , ;
{0.1218693434051475,0.9925461516413220} , ;
{0.1045284632676535,0.9945218953682733} , ;
{0.0871557427476581,0.9961946980917455} , ;
{0.0697564737441255,0.9975640502598243} , ;
{0.0523359562429440,0.9986295347545739} , ;
{0.0348994967025011,0.9993908270190958} , ;
{0.0174524064372836,0.9998476951563913} , ;
{0.0000000000000000,1.0000000000000000} }
nDrehenInt := int(nDrehen) // 23.123 -> aCosSin[23, X/Y ]
do case
case nDrehenInt >= 0 .and. nDrehenInt <= 90
nX := aCosSin[nDrehenInt+1,1]
nY := aCosSin[nDrehenInt+1,2]
case nDrehenInt > 90 .and. nDrehenInt <=180
nDrehenInt := 180-nDrehenInt
nX := aCosSin[nDrehenInt+1,1] * -1
nY := aCosSin[nDrehenInt+1,2]
case nDrehenInt > 180 .and. nDrehenInt<=270
nDrehenInt -= 180
nX := aCosSin[nDrehenInt+1,1] * -1
nY := aCosSin[nDrehenInt+1,2] * -1
case nDrehenInt > 270 .and. nDrehenInt<=360
nDrehenInt := 360-nDrehenInt
nX := aCosSin[nDrehenInt+1,1]
nY := aCosSin[nDrehenInt+1,2] * -1
endcase
return {nX*nFaktor,nY*nFaktor}