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