Programmieren mit Avenue um Linien zu aufzuteilen

Hallo, ich möchte mit Arc View Linien in einzelne Segmente unterteilen, die alle gleich lang sind. Nun ist im Arc View Kochbuch ein Script abgebildet, dass man dazu benutzten kann in einer hoplahopp Aktion habe ich dann versucht mir schnell mal die Grundlagen von Avenue anzueignen und das Programm geschrieben. Nun wollte ich das Script ausführen (dabei war das entsprechende View und das entsprechende Thema geöffnet) und dabei wurden folgende Laufzeitfehler gemeldet:

Das Projekt kann die Anforderung findtheme nicht erkennen

und dann gabs noch probleme mit getftab.

Was hab ich falsch gemacht?
Hallo,

kannst du bitte mal das Scipt posten,
damit man auch sieht was du eventuell falsch gemacht hast?
So ohne, ist das wirklich schwer zu beurteilen :-)

Gruß
Bernd
Das Projekt kann die Anforderung findtheme nicht erkennen

Glaube, das ist eindeutig: Du hast das Skript auf das Projektfenster angewendet! Tue folgendes:

- Öffne das Skript-Fenster
- Öffne das View Fenster
- Stelle die Fenster so nebeneinander, dass du beide sehen kannst
- Aktiviere das Viewfenster
- Aktiviere von dort aus direkt das Skriptfenster
- Jetzt drücke "Ausführen"...
Danke für Eure flotten Antworten es hat geklappt.
Weiß jemand wohin man solche skripte zur allgemeinen Verfügbarkeit stellen kann?

Script zum erstellen einer Polyline_M und zum Teilen dieser in gleichgroße Segmente mit einer gewünschten Länge

Skript 1

Polyline_M

Text:

aktives_view = av.getActiveDoc
auswahl_thema = aktives_view.findtheme("Nebelbachkanal.shp")
if (auswahl_thema = nil) then exit end
auswahl_thema_dat = auswahl_thema.getftab
sh = auswahl_thema_dat.findfield("shape")
id =auswahl_thema_dat.findfield("ID")
neues_thema = aktives_view.findtheme("Nebelbachkanal_M.shp")
if (neues_thema = nil)
then
neuer_name = "Nebelbachkanal_M.shp".asFileName
neues_thema_dat = FTab.MakeNew(Neuer_name,PolylineM)
neues_thema_dat.AddFields({Field.Make("ID",#FIELD_DECIMAL,6,0)})
M_shape = neues_thema_dat.FindField("shape")
neue_id = neues_thema_dat.FindField("ID")
neues_thema_dat.SetEditable(True)
for each satz in auswahl_thema_dat
pliste = auswahl_thema_dat.ReturnValue(sh,satz).asmultipoint.aslist
m_id = auswahl_thema_dat.ReturnValue(id,satz)
liste_MPunkte = {}
for each punkt in pliste
m = punkt@0
liste_MPunkte.add(m)
end
neue_PolyLineM = PolyLineM.Make({liste_MPunkte})
Rec = neues_thema_dat.AddRecord
neues_thema_dat.SetValue(M_shape,Rec,neue_PolyLineM)
neues_thema_dat.SetValue(neue_id,Rec,m_id)
end
neues_thema_dat.SetEditable(False)
neues_thema = FTheme.Make(neues_thema_dat)
aktives_view.AddTheme(neues_thema)
end
neues_thema.SetVisible(TRUE)
neues_thema.SetActive(TRUE)
r = rect.makeempty
r = r.unionwith(neues_thema.returnextent)
aktives_view.getdisplay.setextent(r.scale(1.1))
menue_liste = {"1 gleichmäßige Teilung","2 Längenvorgabe","0 Ende"}
menue=msgbox.choiceasstring(menue_liste,"Auswahl : ","Wie geht es weiter?").aslist
if(menue.get(0) = "0")then exit end
if(menue.get(0) = "1")
then
av.run("teilung","")
else
av.run("vorgabe","")
end




Skript 2

Vorgabe

Text:


aktives_view = av.getActiveDoc
auswahl_thema = aktives_view.findtheme("Nebelbachkanal_M.shp")
auswahl_thema_dat = auswahl_thema.getftab
sh = auswahl_thema_dat.findfield("shape")
id = auswahl_thema_dat.findfield("ID")
if(auswahl_thema = nil) then exit end
frage="Wie lang sollen die Teilabschnitte sein?"
eing=msgbox.input(frage,"Eingabe","0")
if((eing="0")or(eing=nil))then exit end
neuer_name = "Nebelbachkanalabschn.shp".asFileName
neues_thema_dat = FTab.MakeNew(Neuer_name,PolylineM)
neues_thema_dat.Addfields({Field.Make("ID",#FIELD_DECIMAL,6,0)})
M_shape = neues_thema_dat.FindField("shape")
neue_id = neues_thema_dat.FindField("ID")
neues_thema_dat.SetEditable(True)
t_lang=eing.asnumber
for each satz in auswahl_thema_dat
polyM_Line = auswahl_thema_dat.ReturnValue(sh,satz)
polyM_Line.SetMASLength
m_id = auswahl_thema_dat.ReturnValue(id,satz)
lang=polyM_Line.returnlength
anz=(lang/t_lang + 0.5).round
von=0
bis=t_lang
for each t in 1..anz
liste_MPunkte=polyM_Line.lineEvent(von,bis,0).asmultipoint.aslist
neue_PolyLineM = PolyLineM.Make({liste_MPunkte})
Rec = neues_thema_dat.AddRecord
neues_thema_dat.SetValue(M_shape,Rec,neue_PolyLineM)
neues_thema_dat.SetValue(neue_id,Rec,m_id)
von=bis
if((von+t_lang) > lang)
then
bis=lang
else
bis=t_lang * (t+1)
end
end 'ende der iterativen schleife alle teilstücke
end 'ende der iterativen schleife alle polylines
neues_thema_dat.SetEditable(False)
neues_thema = FTheme.Make(neues_thema_dat)
aktives_view.Addtheme(neues_thema)
neues_thema.setactive(true)
neues_thema.setvisible(true)
auswahl_thema.setactive(false)
auswahl_thema.setvisible(false)
Hallo Joerg,

> Weiß jemand wohin man solche skripte zur allgemeinen Verfügbarkeit stellen kann?

Du kannst deine Skripte zu einer Erweiterung bündeln (meineTools.avx). Die resultierende AVX-Datei müsste dann zentral abgelegt werden und für jeden Nutzer müsste die Datei default.apr um eine Funktion zum Laden der Erweiterung ergänzt werden. Danach kannst du die Erweiterung weiter zentral pflegen.

Gruß

Uwe
Danke Uwe
Hallo Jörg,
Deine Skripte würde ich gern verwenden, nur läuft das so nicht.Bei mir ein Streckenwirrwarr, was man kaum verwenden kann.
Den Shapenamen habe ich angepaßt, aber welches Skript heißt jetzt "teilung" und welches "vorgabe"? Was muß in der Spalte ID stehen? Was könnte ich sonst falsch machen?

Dank+Gruß
gisi