Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

Neue Updates verfügbar

Das monatliche Update der Baustatik ist ab sofort im Download-Bereich verfügbar (Diesen Monat sogar pünktlich :-) ). Alle Details zum Update finden sich wie immer im Update-Protokoll im Downloadbereich und im Blog meines Bruders. Dieses mal sind sie übrigens endlich drin: Beliebige polygonal umrandete Flächenlager.

Außerdem gibt es auch ein Update für Xvos - Details dazu an den gleichen Stellen.

Wie man Ergebnisse in Ergebnislinien auswertet

Bei der Baustatik kann man die Ergebnisse innerhalb von Faltwerkselementen auf diverse Arten darstellen: Zum Beispiel als Zahlenfeld, als Höhenlinien, als Farbverlauf, oder auch als Kombination daraus. Eine weitere Möglichkeit ist die Darstellung in Ergebnislinien. Bei Ergebnislinien handelt es sich um beliebige Linien in der Ebene des Faltwerkelementes, an denen die ermittelten Werte dann Kurvenförmig dargestellt werden.

Die Kurven der Ergebnislinien werden wie bei den anderen Darstellulngsformen gleichzeitig mit den anderen ausgewählten Formen dargestellt - das ist aber nicht immer die übersichtlichste Methode der Darstellung: Eigentlich wird man bei der Betrachtung der Ergebnislinien eher ausschließlich deren Daten - und sonst keine weiteren - sehen.

Das geht natürlich auch, allerdings muss man dazu in der Optionen der Ergebnisdarstellung ein paar Schalter einstellen. Folgendes ist bei den "Flächenergebnissen" zu tun:

  • Als "Anzuzeigende Ergebnisse" wählt man "nur Ergebnislinien" aus (ansonsten erhält man evt. weitere eingeschaltete Darstellungsformen)
  • Als "Ergebnislinien-Typ" wählt man einen gerade passenden Typ - aber nicht "Keine" (Sonst gibt es eben keine...)
  • Als "Füllung von Flächenergebnissen" wählt man entweder "Weiß" oder "Transparent" - aber nicht "Farbverlauf" (Sonst gibt es zusätzlich noch einen Farbverlauf.)

Environment-Variable für normale Benutzer ändern

Mit Environment-Variablen kann man diverse Dinge steuern, die in vielen Fällen wohl eher für Software-Entwickler interessant sind - in einigen aber auch ganz allgemein von Interesse sein können. So zum Beispiel der Inhalt der Variablen "Temp" und "Tmp" die unter anderem dafür zuständig sind, an welcher Stelle im Dateisystem "temporäre" Dateien angelegt werden.

Die Environment-Variable stellt man im Allgemeinen über die Systemsteuerung ein. Nun hatte ich heute einen Fall (mit meinem Windows 7 System, vermute aber, das das bei älteren Windows-Versionen auch schon so war), der mich ein bisschen durcheinandergebracht hat. Ich wollte eine Variable für den Account setzen, unter dem ich normalerweise arbeite. Geht man in die Systemsteuerung, dann befindet sich die Einstellmöglichkeit für Environment-Variablen unter "System" und dort unter den "Advanced" Settings.

Wenn man da draufklickt bekommt man den "System Properties" Dialog, auf dem es auch einen Button zum einstellen der Umgebungsvariablen gibt. Der enthält zwei Listen: Die eine enthält die Variablen für den gerade aktuellen Benutzer, die andere die "System"-Variable.

Wie man aber am Screenshot schon erkennen kann: Die "System Properties" sind geschützt - bevor also der Dialog aufgeht, muss man ein administratives Passwort eingeben. Das bedeutet aber dann auch, das der Dialog selbst unter den Account-Daten dieses administrativen Accounts läuft. Und darum verändert man auch dessen Umgebungsvariable, und nicht die des Accounts, für den man das eigentlich will.

Um die Umgebungsvariablen eines nicht administrativen Accounts zu verändern, muß man über die Account-Einstellungen gehen:

Besser Übersicht beim anlegen neuer Dokumente

Ab dem nächsten Update der Baustatik ist das Fenster zur Auswahl des gewünschten Dokument-Typs deutlich übersichtlicher geworden: Die Dokumente werden dann nach Kategorien sortiert aufgelistet. Nachdem die Anzahl der möglichen Dokument-Typen in Zukunft ja noch zunehmen wird, wird es vermutlich bei den jetzigen Kategorien nicht bleiben; im aktuellen Stand der Dinge sollten die vorhandenen Kategorien aber ausreichen.

Beliebige polygonal definierte Flächenlager

Ich hatte das ja schon einmal angekündigt und es ist dann nicht fertig geworden - diesmal bin ich mir aber relativ sicher, das diese Funktion ab dem nächsten Update der Baustatik im Faltwerk und der Platte vorhanden sein wird: Beliebig polygonal definierte Flächenlager. Das bedeutet, das Flächenlager dann nicht länger direkt an ein einzelnes Faltwerkselement gebunden sind, sondern - wie das auch bei den Flächeneinwirkungen schon geht - über einen frei definierbaren Polzug erzeugt werden können. Der darf auf die Ränder von Faltwerkselementen (oder Platten) schneiden und kann auch einen linearen Verlauf haben.

Defekte Installationen loswerden

Seit einigen Jahren ist es schon üblich, Programme mit dem Windows Installer zu installieren: Nicht alle Softwarehersteller tun das - aber viele. In unserem Fall werden die "älteren" XFemily-Programme auf einem anderen Weg installiert - die neue Baustatik verwendet aber diesen Windows Installer.

Der kümmert sich um alle möglichen Dinge: So auch darum, das ältere Versionen des gleichen Programms autoamtisch deinstalliert werden, darum, ob ein Programm für alle Nutzer eines Systems oder nur für bestimmte zugänglich ist, und auch um die Anzeige der installierten Programme in der Systemsteuerung.

Das ist schön und hilfreich - macht aber trotzdem manchmal Ärger. Ein typisches Ärgernis ist zum Beispiel der Fall, das ein Programm zwar noch installiert ist - zumindest teilweise - aber nicht mehr in der Systemsteuerung auftaucht. Ein anderer Fall - einen den ich heute hatte - ist der, das das Programm nicht länger auf der Festplatte ist und auch nicht mehr in der Systemsteuerung aufgeführt wird - eine neue Version aber nicht installiert werden kann, weil der Installer trotdem meint, es gäbe bereits eine installierte Version.

Meines Wissens tritt sowas immer nur dann auf, wenn man eines der diversen "Registry Cleaner" Werkzeuge einsetzt: Auch wenn es häufig so aussieht, als würden sie keine Ärger machen: Ich sehe das anders - die Dinger sind im großen und ganzen alle besser nicht mit der Kneifzange anzufassen: Hinterher hat man fast immer ein System das mehr Ärger macht als vorher - und mit etwas Pech tritt der Ärger dann so lange nach Einsatz des Werkzeuges auf, das man sich schon gar nicht mehr daran erinnert. Wer sich selbst einen Gefallen tun will, der verzichtet auf den Einsatz solcher Werkzeuge.

Wie auch immer: Wenn es schon zu spät ist gibt es ein Werkzeug von Microsoft mit dem man "kaputt-optimierte" Windows-Installer Datenbanken reparieren kann. Wie gut das im allgemeinen funktioniert weiss ich nicht - aber mindestens bei einem Kunden hat das heute geholfen. Was man braucht ist ein Tool das so aussieht, als wäre es nur für Office gebaut worden, das man aber eben auch für andere Programme verwendet werden kann. Der Download-Link befindet sich unter http://support.microsoft.com/kb/290301/.

Nachdem das Programm heruntergeladen wurde, muss es (als Admin) installiert werden.

Nach der Installation gibt es dann den Ordner " C:\Program\Windows Installer Clean Up" auf Ihrer Festplatte. Darin befinden sich 3 Dateien: Die, die Sie brauchen heist msicuu.exe: Dieses Programm muss als Admin ausgeführt werden: Das Programm zeigt dann eine Liste der Programme an, die die Windows Installer Datenbank kennt. In der Liste wählt man dann den "defekten" Kandidaten aus, und klickt dann auf "Remove".

 

Mit etwas Glück enthält die Windows Installer Datenbank dann keinerlei versprengte Einträge über die alte Installation mehr - und man kann das Update installieren.

Neuer interaktiver Generator für nichtlineare Lastfallgruppen

Für die nichtlinearen Berechnungen muss man in der Baustatik nichtlineare Lastfallgruppen definieren. Weil das ein wenig umständlich ist, gibt es dafür seit einiger Zeit einen Generator für solche Gruppen. Der klappt auch ganz prima, erzeugt allerdings tendenziell sehr (sehr!) viele solcher Gruppen. Nachdem die aber alle berechnet werden müssen, macht das die Sache eher zeitaufwendig.

Ab dem nächsten Update gibt es daher eine Alternative: Den "interaktiven" Generator für nichtlineare Lastfallgruppen. Der basiert auf den Dialogen für die diversen Detail-Ergebnisse. Dabei kann man sich eine ganz spezielle Stelle im System betrachten, und erhält im Rahmen der Details eine exakte Auflistung, welcher Lastfall mit welchen Wichtungsfaktoren für ein gegebenes Maximum (oder Minimum) zuständig ist. (Von diesen Detail-Dialogen gibt es eine ganze Reihe.).

Ab dem nächsten Update findet sich dort dann auch eine Möglichkeit, anhand der für das Ergebnis zuständigen Kombination aus Lastfällen und Skalierungsfaktoren eine nichtlineare Lastfallgruppe zu definieren. Wurde eine definiert, so landet sie zunächst nur als Anzeige in einem neuen Fenster: Die Liste der so definieren Lastfallgruppen wächst also so lange man neue definiert.

Wurden alle "interessanten" Stellen untersucht, kann man dann mit einem Schlag aus all diesen Fällen nichtlineare Gruppen erzeugen.

Achtung: Problem mit Navigationspunkten

Ist leider erst heute aufgefallen: Set dem letzten Update der Baustatik gibt es für die 1045-01 auch die Bemessungssituation "Erdbeben". Das sollte weiter keinen Einfluss auf irgendwas haben - außer, das man eben diese Situation auch berücksichtigen kann. Leider ist das aber nicht so, denn es gibt sehr wohl eine Stelle, wo sich das sehr ungünstig bemerkbar macht:

Wenn man ein Dokument mit der DIN 1045-01 hat, und in diesem Dokument einen Navigationspunkte angelegt hat, der Ergebnisse aus Linearen Überlagerungsregeln anzeigt - und zwar aus einer der Situationen, die im Dialog _nach_ der Erdbeben-Situation angezeigt werden - und wenn dieses Dokument mit einer älteren Programmversion angelegt wurde... dann tritt das Problem auf.

Wenn der Navigationspunkt nämlich nun angesprungen wird, dann werden nicht die Ergebnisse aus der gewünschten Bemessungssituation angezeigt - sondern die, aus der Situation davor. Enthielt der Navigationspunkte also Ergebnisse aus der "Kombinationen ohne Beiwerte", dann werden beim anspringen die Ergebnisse aus der "Quasi ständigen" Kombination angezeigt. Das wäre noch nicht ganz so dramatisch - aber dummerweise wird außerdem eine falsche Überschrift angezeigt: Und zwar die aus den Ergebnissen, die man erwarten würde: Überschrift und Ergebniswerte passen also nicht zusammen.

Zur Zeit gibt es dafür nur eine Lösung: Alten Navigationspunkt löschen, und einen neuen anlegen. Nicht schön, sorry :-(

Work&Cash, die Baustatik und der Bildschirmschoner

Wer die Baustatik mit einem Work&Cash Vertrag nutzt, bei dem gibt es in Zukunft eine (kleine) Änderung: Bisher war es so, das die Zeit "weiterlief" - auch wenn der Bildschirmschoner anging: Man konnte zwar weiterhin der TimeServer so einstellen, das er beim aktivieren des Bildschirmschoners stehenblieb: Die Baustatik konnte aber danach nicht wieder re-aktiviert werden und musste neu gestartet werden.

Ab dem nächsten Update ist das anders: Geht der Bildschirmschoner an (oder wird die Workstation gesperrt (per Ctrl+Alt+Del)), dann bucht die Baustatik keine weitere Zeit mehr ab. Und zwar so lange, bis man wieder "interaktiv" an der Workstation arbeitet. Tun muss man dafür nicht - das "geht einfach so".

So horcht man mit C# auf den Bildschirmschoner

Wie man in C# auf den Screensaver reagiert

Manchmal möchte man in einem Programm darauf reagieren, das der Benutzer das Programm nicht länger verwendet, obwohl es noch läuft. Solche Situationen treten zum Beispiel dann ein, wenn die Workstation gelockt, oder aber, wenn der Bildschirmschoner aktiviert wird.
Das geht mit Win32 schon seit geraumer Zeit relativ einfach, und zwar mit Hilfe der SensEvents - in diesem Fall mit dem ISensLogon Event Interface.

Für die Nutzung aus .Net heraus gibt es aber leider keine wirklich brauchbare Beschreibung dafür - zumindest konnte ich keine finden. Daher hier: Eine Kurzbeschreibung fürs horchen per ISensLogon Implementierung.

Die Sache ist danbarerweise viel einfacher, als die COM-Dokumentation vermuten läßt. Zunächst braucht man im Projekt zwei neue Referenzen: Eine auf die "COM+ Admin Type Library", und eine auf die "SENS Events Type Library".

Mit der "Admin" referenz kommt man an die COMAdminCatalgoClass, die man zum registrieren (und abmelden) von Event Listenern benötigt, die "SENS" Referenz liefert einem die benötigten Definitionen um mit dem ISensLogon Interface arbeiten zu können.

Im Beispiel erzeuge ich einfach eine Instance der COMAdminCatalogClass als Member einer Form. Mit Hilfe dieses Members kommt man dann an die Sammlung aus Subscriptions, und mit deren Hilfe kann man dann eine neue Subscription erzeugen: In diesem Fall eine, für die "SENS Logon Events". Das geht mit Hilfe der EventCLSID dieser Events (die man notfalls durch Suche in der Registry findet.).

Das anlegen eines neuen Abos verläuft dann wie folgt - wichtig ist dabei nur, das man sich die ID des Abos merkt - ansonsten kann man es später nicht mehr kündigen:

private
string Subscribe()
{
   var subscription = (ICatalogObject)_subscriptions.Add();
   subscription.set_Value("EventCLSID", "{D5978630-5B9F-11D1-8DD2-00AA004ABD5E}"); // (findet man per Suche nach SENS Logon Events in der registry)
   subscription.set_Value("Name", "Subscription to ISensLogon");
   subscription.set_Value("SubscriberInterface", this);
   subscription.set_Value("Enabled", true);
   subscription.set_Value("PerUser", true);

   _subscriptions.SaveChanges();

   return subscription.get_Value("ID").ToString();
}

Damit man die Notifizierungen auch bekommt  muss irgendwer das ISensLogon Interface implentieren: Im Beispiel tut das einfach die Form. Das Interface hat 7 Methoden, und im Beispiel wird einfach in einer Liste aus Strings mitgeführt, welches Ereignis eingetreten ist. (Diese Liste kann man sich dann später per Klick auf den Button der Form anzeigen lassen. Das ist darum so, weil man keine Desktop-Interaktionen durchführen kann, wenn kein Benutzer angemeldet ist: Würden die Methoden aus der Interface-Implementierung direkt in die Listbox schreiben, gäbe es nur eine Exception aus Windows.Forms.)

Zum abbestellen des Abos muss man einfach über die Liste der Abos laufen, und dann dasjenige entfernen, das die "eigene" ID hat, die beim bestellen gemerkt wurde.

private void Unsubscribe()
{
   for (int i = 0; i < _subscriptions.Count; i++ )
   {
      var subscription = (ICatalogObject)_subscriptions.get_Item(i);

      if (subscription.get_Value("ID").ToString() == _subscriptionId)
      {
         _subscriptions.Remove(i);
         _subscriptions.SaveChanges();
         return;
      }
   }
}

Das wars eigentlich schon: Wer mag kann sich das komplette Projekt (VS 2088, C# 3.0) runterladen und ausprobieren...

SensTest.zip (10.23 KB)

Doppelte Knoten zusammenfassen

Im Normfall kümmert sich das Faltwerk (die Platte, Scheibe ...) aus der Baustatik selbstständig darum, das keine "doppelten" Knoten - also Knoten mit den gleichen Koordinaten - erzeugt werden. Es gibt aber Bedingungen, unter denen eben doch solche Konstrukte auftreten können. In einem solchen Fall erscheint dann in der Meldungsansicht das der "Knoten Xyz" an der gleichen Position liegt wie der "Knoten abc". Bisher muß man solche Probleme dann von Hand lösen, und zwar meist, indem man die Knoten miteinander verschmilzt.

Ab dem nächsten Update erscheint zusätzlich ein Assistenten-Button neben der Meldung: Mit einem Klick darauf wird das Problem dann automatisch gelöst.