Polygonthema mit Linienthema verschneiden

Hallo!!!!

Kann mir jemand sagen ob und wie ich ein Polygonthema mit einem Linienthema verschneiden kann?
HiHo Silke,

eine Verschneidung wird aufgrund der Datenablage für Polygone bzw. Linien nicht möglich sein.
Warum eigentlich dies? Ich denke es wird für die Fragestellung eine andere Lösung geben.

Cu

Uwe
Hallo Silke, hallo Uwe,

Falls mit 'Verschneiden' einfach nur 'Schneiden' gemeint ist (also eine geometrische Verschneidung), geht das schon. Der einfache, auch vom 'Split Polygon'- Tool benutzte Befehl dazu lautet:

anFTheme.Split (aLine)

Ein Skript, um mit diesem Befehl ein Polygonthema mit einem Linienthema zu schneiden, ist auch mit ein bissl Fehlecheck so kurz, dass ichs hier mal hinkopiere:


'------------------------------------------------------------
' VIEW UND THEMEN NEHMEN (SCHÖN SORTIERT)

theView = av.GetActiveDoc
theThemes = theView.getThemes

theLineThemes = List.Make
thePolygonThemes = List.Make

for each thm in theThemes
if (thm.is(FTheme)) then
theTab = thm.GetFTab
theCN = theTab.GetShapeClass.GetClassName
if (theCN = "Polyline") then
theLineThemes.Add(thm)
elseif (theCN = "Polygon") then
thePolygonThemes.Add(thm)
end
end
end

'------------------------------------------------------------
'VORHRIGE BEARBEITUNG BEENDEN

editThm = theView.GetEditableTheme

for each rThm in theThemes
if (editThm = rThm) then
doSave = MsgBox.YesNoCancel("Bearbeitung speichern unter "+
"'"+editThm.GetName+"'?"," Vorherige Bearbeitung beenden",true)
if (doSave = nil) then
return nil
end
if (editThm.StopEditing(doSave).Not) then
MsgBox.Info("Kann nicht speichern : ''" + editThm.GetName +"''. "+
"'Speichern unter...' Option benutzen.", "")
return nil
else
theView.SetEditableTheme(NIL)
end
end
end

'------------------------------------------------------------
' NUTZER FRAGEN WER HIER WEN SCHNEIDEN SOLL

theView.getDisplay.flush

theGonTheme = Msgbox.ListAsString(thePolygonThemes,"Waehlen Sie das Polygonthema aus, "+
"dass geschnitten werden soll:"," POLYGON")

if ((theGonTheme = NIL)) then
av.ShowMsg("llll llll llll llll llll llll llll llll BREAKUP ...")
return NIL
end

theView.getDisplay.flush

theLinTheme = Msgbox.ListAsString(theLineThemes,"Waehlen Sie das Linienthema aus, dass "+
"'"+theGonTheme.getName+"' schneiden soll"," POLYLINE")

if ((theLinTheme = NIL)) then
av.ShowMsg("llll llll llll llll llll llll llll llll BREAKUP ...")
return NIL
end

'------------------------------------------------------------
' TABELLEN NEHMEN, SHAPEFELD DES LINIENTHEMAS WIRD AUCH GEBRAUCHT

theGonFTab = theGonTheme.getFTab
theLinFTab = theLinTheme.getFTab

theLinShapeField = theLinFTab.FindField("Shape")
numRecs = theLinFTab.GetNumRecords

'------------------------------------------------------------
' POLYGONTHEMA EDITIERBAR SETZEN UND AUSFÜHREN

theView.SetEditableTheme(theGonTheme)

i = 0
for each rec in theLinFTab

progress = (i/numRecs)*100
av.ShowMsg("Schneide...")
goesAhead = av.SetStatus(progress)
if (not goesAhead) then break end

aShape = theLinFTab.ReturnValue(theLinShapeField, rec)
theGonTheme.Split(aShape)
theGonFTab.EndTransaction
i = i + 1
end

av.SetStatus(100)
av.ClearMsg
theView.invalidate
av.GetProject.SetModified(true)
av.ShowMsg("llll llll llll llll llll llll llll llll Schon fertig :o)")

'------------------------------------------------------------
' THE END



Falls ( f a l l s ! ) nicht gewusst: Alles kursive in ein neues Skript-Fenster kopieren, kompilieren (Häkchen klicken), View aktivieren, wieder Skript aktivieren und ausführen (--> Laufmännchen).
... und vor Gebrauch schütteln. - Oder testen.

Gruß von Maxilla
Hallo Maxilla!

Das ist genau das was ich brauche. Mit Deinem Skript habe ich eine große Fläche in
3,5 m x 3,5 m große Quadrate zerlegt. Das Skript hat super funktioniert!!! Danke