Quantcast
Channel: Adobe Community : Popular Discussions - Illustrator Scripting
Viewing all articles
Browse latest Browse all 12845

Calculer la surface d'un objet

$
0
0

Bonjour, comment faire pour calculer la surface d'un objet dans Illustrator cc 2015 ?
je possède un script conçu par Scriptomedia, qui permet de le faire mais le facteur d'échelle utilisé (ligne 11 > var ech = 30) me donne des résultats erronés.

Or, je travaille à échelle 1/150 dans les faits. Que dois-je faire ou modifier pour obtenir des résultats cohérents ? merci.


Le script ressemble à ceci :

-----------------

// surface6.js

/* Calcule la surface des traces selectionnes et effectue la somme

   en pt2 mm2 m2 et a echelle 1:1 variable ech facteur d'echelle defaut 30

   les variable ard... correspondent au nb de chiffres apres la virgule pour arrondi

   variable er ecart  en + et - pour lequel les mm2 sont arrondis au nombre entier

   affichage sur le plan de travail dans un nouveau calque*/

//INIT------------------------------------

var coulText = macmykColor(25,100,100,25);

var police ="Arial-ItalicMT";

var corps = 12;

var ech = 30;

var ardmm = 2;

var ardm = 6;

var ardp = 3;

var er = 0.1;

//----------------------------------------

if (app.documents.length > 0) {

   var docRef = app.activeDocument;

       docRef.rulerOrigin = [0,0];

   var erreur = 0.05; // % erreur pour le test de surface du cercle

   var Version  = parseInt(version);

   if (parseInt(version) >= 12) {

   var point = UnitValue (1,"Pt");

   var mm = UnitValue (1,"mm");//alert(mm)

   var m = UnitValue (1,"m");

   var pouce = UnitValue (1,"in");

   } else {

      var mm = uniteMesure("mm");//alert(mm)

      var mm1 = uniteMesure("mm")*ech;//alert(mm)

      var pouce = uniteMesure("in");

      var pouce1 = uniteMesure("in")*ech;

      var point = uniteMesure("pt");

      var point1 = uniteMesure("pt")*ech;

      var m = mm*1000;

      var m1 = m*ech;

      }

   var iCount = textFonts.length;

   var numPolice = detectPolice (police,iCount);

   var p; //compteurs

   var aire, smm, spouce, total = 0;

   var liste = initliste();

   var propObjets = new Array();

   var pathes = new Array();

   var selectedItems = selection;

   extractPathes(selectedItems,pathes);

   var endIndex = pathes.length;

   var ObjetName, aire, rayonNul;

       if (endIndex > 0) {

       nouveauLayer = docRef.layers.add();

       nouveauLayer.name = nomLayer("Aire");

         for (p = 0; p < endIndex; p++) {

         rayonNul = false;

           if (propObjet(pathes[p],propObjets)) { //cercle

           aire = propObjets[2][1];

           }

           else aire = propObjets[2][0];

         pointText1(propObjets[0][0],propObjets[0][1],"p "+p,corps,numPolice,coulText);

         Sm   = getArrondi(aire/Math.pow(point*m,2),ardm);

         Sm1  = getArrondi(Sm*ech,ardm);

         Smm  = proche(getArrondi(aire/Math.pow(point*mm,2),ardmm),er);

         Smm1 = proche(getArrondi(Smm*ech,ardmm),er*ech);

         Spouce = getArrondi(aire/Math.pow(point*pouce,2),ardp);

           if (rayonNul) ObjetName = "point isole";

           else {

           ObjetName = pathes[p].name;

           if (ObjetName != "")  ObjetName = ObjetName;

           else ObjetName = "Sans nom";

           }

         liste[0] += p+"\tSurface = "+getArrondi(aire,2)+"\r";

         liste[1] += Smm+"\r";

         liste[2] += Smm1+"\r";

         liste[3] += Sm+"\r";

         liste[4] += Sm1+"\r";

         liste[5] += ObjetName+"\r";

         total += aire;

         }

         afficheTab(20,corps*1.3*(p+6),liste);

             if (endIndex  != 1) {

             Sm   = getArrondi(total/Math.pow(point*m,2),ardm);

             Sm1  = getArrondi(Sm*ech,ardm);

             Smm  = proche(getArrondi(total/Math.pow(point*mm,2),ardmm),er);

             Smm1 = proche(getArrondi(Smm*ech,ardmm),er*ech);

             pointText1(20,corps*1.3*3,"Facteur d'Èchelle "+ech+"\rSurface totale   = "+getArrondi(total,2)+

             " pt2\t\tou "+Smm+" mm2\t\tou  "+Sm+" m2",corps,numPolice,coulText);

             pointText1(20,corps*1.3,"Surface ech 1:1 = "+getArrondi(total*ech,2)+

             " pt2\t\tou "+Smm1+" mm2\t\tou  "+Sm1+" m2",corps,numPolice,coulText);

             }

       } else alert("Au revoir, 1 selection est obligatoire","De Elleere");

} else alert("Pour l'execution de ce sript un document doit etre ouvert !","Script Alerte de Elleere !");

//---------------------------------------------

function proche(v,e)

{

var ar = Math.round(v);

if (Math.abs(v-ar) <= e) return ar;

return v;

}

function afficheTab(x,y,tab)

{

  var dec = 20, gout = 40;

     for (var i = 0; i < tab.length; i++) {

         pointText1(x,y,tab[i],corps,numPolice,coulText);

         var geo = [docRef.pageItems[0].geometricBounds];

         x += geo[0][2]-geo[0][0]+gout;

     }

}

function initliste() {

   return ["Objet de Rang\tpt2\r\r", " mm2\r\r", " 1:1 mm2\r\r", " m2\r\r", " 1:1 m2\r\r", " de nom\r\r"];

}

function propObjet(objetSelect,Cxy)

{ //

  var p1x, p1y, p2x, p2y, surface, aire, marge;

  var largeur, hauteur, Cx, Cy;

  var geo = [objetSelect.geometricBounds];

  p1x = geo[0][0]; p1y = geo[0][1]; p2x = geo[0][2]; p2y = geo[0][3];

  largeur = p2x-p1x;

  hauteur = p1y-p2y;

  if (objetSelect.pathPoints.length <= 2) {

  surface = aire = 0;

  }

  else {

  surface = Math.abs(objetSelect.area);

  aire = Math.PI*Math.pow((largeur+hauteur)/2,2)/4;

  }

  marge = aire*erreur/100;

        if (largeur == 0 && hauteur == 0) rayonNul = true; // rayon nul, point isole

        Cx = (p1x+p2x)/2;

        Cy = (p1y+p2y)/2;

        Cxy[0] = [Cx,Cy];

        Cxy[1] = [largeur,hauteur];

        Cxy[2] = [surface,aire];

        if (surface < aire+marge && surface > aire-marge)

        { // Si l'objet au premier plan est un cercle

        return true;

        }

  return false

}

function detectPolice(chaine,iCount) {

    for (var i = 0; i < iCount; i++) {

           if (police == app.textFonts[i].name) {

           return i;

           }

    }

}

function extractPathes(s,tabs){

  for(var i = 0; i < s.length; i++){

    if(s[i].typename == "PathItem" && !s[i].guides && !s[i].clipping){

      tabs.push(s[i]);

    } else if(s[i].typename == "GroupItem"){

      // Cherche les objets de types dans ce groupe, recursivement

      extractPathes(s[i].pageItems, tabs);

    } else if(s[i].typename == "CompoundPathItem"){

      // Cherche les objets de type PathItem dans ce tracÈ transparent, recursivement

      extractPathes(s[i].pathItems,tabs);

    }

  }

}

function getArrondi(nb,N)

{ //arrondi nb ‡ N chiffres aprËs la virgule

  return Math.round(Math.pow(10,N)*nb)/Math.pow(10,N);

}

function inv(chaine) // fonction recursive

{ // inverse une chaine

if (chaine.length < 2) return chaine

return inv(chaine.substring(1))+chaine.substr(0,1)

}

function macmykColor(c,m,j,k)

{ //cree une nouvelle couleur CMJN

  var cmykColor = new CMYKColor();

  cmykColor.cyan = c;

  cmykColor.magenta = m;

  cmykColor.yellow = j;

  cmykColor.black = k;

  return cmykColor;

}

function nomLayer(nomLayer)

{ // Empeche les noms identiques, retourne le nom suivi d'un indice

      var nom, tnoms = new Array(), exist = false, indice = 0;

         for (k = 0; k < docRef.layers.length; k++) {

           nom = docRef.layers[k].name;

               if (nom.indexOf(nomLayer,0)!= -1) {

               tnoms[indice] = inv(nom);

               indice++;

               }

         }

      tnoms.sort();

      indice = 1; k = 0; nbExist = tnoms.length;

         while ((!exist || k < nbExist) && nbExist != 0) {

            if (parseInt(tnoms[k]) == indice || k > nbExist-1) {

            k = 0;

            indice ++;

            }

            else {

            k++;

            exist = true

            }

         }

      return nomLayer+" "+indice;

}

function pointText1(x,y,text,corps,font,maCouleur)

{// Cree un element de bloc de texte de point

    var pointText = docRef.textFrames.add();

    pointText.contents =text;

    pointText.spacing = 0;

    pointText.position = [x,y];

    if (font != undefined)

    pointText.textRange.characterAttributes.textFont = app.textFonts[font];

    pointText.textRange.characterAttributes.fillColor = maCouleur;

    pointText.textRange.characterAttributes.size = corps;

}

function uniteMesure(monUnite) { // pour la version  CS 11

var uniteMesure = new Array();

uniteMesure[0] = ["cm","in","mm","pc","pt","Q","px"];

uniteMesure[1] = [28.34645,72,2.834645,12,1,0,709,1];

  for (var i = 0; i < uniteMesure[0].length; i++)

   if (uniteMesure[0][i] == monUnite) {

    unite = uniteMesure[1][i];

    continue;

   }

   return unite;

}


Viewing all articles
Browse latest Browse all 12845

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>