Beispiel-PlugIns |
Home Zurück Weiter |
Beispiel 1: Fachschale Versiegelung (Auszug aus der Programmierung) In der Fachschale Versiegelung ist standardmäßig eingestellt, dass beim Öffnen der Hauptkarteikarte keine Karteikartenfunktionen ausgeführt werden sollen (Schalter NoStartUpdate in der Tabelle Application der *.gcf-Datei). Falls sich jedoch die Flächengrößen der Versiegelungsflächen geändert haben sollten, soll doch neu berechnet werden:
Imports GeoAS Imports GeoAS.Developer.PlugIn Imports GeoAS.Developer
Public Class VersiegelungPlugIn Implements GeoAS.Developer.PlugIn.IPlugIn
Private WithEvents mKarteiBL As IKarteiBL Private mGIS As Gis.IGisData
Public Sub InitializeKarteiBL(ByVal karteiBL As IKarteiBL) _ Implements IPlugIn.InitializeKarteiBL mKarteiBL = karteiBL mGIS = karteiBL.GetGis End Sub
Private Sub DisableNoDialogOpenUpdate(ByRef disable As Boolean) _ Handles mKarteiBL.DisableNoDialogOpenUpdate
'Checken ob sich Versiegelungsflächengößen geändert haben disable = False Dim selWahl As String 'ehemals Wahl2 'fragt, wie die aktuelle Auswahl aus Versiegelungsflächen intern gerade heißt: selWahl = mKarteiBL.GetSelectionNameFromBaseTable("Versiegelungsflächen") _ Dim i, anz As Integer Dim komFetch As String = "fetch rec {0} from " & selWahl Dim komEval As String = "round(CartesianArea({0}.obj, _ {1}sq m{1}),0.01) {2} {0}.Fläche" Dim kom As String anz = mGIS.TableInfo(selWahl, Gis.IGis.TabInfo.NROWS) For i = 1 To anz kom = String.Format(komFetch, i) ' entspricht fetch rec i from selWahl mGIS.MIdo(kom) ' führt Befehl in MapInfo aus kom = String.Format(komEval, selWahl, Chr(34), "<>") ' entspricht 'round(CartesianArea(selWahl.obj,"sq m"),0.01)<>selWahl.Fläche If mGIS.MIeval(kom) = "T" Then ' führt Flächenvergleich durch disable = True ' schaltet Karteikartenaktualisierung an '(bzw. "disable" derselben aus), wenn mind. 1 Fläche Return ' aktualisiert werden muss End If Next End Sub … … End Class
Beispiel 2: Fachschale Anlagevermögen Beim Öffnen der Karteikarte wird geprüft, ob irgendwo die Fläche = 0 ist. Für diese (offensichtlich neu übernommenen) Flurstücke werden diverse Spalten aus Flurbuch und Abschnitt gefüllt. Außerdem werden alle Gebäude auf dem Flurstück als neue Objekte in die Untertabelle AV_Gebäude eingefügt.
Imports GeoAS Imports GeoAS.Developer Imports GeoAS.Developer.PlugIn
Public Class AnlagevermögenPlugIn Implements GeoAS.Developer.PlugIn.IPlugIn
Private WithEvents mKarteiBL As IKarteiBL Private mGIS As Gis.IGisData
Public Sub InitializeKarteiBL(ByVal karteiBL As IKarteiBL) Implements _ IPlugIn.InitializeKarteiBL mKarteiBL = karteiBL mGIS = karteiBL.GetGis End Sub
Private Sub AfterDialogOpen() Handles mKarteiBL.AfterDialogOpen If mKarteiBL.GetDialogInfo.ID = 1 Then
Dim selWahl, ind As String Dim tmpFlst As String = "tmpFlst" Dim kom As String Dim exMsg As String = Nothing Dim abschreibZeit As String = "30" 'Defaultwert Dim i As Integer
Dim dtFlst, dtAbsch, dtBuch As DataTable Dim dr As DataRow Try 'Name der aktuellen Auswahl ermitteln selWahl = mKarteiBL.GetSelectionNameFromBaseTable("AV_Flurstück") mGIS.CreateTempTable(selWahl, tmpFlst, "Fläche", "0", True) Dim colList(6) As String colList(0) = "index1" colList(1) = "Gemarkung" colList(2) = "Flur" colList(3) = "Flurstück" colList(4) = "Lagebezeichnung" colList(5) = "Fläche" colList(6) = "Nutzung"
dtFlst = mGIS.GetDataTable(tmpFlst, colList) 'DataTable - unter Umständen schneller, als für jedes Flst einzeln
For Each dr In dtFlst.Rows ind = dr.Item(colList(0)) mGIS.CreateTempTable("Flurbuch", "tmpBuch", colList(0), ind, True) mGIS.CreateTempTable("Abschnitt", "tmpAbschnitt", colList(0), ind, True) dtBuch = mGIS.GetDataTable("tmpBuch") 'DataTable - evtl. schneller als 5 mal im GIS einen Wert holen dtAbsch = mGIS.GetDataTable("tmpAbschnitt")
If dtBuch.Rows.Count > 0 Then For i = 1 To 5 'Gemarkung, Flur, Flurstück, Lagebezeichnung, Fläche dr.Item(colList(i)) = dtBuch.Rows(0).Item(colList(i)) Next End If If dtAbsch.Rows.Count > 0 Then dr.Item(colList(6)) = dtAbsch.Rows(0).Item("Nutzungsart") End If
'---Gebäude auswählen und einfügen '---Standardwert für Abschreibungszeitraum muss eingetragen werden, '---da sonst Division durch 0 beim Karteikarte aktualisieren
kom = "Select * from Gebäude,Flurstücke where Gebäude.Obj within Flurstücke.Obj " _ & "and index1 = """ & ind & """ into tmpGebäude noselect" mGIS.MIdo(kom) kom = "insert into AV_Gebäude (index1,Beschreibung,Grundfläche,Abschreibungszeitraum) " _ & "select index1,Text,CartesianArea(obj,""sq m"")," & abschreibZeit & " from tmpGebäude" mGIS.RunUpdateCommand("Av_Gebäude", kom, True)
Next 'Speichern mGIS.SetDataTable(dtFlst, "AV_Flurstück") mGIS.Table("AV_Flurstück", Gis.IGisData.TabAction.COMMIT)
Finally mGIS.CloseTable("tmpBuch") mGIS.CloseTable("tmpAbschnitt") mGIS.CloseTable("tmpFlst") mGIS.CloseTable("tmpGebäude") End Try
mKarteiBL.ApplyData() '----Karteikarte aktualisieren End If End Sub End Class
|