Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Bemaßung Wert auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Bemaßung Wert auslesen (3420 mal gelesen)
82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 11. Mai. 2013 14:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich noch nicht viel Erfahrung mit VBA in Autocad habe mich aber vor einer Weile aber schon (Learning by Doing) mit VBA in Excel auseinandergesezt.

Jetzt würde ich gerne den Wert (in den Eigenschaften heißt es Maßeinheit) von Bemaßungen auslesen.
Nach einiger Suche bin ich bereits auf folgenden Verweis in einer anderen Disskussion gestoßen:
http://forums.augi.com/archive/index.php/t-35912.html
Aber das ist auch nicht das, was ich suche (wenn ich das denn richtig verstanden habe, mein Englisch ist nicht sooo gut). Ich möchte nur den Wert wissen, um damit weitere If Then Else Abfragen durchführen zu können.
Das muss doch möglich sein, oder? Aber .value gibt es da scheinbar nicht...

Freue mich über jede Hilfe!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 11. Mai. 2013 14:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Edit:
Hab gerade rausgefunden, dass das eigentlich mit Measurment gehen müsste, oder? Aber da heißt es bei mir "Objekt unterstützt diese Eigenschaft oder Methode nicht"
Da ich lineare und ausgerichtete Bemaßungen habe, habe ich es bisher mit AcadDimension probiert, muss ich da was anderes nehmen?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 11. Mai. 2013 16:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ok,
meine Fragestellung hat sich etwas geändert aber die Überschrift passt dennoch, denke ich.

Ich möchte alle Bemaßungen in einer Zeichnung in ein Auswahlset laden, den Wert auslesen und je nachdem welchen Wert sie haben, weiter vorgehen.
Bisher habe folgende Variablen deklariert:
Dim Sset As AcadSelectionSet
Dim Auswahl As AcadObject
Dim Bemass As AcadDimension
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

und einen Filter mit 0 und "Dimension" erstellt

Sset wird bei mir über eine Funktion "gesettet" und mit:

Sset.SelectOnScreen FilterType, FilterData
For Each Auswahl In Sset
Set Bemass = Auswahl
Bemass.TextOverride = ...

kann ich alle Bemassungstexte überschreiben.

Das funktioniert auch soweit. Nur gibt es für "Bemass" eben die Funktion Measurment nicht, die gäbe es aber jeweils für
Dim objAligned As AcadDimAligned
Dim objRotated As AcadDimRotated
Leider weiß ich nicht, wie ich diese beiden Bemaßungstypen in ein Auswahlset bekomme und sie wie einen Typen weiter behandeln kann.

Ich hoffe, ich habe das einigermaßen verständlich formuliert...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 11. Mai. 2013 19:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Hallo und willkommen im Forum 

Du hast Dir ja eine ungünstige Zeit herausgesucht, am WE ist hier fast nichts los.
Dafür hast Du schon selber ein paar Erfahrungen gemacht, was ja auch nicht verkehrt ist.

So ganz verstehe ich nicht was Du eigentlich machen möchtest, aber vielleicht ein Hinweis:
Measurement ist keine Funktion sondern eine Eigenschaft, die noch dazu schreibgeschützt ist.
D.h. Du könntest sie dir mit debug.print bemass.measurement auch anzeigen lassen

Textoverride überschreibt diesen Wert vorübergehend, diese Überschreibung kann mit "" wieder rückgängig gemacht werden.

Wenn Du im Überwachungsfenster einmal die Variable Bemass ansiehst, wirst Du feststellen, dass sie abhängig vom aktuellen Element im Selectionset verschiedene Typen annimmt, d.h. Du hast sie schon im Auswahlset.

Zugriff darauf bekommst Du z.B. über:

Code:
Select Case Bemass.ObjectName
  Case "AcDbAlignedDimension":
 
  Case "AcDbRotatedDimension":
 
End Select

Aber beschreib doch mal was Du wirklich vorhast, vielleicht hast Du ja den ganz verkehrten Ansatz ..

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 11. Mai. 2013 20:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey, gut zu wissen, dass die wenigen Antworten mit dem WE zusammen hängen könnten!

Mein Plan ist folgender:

Wähle sämtliche Bemaßungsobjekte (bzw. entweder alle Bemaßungsobjekte oder durch Markierung des Nutzers SelectOnScreen)
Wenn Wert der Bemaßung kleiner 1 und Wert geteilt durch 0,005 eine gerade Zahl
Dann mach A
Oder Wenn Wert kleiner 1 und Wert / 0,005 ungerade oder Rest von Wert / 0,005 ungleich 0 (geht bestimmt auch einfacher oder? Es geht darum ob die dritte Nachkommastelle eine Null oder eben nicht ist)
Dann mach B
Oder Wenn Wert großer gleich 1 und wie in Fall 1
Dann mach C
Oder Wenn Wert größer gleich 1 und wie in Fall 2
Dann mach D

Zitat:
Select Case Bemass.ObjectName
  Case "AcDbAlignedDimension":
 
  Case "AcDbRotatedDimension":
 
End Select

Um genau sagen, können ob mir das hilft, muss ich mir das noch mal in Ruhe anschauen bzw. ausprobieren. Aber mit den zwei Cases wären das ja also statt vier schon acht Fälle bzw. durch die Auswahlmöglichkeit am Anfang genaugenommen 16... Puh. Kann also gut sein, dass der Ansatz nicht der aller beste ist. 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 11. Mai. 2013 23:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Nachdem Bemass global als AcadDimension definiert ist kannst für alle Fälle dort die Measurement Eigenschaft abrufen, also bleiben es vier Fälle.
Bedenke aber die Double Ungenauigkeit, also keine Abfrage auf 0,005 sondern besser vorher auf Integerwert runden und dann vergleichen (nur mal so als Tip)

Wenn die daraus folgende Aktion allerdings eine Korrektur der Abstände sein soll, kann das natürliche doch zu acht Aktionen führen ..

Grüße
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 11. Mai. 2013 23:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Für Bemass gibt es die Eigenschaft Measurement eben leider nicht  ?!
Das mit dem Runden versuche ich auch gerade    Eigentlich möchte ich die Originalzahl in zwei Zahlen aufsplitten: Einmal die Originalzahl mit zwei Nachkommastellen (Rest abgeschnitten) und die Dritte Nachkommazahl x 100 als einstellige ganze Zahl. Aber das gehört glaub ich woanders hin.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 12. Mai. 2013 13:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Doch, Du kannst die Bemass.Measurement Eigenschaft abrufen (aber nicht ändern)

Zu dem Runden: dritte Nachkommastelle mal 100 ? Eher mal 1000 oder?

Egal hier mal ein Beispiel wie man das lösen könnte:

Code:
Function MTRunden(wert As Double) As String
   
    Dim sh As String
   
    sh = Format(wert, "0.000")
    If Right(sh, 1) = "0" Then
      sh = Left(sh, Len(sh) - 1)
    Else
      sh = Left(sh, Len(sh) - 1) & "  +" & Right(sh, 1)
    End If
    MTRunden = sh

End Function


Im Hauptcode käme dann noch ein:

Code:
Bemass.TextOverride = MTRunden(Bemass.Measurement)

eingefügt.

Probiers einfach aus und lass uns wissen ob das Dein gewünschtes Ergebnis wäre.

Grüße
Klaus   

[Diese Nachricht wurde von KlaK am 12. Mai. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 12. Mai. 2013 16:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hm... bei mir heißt es aber, dass es diese Eigenschaft dafür nicht gibt. Jedenfalls nicht für Bemass so wie es deklariert ist. Ich komme an diese Eigenschaft nur, bei dim as AcadDimAligned oder as AcadDimRotated.

Danke für den Code zum Runden, den werde ich gleich mal ausprobieren und mit den mal 1000 hast du natürlich recht 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 12. Mai. 2013 19:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Na gut, dann werde ich das morgen mal mit Autocad testen 
Bei mir (unter Bricscad, die Autocad Homeuse ist noch nicht erneuert) gibt es da keine Probleme. Hatte Deine Vorgaben nur kopiert und ergänzt. Hier mal mein Hauptcode:

Code:

Sub test_Bem()
  Dim Sset As AcadSelectionSet
  Dim Auswahl As AcadObject
  Dim Bemass As AcadDimension
  Dim FilterType(0) As Integer
  Dim FilterData(0) As Variant

  On Error Resume Next
  Set Sset = ThisDrawing.SelectionSets.Add("TEST_SSET")
  If Err <> 0 Then
    Set Sset = ThisDrawing.SelectionSets("Test_SSet")
    Sset.Clear
    Err.Clear
  End If
  On Error GoTo 0

  FilterType(0) = 0
  FilterData(0) = "Dimension"
  Sset.Select acSelectionSetAll, , , FilterType, FilterData
  For Each Auswahl In Sset
    Set Bemass = Auswahl
    Bemass.TextOverride = MTRunden(Bemass.Measurement)
    'Bemass.TextOverride = ""
  Next Auswahl
End Sub


Evtl. kannst Du die Bemass-Variable ja auch einfach als Variant definieren

Grüße
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 12. Mai. 2013 20:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wahrscheinlich liegt es daran, dass Measurement schreibgeschützt ist, wie du sagtest (was ja auch Sinn macht). Einer anderen Variable den Wert Bemass.Measurment zuzuweisen scheint in gewissen Fällen tatsächlich zu funktionieren. So gaaanz hab ich noch nicht raus, warum es das eine mal geht und das andere mal nicht aber ich probier mal weiter rum.
Danke jedenfalls schon mal, das hat mir sehr weiter geholfen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 12. Mai. 2013 21:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Da Du hier neu bist:
Wenn es geholfen hat, darf man auch Unities vergeben 

Grüße
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

82.lagrima
Mitglied



Sehen Sie sich das Profil von 82.lagrima an!   Senden Sie eine Private Message an 82.lagrima  Schreiben Sie einen Gästebucheintrag für 82.lagrima

Beiträge: 14
Registriert: 11.05.2013

Win 7, Autocad 2011 64 Bit

erstellt am: 18. Mai. 2013 14:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das mit den unities ist gut zu wissen  schöne Idee.

Was ich noch sagen wollte: ich hab auch rausgefunden, warum das mit dem measurement mal ging und mal nicht - es war ein blöder Tippfehler! Ich habe manchmal einfach das zweite "e" vergessen!!

Kann ich den Beitrag eigentlich irgendwo auf "gelöst" stellen?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 18. Mai. 2013 20:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 82.lagrima 10 Unities + Antwort hilfreich

Ist mir jetzt nichts bekannt, aber der Hinweis, dass die Frage gelöst wurde ist schon ein guter und wichtiger Hinweis der manchmal leider vergessen wird.
Theoretisch wäre es zwar möglich den Beitrag löschen zu lassen, wird aber nur in Ausnahmefällen gemacht, da wir ja auch unser Nachschlagewerk nicht verlieren wollen. Viele Fragen kann man dann unter Benutzung der Suchfunktion schnell lösen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz