PortaleOrdiniGruppo/PortalStudio/rulersLib.js
2025-03-24 15:28:26 +01:00

372 lines
11 KiB
JavaScript

/*****************************************************************
RulersLib Object:
workunit :
mm millimeters
cm centimeters
pc picas
inch inches
pt points/pixels
@Need: canvasLib.js
@Author: Michel Glele Ahanhanzo - Zucchetti Padova
*****************************************************************/
if (typeof(RulersLib)=='undefined') {
var RulersLib=function(){
this.workunit="mm";
this.wcanvas;
this.font = "sans-serif";
this.fontsize = 8;
this.scale=100;
this.divid="";
this.bdraw=true;
this.parameterObj={};
this.wunit=0;
this.Init=function(id, workunit){
this.divid=id;
this.workunit=workunit;
return this;
}
this.SetDraw=function(bcandraw){
this.bdraw=bcandraw;
}
this.SetScale=function(scale){
this.scale=scale;
}
this.SetWorkUnit=function(wunit){
this.workunit=wunit;
}
this.Draw=function(x1,y1,x2,y2, dim, txt ){
if( x1 == x2 ) //vertical
this.wcanvas.DrawLine( x1 * this.wunit, 0, x2 * this.wunit, dim, true);
else
this.wcanvas.DrawLine( 0, y1 * this.wunit , dim, y2 * this.wunit, true);
if( txt != '')
this.wcanvas.DrawText( this.font, this.fontsize, x1 * this.wunit, 12, this.wunit, 15, txt)
}
this.DrawHorizontal=function(wlen){
// var XX = new Date().getTime();
var wunit = 1;
if(this.workunit == "mm" || this.workunit == "cm")
wunit = 2.834*96/72; //mm to points
if(this.workunit == "px")
wunit = 96/72;
wunit = wunit*this.scale/100;
this.wunit = wunit;
var w = wlen*this.scale/100;
var wz = Round((w/wunit),0);
this.wcanvas = CanvasLib.Init(this.divid,w,25);
this.wcanvas.fillColor = [161,161,161];
this.wcanvas.Clear();
this.wcanvas.alphaChannel=1;
this.wcanvas.scale=this.scale;
if(this.bdraw==false)
return;
var txt="", dim=0;
for(var z=0; z<wz; z++){
dim = 0;
txt = '';
switch( this.workunit ){
case "mm":
case "cm":
if(z%10 == 0){
//scrittura ogni 10
dim = 10;
if(this.workunit == "cm"){
txt = ' '+(z/10);
}else if(this.workunit == "mm"){
txt = ' '+z;
}
}else if(z%5 == 0){ //scrittura ogni 5
dim = 7;
if(this.scale >= 200){
if(this.workunit == "cm"){
txt = ' '+(z/10);
}else if(this.workunit == "mm"){
txt = ' '+z;
}
}else
txt = ''
}else{
dim = 3;
txt = '';
}
if( dim )
this.Draw(z, 0, z, dim, dim, txt);
break;
case "pt":
case "px":
txt = ' '+z;
if(z%50 == 0){
dim = 10;
}
else if(z%25 == 0){
dim = 7;
if(this.scale < 175){
txt = '';
}
}else if(z%5 == 0){
dim = 5;
if(this.scale < 300){
txt = '';
}
}else{
if(this.scale > 200){
dim = 3;
txt = ''
}
}
if( dim )
this.Draw(z, 0, z, dim, dim, txt);
break
case "pc":
case "inch":
if(z%72 == 0){
dim = 10
if(this.workunit == "pc"){
txt = ' '+(z/12);
}else if(this.workunit == "inch"){
txt = ' '+(z/72)
}
}else if(z%36 == 0){
dim = 7;
if(this.scale >= 175){
if(this.workunit == "pc"){
txt = ' '+(z/12);
}else if(this.workunit == "inch"){
txt = ' '+(z/72)
}
}else
dim = 7;
}else if(z%6 == 0){
dim = 5;
if(this.scale >= 300){
if(this.workunit == "pc"){
txt = ' '+(z/12);
}else if(this.workunit == "inch"){
dim = 0;
txt = '';
}
}
else
txt = '';
}else{
if(this.scale > 200)
dim = 3;
}
if( dim )
this.Draw(z, 0, z, dim, dim, txt);
break;
}
}
// console.log(["DH "+(new Date().getTime()-XX)]);
}
this.DrawVertical=function(hlen){
// var log = new Date().getTime();
var wunit=1
if(this.workunit == "mm" || this.workunit == "cm")
wunit = 2.834*96/72 //mm to points
if(this.workunit == "px")
wunit = 96/72
wunit = wunit*this.scale/100;
var h = hlen*this.scale/100;
var wz = Round((h/wunit),0);
this.wcanvas = CanvasLib.Init(this.divid,20,h);
this.wcanvas.fillColor = [161,161,161];
this.wcanvas.Clear();
this.wcanvas.alphaChannel=1;
this.wcanvas.scale=this.scale;
if(this.bdraw==false)
return;
for(var z=0; z<wz; z++){
if(this.workunit == "mm" || this.workunit == "cm"){
if(z%10 == 0){
if(this.workunit == "cm"){
this.wcanvas.DrawLine(0, z*wunit, 10, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/10))
}
else if(this.workunit == "mm"){
this.wcanvas.DrawLine(0, z*wunit, 10, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,z)
}
}
else if(z%5 == 0){
if(this.scale >= 200){
if(this.workunit == "cm"){
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/10))
}
else if(this.workunit == "mm"){
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,z)
}
}
else
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
}
else{
this.wcanvas.DrawLine(0, z*wunit, 5, z*wunit, true);
}
}
else if(this.workunit == "pt" || this.workunit == "px"){
if(z%50 == 0){
this.wcanvas.DrawLine(0, z*wunit, 10, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,z)
}
else if(z%25 == 0){
if(this.scale >= 175){
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,z)
}
else
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
}
else if(z%5 == 0){
if(this.scale >= 300){
this.wcanvas.DrawLine(0, z*wunit, 5, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,z)
}
else
this.wcanvas.DrawLine(0, z*wunit, 5, z*wunit, true);
}
else{
if(this.scale > 200)
this.wcanvas.DrawLine(0, z*wunit, 3, z*wunit, true);
}
}
else{
if(z%72 == 0){
if(this.workunit == "pc"){
this.wcanvas.DrawLine(0, z*wunit, 10, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/12))
}else if(this.workunit == "inch"){
this.wcanvas.DrawLine(0, z*wunit, 10, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/72))
}
}
else if(z%36 == 0){
if(this.scale >= 175){
if(this.workunit == "pc"){
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/12))
}else if(this.workunit == "inch"){
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/72))
}
}
else
this.wcanvas.DrawLine(0, z*wunit, 7, z*wunit, true);
}
else if(z%6 == 0){
if(this.scale >= 300){
if(this.workunit == "pc"){
this.wcanvas.DrawLine(0, z*wunit, 5, z*wunit, true);
this.wcanvas.DrawText(this.font,this.fontsize,7,z*wunit+7,10,wunit,(z/12))
}else if(this.workunit == "inch"){
}
}
else
this.wcanvas.DrawLine(0, z*wunit, 5, z*wunit, true);
}
else{
if(this.scale > 200)
this.wcanvas.DrawLine(0, z*wunit, 3, z*wunit, true);
}
}
}
// console.log(["DV "+(new Date().getTime()-log)]);
}
this.ScrollHorizontal=function(offset){
Ctrl(this.divid).scrollLeft = offset
}
this.ScrollVertical=function(offset){
Ctrl(this.divid).scrollTop = offset
}
this.currRefIdH=''
this.currRefIdV=''
this.AddHorizontalLine=function(divstr, xpos, ypos,item){
//if(!Empty(this.currRefIdH) && this.currRefIdH!=item)
// $$('.RefHLines').dispose()
if(Ctrl(divstr)) Ctrl(this.divid).removeChild(Ctrl(divstr));
if(this.bdraw==false)
return;
var divT=document.createElement("div");
divT.setAttribute("id", divstr);
divT.style.left=xpos+"px"
divT.className='RefHLines'
Ctrl(this.divid).appendChild(divT);
this.currRefIdH=item;
}
this.AddVerticalLine=function(divstr, xpos, ypos, item){
//if(!Empty(this.currRefIdV) && this.currRefIdV!=item)
//$$('.RefVLines').dispose()
if(Ctrl(divstr)) Ctrl(this.divid).removeChild(Ctrl(divstr));
if(this.bdraw==false)
return;
var divT=document.createElement("div");
divT.setAttribute("id", divstr);
divT.style.top=ypos+"px"
divT.className='RefVLines'
Ctrl(this.divid).appendChild(divT);
this.currRefIdV=item;
}
this.EmptyRefLines=function(){
$$('.RefHLines').dispose();
$$('.RefVLines').dispose();
}
}
}
/* SUPPORT FUNCTIONS */
/* exported convertFromPixel */
function convertFromPixel(workunit,ab){
if(workunit=="mm")
return ab/2.834
else if(workunit=="cm")
return ab/28.34
else if(workunit=="pc")
return ab/12;
else if(workunit=="inch")
return ab/72;
else
return ab;
}
/* exported convertToPixel */
function convertToPixel(workunit,ab){
if(workunit=="mm")
return ab*2.834
else if(workunit=="cm")
return ab*28.34
else if(workunit=="pc")
return ab*12;
else if(workunit=="inch")
return ab*72;
else
return ab;
}