hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


faxinger S
Beiträge: 138
4. Dez 2017, 14:08
Beitrag #1 von 5
Bewertung:
(1543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

graphiclines löschen


Hallo,

wenn ich das folgende Skript ausführe werden mir nicht alle Linien auf einmal gelöscht sondern es bleibt immer eine übrig:
Code
var _doc = app.activeDocument.activeLayer; 
var _linien = _doc.graphicLines;

//.leftLineEnd.ArrowHead.NONE;


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

_linien[k].remove()

};


Außerdem möchte ich nur jene Linien löschen die keine Spitzen oder Dreiecke haben - ist noch auskommentiert.

Habt ihr eine Idee warum nicht alle Linien auf einmal gelöscht werden bzw. wie ich nur die Linien ohne Spitzen löschen kann?
(Dieser Beitrag wurde von faxinger am 4. Dez 2017, 14:10 geändert)
Top
 
X
Martin Fischer  M  p
Beiträge: 11808
4. Dez 2017, 14:39
Beitrag #2 von 5
Beitrag ID: #561166
Bewertung:
(1537 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

graphiclines löschen


Mit Deiner Schleife von vorne nach hinten ändern sich mit jeder gelöschten Linie die Indexe (Indices) der noch zu löschenden Linien: eine weg, dann ist die vormals zweite die erste - die wird aber übersprungen, weil jetzt die zweite dran ist und nicht mehr die erste ....

Kehre die Reihenfolge der Schleife um (von hinten nach vorne) und das Problem sollte gelöst sein.


Du könntest alternativ auch mal Folgendes versuchen (ungetestet):
Code
app.activeDocument.activeLayer.graphicLines.everyItem().remove(); 


Viele Grüße
Martin
als Antwort auf: [#561162] Top
 
faxinger S
Beiträge: 138
4. Dez 2017, 15:01
Beitrag #3 von 5
Beitrag ID: #561171
Bewertung:
(1531 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

graphiclines löschen


Danke Martin,

ja mit evry item funktioniert es wunderbar.

Aber ich möchte nur diese Linien löschen die keine Spitze haben. (kein Dreieck, Kreis etc)

Da muss ich doch noch die graphiclines unterscheiden..
die mit spitze sollen bleiben die ohne gelöscht. Bzw. nur die ohne Spitze löschen.

Aber so wie ich es auskommentiert hatte funktionierte es nicht.
als Antwort auf: [#561166] Top
 
Kai Rübsamen  M  p
Beiträge: 4483
4. Dez 2017, 16:05
Beitrag #4 von 5
Beitrag ID: #561176
Bewertung:
(1512 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

graphiclines löschen


Hallo,

1. "_doc = activeLayer" ist verwirrend. Gewöhn dir solche Namen besser nicht an.
2. Wenn du die Linien unterscheiden willst, brauchst du auch den entsprechenden Befehl dafür und nicht nur die Eigenschaft
3. Martin hat es bereits geschrieben: Wenn du etwas löschen willst, funktioniert vorwärts manchmal, rückwärts aber immer. Daher immer rückwärts nehmen!

Code
// das aktive Dokument 
var curDoc = app.activeDocument;
// die aktive Ebene
var curLayer = curDoc.activeLayer;
// alle Linien auf der aktiven Ebene
var allLinesOnCurLayer = curLayer.graphicLines.everyItem().getElements();

// die Schleife muss rückwärts laufen, da du etwas löschen willst
for (var i = allLinesOnCurLayer.length-1; i >= 0 ; i--) {
var curLine = allLinesOnCurLayer[i];
// prüfen ob die Linie ohne Pfeile ist
if (curLine.leftLineEnd == ArrowHead.NONE) {
curLine.remove();
}
}


Gruß Kai Rübsamen
_______________________
als Antwort auf: [#561171] Top
 
faxinger S
Beiträge: 138
4. Dez 2017, 16:36
Beitrag #5 von 5
Beitrag ID: #561183
Bewertung:
(1504 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

graphiclines löschen


Vielen Dank Kai,

genau dahin wollte ich.

Perfekt.
als Antwort auf: [#561176] Top
 
X