Patrick a écrit : ↑02 avr. 2019, 08:23
Fait nous voir comment tu as configuré les commandes de ton virtuel, et la liste de tes zones.
Ce sera plus facile pour t'aider...
Mise à jour : mon aspirateur se lance bien , fait 20 cm , ne m'indique pas la zone ciblée sur l'appli ... faut que je teste avec une zone plus proche
Ca m'embête de faire mon assister , et j'aimerai comprendre mon erreur certainement tout c***e
# Script Rotation carte / zones aspirateur
# zones cleanup
$coordonnees = array();
$coordonnees['R2D2_Cellier'][] = "23863,18371,26463,20871,1";
# NE PAS SUPPRIMER CI DESSOUS
# récupération des paramètres du virtuel aspi
# roration relative de la carte
$cmd = cmd::byString("#[Maison][aspirateurvirtuel][roration_map]#");
$rotation = $cmd->execCmd();
# centre x de la carte
$cmd = cmd::byString("#[Maison][aspirateurvirtuel][centre_x]#");
$centre_x = $cmd->execCmd();
# centre y de la carte
$cmd = cmd::byString("#[Maison][aspirateurvirtuel][centre_y]#");
$centre_y = $cmd->execCmd();
$centre = array($centre_x,$centre_y); #cnetre x y de la carte (25000,25000)
function rorate($x,$y, $angle,$centre) (
if($angle == 0)
{
# ajustement facultatif du centre par défaut en cas de lèger déplacement de la base
$x = $x - 80;
$y = $y - 80;
return array($x,$y);
}
$angle *= M_PI / 180;
$xM = $x - $centre[0];
$yM = $y - $centre[1];
$x = $xM * cos($angle) + $yM * sin($angle) + $centre[0];
$y = - $xM * sin($angle) + $yM * cos($angle) + $centre[1];
return array(round($x), round($y));
function generer($coordonnees,$quoi,$roration,$centre)
{
if( count($coordonnees[$quoi])<1 ) return "AUCUN";
$zonedef=array();
foreach($coordonnees[$quoi] as $lazone)
{ #pour chaque zone
$zone=explode(',', $lazone);
$coord=array());
list( $xa , $ya ) = rotate($zone[0],$zone[1],$rotation,$centre); #renvoi position debut array(x,y)
if( $zone[2] > 0 )
{ #clean zone
list( $xb , $yb ) = rotate($zone[2],$zone[3],$rotation,$centre); #renvoi position fin array(x,y)
if( $xa < $xb )
{
$coord[0] = $xa;
$coord[1] = 0;
$coord[2] = $xb;
}
else{
$coord[0] = $xb;
$coord[1] = 0;
$coord[2] = $xa;
}
if( $ya < $yb )
{
$coord[1] = $ya;
$coord[3] = $yb;
}
else{
$coord[1] = $yb;
$coord[3] = $ya;
}
$coord[4]=$zone[4];
$zonedef[]='['.implode(',',$coord).']';
}
else{ #go there
$zonedef[] = $xa . "," . $ya;
}
}
return implode(',',$zonedef);
}
$cmd = cmd::byString("#[Maison][aspirateurvirtuel][Ordre]#");
$job = $cmd->execCmd(); #contient le nom de la zone ou position demandée voir début tableau
#on genere les coordonées corrigées:
$newpos = generer($coordonnees,$job,$roration,$centre)
;
#on sauve les coordonnées dans le virtuel :
$cmd = cmd::byString("#[Maison][aspirateurvirtuel][coordonnees]#");
$cmd->event($newpos);
#fin script