Möglichkeit nach dem Skalierungsfaktors eines Symbols zu suchen

Hallo, bitte um Hilfe.

Ist es möglich, über die Attributeauswahl oder durch eine Tastatureingabe nach dem Skalierungsfaktors eines Symbols zu suchen?

Bspw. ein oder alle Symbole abweichend vom Skalierungsfaktor 1?

Bitte um Rückantwort. Danke im Voraus!

Freundliche Grüße

Alex

Parents
  • Um welche Version von Microstation handelt es sich denn? Welches Betriebssystem?

    Symbol = Zelle?

  • Entschuldigung, es handelt sich um die V8i Ss4 auf Win7 Enterprise.

    Ja ich meine Zelle.

  • Hi,

    wie es f.mandoki schreibt nur per Programm, also mindestens MVba.

    Ist es jedoch nur das Ziel, bei allen Zellen einen bestimmten Faktor einzustellen, hilft natürlich (aLLE) auswählen und über die Elemnentinfo die X-, Y, Z Faktoren einheitlich einzustellen.

    Regards

    Frank

    since 1985: GIS, CAD, Engineering (Civil)  Senior Consultant : [Autodesk Civil 3D , Esri ArcGIS, VertiGIS: in previous days : Bentley MS V4 - V8i, GeoGraphics, Bentley Map V8i, InRoads,  HHK Geograf, IBr DAVID] :  Dev: [C, C++, .NET, Java, SQL, FORTRAN, UML]
    [direct quote by: http://en.wikipedia.org/wiki/Helmut_Schmidt]: "Wer Kritik übel nimmt, hat etwas zu verbergen"
    Wer Grammatik- und/oder Rechtschreibfehler findet, der darf sie behalten :-)

  • Hallo Herr Harport,

    wie bereits vorher erwähnt wurde, kann man den Skalierungsfaktor von Zellen per VBA leicht prüfen.
    Hier einmal ein Beispiel dazu, solche Zellen auszuwählen, wenn der Faktor in der x, y, oder z-Richtung von 1 abweicht.

    Sub selectScaledcells()
    Dim ee As ElementEnumerator
    Dim sc As New ElementScanCriteria
        sc.ExcludeAllTypes
        sc.IncludeType msdElementTypeCellHeader
        Set ee = ActiveModelReference.Scan(sc)
        Do While ee.MoveNext
            Dim oCell As CellElement
            Set oCell = ee.Current.AsCellElement
            If oCell.Scale.X <> 1 Or oCell.Scale.Y <> 1 Or oCell.Scale.Z <> 1 Then
                ActiveModelReference.SelectElement oCell
            End If
        Loop
    End Sub
    

    Wenn solche Zellen dann noch gemeinsam verändert werden sollen, könnte dies in der VBA Routine evtl. hinzugefügt werden.
    Sollen diese evtl. nur wieder zurück auf 1 skaliert werden oder haben Sie andere Anforderungen?

    Schönen Gruß

    Artur Goldsweer

  • Hallo

    ist es in MVBA  wirklich 100% sicher einen Doublewert  wie Scale.X

    If oCell.Scale.X <> 1 Or oCell.Scale.Y <> 1 Or oCell.Scale.Z <> 1 Then

    auf einen festen Wert zu prüfen?

    Regards

    Frank

    since 1985: GIS, CAD, Engineering (Civil)  Senior Consultant : [Autodesk Civil 3D , Esri ArcGIS, VertiGIS: in previous days : Bentley MS V4 - V8i, GeoGraphics, Bentley Map V8i, InRoads,  HHK Geograf, IBr DAVID] :  Dev: [C, C++, .NET, Java, SQL, FORTRAN, UML]
    [direct quote by: http://en.wikipedia.org/wiki/Helmut_Schmidt]: "Wer Kritik übel nimmt, hat etwas zu verbergen"
    Wer Grammatik- und/oder Rechtschreibfehler findet, der darf sie behalten :-)

  • Hallo Herr Klein,

    ja, es ist richtig, es gibt natürlich pro und kontra für diesen Ansatz.
    Aus mathematischer Sicht ist es korrekt, da es exakt der Anforderung entspricht, auch die Erfahrung sagt, dass der Rückgabewert immer exakt 1 ist, wenn 1.000000 als Skalierungsfaktor eingegeben wurde.
    Allerdings wissen wir auch durch die Definition der Arbeitseinheiten, dass alle Koordinaten immer nur eine Annäherung darstellen, so dass man eigentlich auch hier mit einer Toleranz arbeiten sollte.
    Auch kann man bei den Einstellungen zum Platzieren von Zellen tricksen, da die Skalierungswerte immer nur mit einer gerundeten Zahl dargestellt werden. Beispielsweise würde der Wert 1.00000000001 auch als 1.000000 angezeigt, aber nicht verwendet werden, so dass eine so platzierte Zelle nicht gefunden werden würde.
    Ich habe den Ansatz ein wenig abgeändert, so dass hier eine Toleranz (Variable eps) einstellbar ist:

    Sub selectScaledcells()
    Dim ee As ElementEnumerator
    Dim sc As New ElementScanCriteria
    Dim eps As Double
    Dim scalediff As Double
        sc.ExcludeAllTypes
        sc.IncludeType msdElementTypeCellHeader
        Set ee = ActiveModelReference.Scan(sc)
        Do While ee.MoveNext
            Dim oCell As CellElement
            Set oCell = ee.Current.AsCellElement
                eps = 0.0001   ' eingestellte Genauigkeit
                If Abs(oCell.Scale.X - 1) < eps And Abs(oCell.Scale.Y - 1) < eps And Abs(oCell.Scale.Z - 1) < eps Then
                    ActiveModelReference.SelectElement oCell
                End If
        Loop
    End Sub
    

    Schönen Gruß

    Artur Goldsweer

  • Hallo Herr Goldsweer,

    hier kann man mich ruhig Frank nennen.

    Zum Thema: super Lösung, (so hab ich's gelernt, :-)  . Mir ging es aber um die "Mitleser".
    Und was ich auch hinbekomme und was noch fehlt ist die Ergänzung der  DO WHILE und ein IF  Zweig  für Pseudozellen!

    So zur ursprünglichen Frage wäre es aber schön: Es gäbe bei Bentley ein CR, dass die Funktion "Elemente nach Attributen  suchen" auch um x-beliebigen Attribute ergänzt werden könnten. 

     Und für mich ..... ich bin seit 3 Jahren auf der Autodesk-Seite.... da geht das auch ohne VBA.

    Grüße

    Regards

    Frank

    since 1985: GIS, CAD, Engineering (Civil)  Senior Consultant : [Autodesk Civil 3D , Esri ArcGIS, VertiGIS: in previous days : Bentley MS V4 - V8i, GeoGraphics, Bentley Map V8i, InRoads,  HHK Geograf, IBr DAVID] :  Dev: [C, C++, .NET, Java, SQL, FORTRAN, UML]
    [direct quote by: http://en.wikipedia.org/wiki/Helmut_Schmidt]: "Wer Kritik übel nimmt, hat etwas zu verbergen"
    Wer Grammatik- und/oder Rechtschreibfehler findet, der darf sie behalten :-)

Reply
  • Hallo Herr Goldsweer,

    hier kann man mich ruhig Frank nennen.

    Zum Thema: super Lösung, (so hab ich's gelernt, :-)  . Mir ging es aber um die "Mitleser".
    Und was ich auch hinbekomme und was noch fehlt ist die Ergänzung der  DO WHILE und ein IF  Zweig  für Pseudozellen!

    So zur ursprünglichen Frage wäre es aber schön: Es gäbe bei Bentley ein CR, dass die Funktion "Elemente nach Attributen  suchen" auch um x-beliebigen Attribute ergänzt werden könnten. 

     Und für mich ..... ich bin seit 3 Jahren auf der Autodesk-Seite.... da geht das auch ohne VBA.

    Grüße

    Regards

    Frank

    since 1985: GIS, CAD, Engineering (Civil)  Senior Consultant : [Autodesk Civil 3D , Esri ArcGIS, VertiGIS: in previous days : Bentley MS V4 - V8i, GeoGraphics, Bentley Map V8i, InRoads,  HHK Geograf, IBr DAVID] :  Dev: [C, C++, .NET, Java, SQL, FORTRAN, UML]
    [direct quote by: http://en.wikipedia.org/wiki/Helmut_Schmidt]: "Wer Kritik übel nimmt, hat etwas zu verbergen"
    Wer Grammatik- und/oder Rechtschreibfehler findet, der darf sie behalten :-)

Children