Avatar billede triggy Nybegynder
27. juli 2006 - 10:54 Der er 12 kommentarer og
1 løsning

tegne en streg

Jeg sidder med en lidt utraditionel problemstilling.

Jeg har et baggrundskort, hvorpå der dynamisk skal indtegnes nogle markeringer.
Markeringerne skal bestå af en streg (4-5px tyk) fra et defineret punkt til et andet.
Punkterne bliver defineret som x/y pixel koordinater i forhold til billedet.

Egentligt kunne jeg løse dette, med ASP-image komponenten. Men problemet ligger i at billedet ikke må reloades.

Kan det lade sig gøre med javascript, evt. at oprette et nyt lag, og tegne en streg fra et punkt til et andet ?

Kan godt være det er lidt kryptisk forklaret. spørg hvis i ikke forstår hvad jeg mener.
Avatar billede roenving Novice
27. juli 2006 - 10:57 #1
Kun hvis de er lodrette/vandrette ...

(Nå, jah, tjah, man kunne vel generere dem som en masse punkter !-)
Avatar billede triggy Nybegynder
27. juli 2006 - 11:01 #2
ja, hvis det var lodret/vandret, kunne det laves meget enkelt med nogle tabeller og css.
men da det er et kort, er der mange forskellige vinkler.
I databasen bliver der fastdefineret placeringer på x antal punkter, og det er via 2 af disse punkter, jeg vil kunne tengne en streg, som en markering af at området er optaget.
Avatar billede roenving Novice
27. juli 2006 - 11:22 #3
F.eks.

<script type="text/javascript">
function tegnStreg(startX,startY,slutX,slutY){
  var par = document.getElementById("minDiv");
  var rangeX = slutX - startX;
  var rangeY = slutY - startY;
  for(i=startX;slutX>i;i++){
    actY = i*rangeY/rangeX + startY;
    var nyPrik = document.createElement("div");
    par.appendChild(nyPrik);
    nyPrik.className = "prik";
    nyPrik.style.left = startX + i + "px";
    nyPrik.style.top = actY + "px";
  }
}
</script>
<div id="minDiv" style="position:relative;"><img src="http://www.eksperten.dk/img/elogo.png" style="height:300px;"></div>
<span id="minSpan" onclick="tegnStreg(10,10,200,100);" style="curcor:pointer;">Tegn streg fra 10,10 til 200,100</span>

Klassen prik har så disse egenskaber:

.prik{background-color:black;line-height:0;font-size:0px;width:1px;height:1px;position:absolute;}

-- men bemærk, at det er en meget rå måde at gøre det på, f.eks. vil en næsten lodret streg næsten ikke blive vist (men det kan der da kompenseres for !-)
Avatar billede roenving Novice
27. juli 2006 - 11:29 #4
Sådan bliver stregerne rimelige under alle omstændigheder:

<script type="text/javascript">
function tegnStreg(startX,startY,slutX,slutY){
  var par = document.getElementById("minDiv"), nyPrik;
  var rangeX = slutX - startX;
  var rangeY = slutY - startY;
  if(rangeX>rangeY){
    for(i=startX;slutX>i;i++){
      actY = i*rangeY/rangeX + startY;
      nyPrik = document.createElement("div");
      par.appendChild(nyPrik);
      nyPrik.className = "prik";
      nyPrik.style.left = startX + i + "px";
      nyPrik.style.top = actY + "px";
    }
  }else{
    for(i=startY;slutY>i;i++){
      actX = i*rangeX/rangeY + startX;
      nyPrik = document.createElement("div");
      par.appendChild(nyPrik);
      nyPrik.className = "prik";
      nyPrik.style.top = startY + i + "px";
      nyPrik.style.left = actX + "px";
    }
  }
}
</script>
Avatar billede triggy Nybegynder
27. juli 2006 - 11:58 #5
jeg kan godt følge ideen, men det giver jo voldsomt mange div'er, hvordan sletter jeg så en streg igen ?

Sidder i øjeblikket og kigger på en løsning, jeg skal se om jeg kan få pillet lidt fra hinanden

http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm
Avatar billede triggy Nybegynder
27. juli 2006 - 12:01 #6
jeg kan dog se, at den gør lidt det samme som du har beskrevet
Avatar billede roenving Novice
27. juli 2006 - 12:08 #7
Tjah, han gør jo det samme, men bare ikke med DOM-behandling af elementerne . . .
Avatar billede roenving Novice
27. juli 2006 - 12:11 #8
Hvis du vil slette en streg, kan du give den et unikt klassenavn også:

Allerførst lige efter script-tagget:

var num = 0;

-- og i funktionen:

      nyPrik.className = "prik num" + num;
      num++

-- så kan du finde dem ved at teste for om className indeholder num0, num1 osv. ud fra et array fra document.getElementsByTagName("div");
Avatar billede triggy Nybegynder
27. juli 2006 - 12:17 #9
ok... mangler bare 1 ting, så er din løsning perfekt...

Skal have mulighed for at definere tykkelsen på stregen
Avatar billede roenving Novice
27. juli 2006 - 12:21 #10
Hvis du f.eks. vil have den 2px tyk ændrer du bare størrelsen i klassen, skal den være 3 eller tykkere, skal du også fratrække den ekstra størrelse i placeringen !-)
Avatar billede triggy Nybegynder
27. juli 2006 - 12:25 #11
selvfølgelig ;)

Det er simpelthen lige i skabet...  Mange tak
smider du et svar ?
Avatar billede roenving Novice
27. juli 2006 - 12:38 #12
Velbekomme '-)
Avatar billede roenving Novice
28. juli 2006 - 15:31 #13
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester