Hallo!!!!
Kann mir jemand sagen ob und wie ich ein Polygonthema mit einem Linienthema verschneiden kann?
Kann mir jemand sagen ob und wie ich ein Polygonthema mit einem Linienthema verschneiden kann?
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Uwe Meer am Fr., 28.11.2003 - 16:42
Permalinkeine 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
Gespeichert von Maxilla am Fr., 28.11.2003 - 20:30
PermalinkFalls 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
Gespeichert von Silke am Mo., 01.12.2003 - 11:18
PermalinkDas 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