Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Umfang aus Length verwenden

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:  Umfang aus Length verwenden (1048 mal gelesen)
andreschubert6
Mitglied



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

Beiträge: 20
Registriert: 15.11.2009

AutoCad 2006

erstellt am: 26. Dez. 2010 12:14    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 und frohes Fest.
Ich möchte mir gern den Umfang eines Polylinienobjektes in einer Userform anzeigen lassen. Das Objekt wurde in einer vorhergehenden Prozedur bereits ausgewählt. Nun bin ich der Meinung, dass ich Length für den Umfang verwenden kann. Zumal der korrekte Wert bei überwachen schon angezeigt wird. Wenn ich die Prozedur aber debugge erscheint ein Laufzeitfehler '438' mit dem ich nichts anfangen kann.
Kann man das in etwa gar nicht so machen? 

Ach ja und kann es sein, dass bei AutoCad- Versionen nach 2006 der Umfang nicht mehr unter Length sonder unter Perimeter hinterlegt ist?

Gruß Andre

'Umfang
Private Sub CommandButton3_Click()
Dim U As Double
   
U = ThisDrawing.ModelSpace.Item1.Length

Me.ListBox1.Clear
Me.ListBox1.AddItem (U)

End Sub

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


Ex-Mitglied

erstellt am: 26. Dez. 2010 14:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

.Length sollte für Polylinien gelten, .Perimeter für Objekte des Typs 'REGION' (finde ich zumindest so in der ACAD-VBA-Hilfe).

Wenn Du jetzt mit Deinem Code abfliegst, dann folgender Tip:

- Prüfe zuerst den Typ des Objekts bevor Du die Eigenschaft .Length davon abfragst
- ich weiß zwar nicht, was ThisDrawing.ModelSpace.Item1 sein sollte, den Codeteil solltest Du auch mal prüfen.

HTH, - alfred -

------------------
www.hollaus.at

andreschubert6
Mitglied



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

Beiträge: 20
Registriert: 15.11.2009

AutoCad 2006

erstellt am: 26. Dez. 2010 15:23    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

Zitat:


- Prüfe zuerst den Typ des Objekts bevor Du die Eigenschaft .Length davon abfragst

Zuvor wird der Typ "IAcadLWPolyline" mit einer If-Abfrage untersucht, was auch funktioniert.

Zitat:


- ich weiß zwar nicht, was ThisDrawing.ModelSpace[b].Item1
sein sollte, den Codeteil solltest Du auch mal prüfen.

Da hab ich noch eine Frage dazu: Wenn man in dem Fall "Item" nimmt, bezieht es sich dann immer noch auf das ausgewählte Objekt?

Objektauswahl wird im übrigen auch getroffen.

Gruß und Danke

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


Ex-Mitglied

erstellt am: 26. Dez. 2010 19:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Zuvor wird der Typ "IAcadLWPolyline" mit einer If-Abfrage untersucht, was auch funktioniert.

Ganz ernst? Nee, denn ThisDrawing.ModelSpace.Item1 bringt schon einen Fehler, es kann gar nicht sein, dass dieses ein Objekt retourniert. 


>> Wenn man in dem Fall "Item" nimmt, bezieht es sich dann immer noch auf das ausgewählte Objekt?

.Item(<Index> ) bezieht sich auf ein Element in einer Auflistung. Hat nix mit selektiert zu tun, solange Du nicht von einer Auflistung eines SelectionSets sprichst.


>> Objektauswahl wird im übrigen auch getroffen.

  Den Zusammenhang versteh ich (bezogen auf Dein obiges Codeschnippsel) gar nicht mehr. Entweder mehr Code (den Du zuvor bitte auch probierst) oder mehr Beschreibung, sonst kann ich (und ich nehme auch an, sonst können andere) nicht weiterhelfen.

- alfred -

------------------
www.hollaus.at

andreschubert6
Mitglied



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

Beiträge: 20
Registriert: 15.11.2009

AutoCad 2006

erstellt am: 26. Dez. 2010 20: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

Gut dann hier nochmal der Teil des Codes der scheinbar auch wichtig ist.

--------------------------------------------------------------------------------------------------------------------
Option Explicit  'Interpreteranweisung: Programmierer übernimmt Variablendeklaration

'Deklaration eines Types
Type tKo
X As Double
Y As Double
End Type
Public A As Double
Public Xs As Double
Public Ys As Double

Sub main()
Dim LwPolyobject As Object
Dim Koord() As tKo                          'dyn. Feld für abzuholende Koordinatenwerte eines Polygonzugs
Dim inspunkt As Variant
Dim Geschlossen As Integer

    'EINGABE
   
    'Aufruf Sub Polygonanwahl
    If PolygonAnwahl(LwPolyobject) = 0 Then   
        MsgBox "Objekt ist keine Polylinie"
   
    'Verarbeitung
    Else
        'Aufruf Sub Auslesen der Koordinaten des Polygonzuges
        Geschlossen = KoordinatenAuslesen(LwPolyobject, inspunkt, Koord())
            If Geschlossen = 2 Then
                'Aufrufen Sub zur Berechnung des Flächeninhaltes
                    Call Flaechenberechnung(LwPolyobject, inspunkt, Koord())
                    Call Koordinate_Xs(LwPolyobject, inspunkt, Koord())
                    Call Koordinate_Ys(LwPolyobject, inspunkt, Koord())
                                       
                    'Ausgabe
                    Call KoordinatenAusgabe
            End If
           
            If Geschlossen = 1 Then
                  MsgBox "Enden liegen in Z verschoben übereinander"
            End If
           
            If Geschlossen = 0 Then
                  MsgBox "Polygonzug nicht geschlossen"
            End If
           
    End If

End Sub

'Auswahl des Polygonzuges
Function PolygonAnwahl(LwPolyobject As Object) As Integer
Dim Prompt As String
Dim PickedPoint As Variant   


    On Local Error Resume Next
    Prompt = "Polylinie anklicken:"
    ThisDrawing.Utility.GetEntity LwPolyobject, PickedPoint, Prompt
   
       
        If TypeName(LwPolyobject) = "IAcadLWPolyline" Then
            PolygonAnwahl = 1
        Else
            PolygonAnwahl = 0
        End If
End Function

--------------------------------------------------------------------------------------------------------------------
funktioniert


Ich dachte das "ThisDrawing.ModelSpace.Item1.Length" unabhängig davon ist.
Kann es daran liegen, dass die "Length- Abfrage" in einer UserForm (Private Sub) statt findet? ...aber warum seh ich dann den korrekten Umfangswert beim debuggen und überwachen von "ThisDrawing"?

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


Ex-Mitglied

erstellt am: 27. Dez. 2010 01:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

darf ich aus dem Wort 'funktioniert' am Ende Deines Codes schliessen, dass der gezeigte Code funktioniert?
Sollte das so sein (und so schliesse ich es jetzt mal auch wegen der anderen Fragen am Ende Deines Beitrags), dann hast Du ja nicht die Stelle mitgezeigt, die Auslöser des Problems ist (zumindest kann ich keinen Zusammenhang aus den beiden Codeteilen erkennen). 


>> Kann es daran liegen, dass die "Length- Abfrage" in einer UserForm (Private Sub) statt findet?

Ich sehe nicht, wie Du aus Deinem Form-Objekt auf die Sub main hingreifst, daher kann ich nur raten: Dein Objekt 'LWPolyobject' hast Du nur innerhalb dieser Sub main deklariert, damit wird diese zu dem Zeitpunkt hinfällig, wenn Du End Sub erreichst.


>> ...aber warum seh ich dann den korrekten Umfangswert beim debuggen und überwachen von "ThisDrawing"?

Nochmals nehme mal an (bald glüht die Glaskugel ), dass Du beim Debuggen noch in der Sub main drin stehst, darum hast Du auch noch Zugriff auf das Objekt LWPolyobject.


Wenn ich jetzt weiters aus den obigen Teilen rückschliesse und diese Zeile heranziehe:
U = ThisDrawing.ModelSpace.Item1.Length

...kann es sein, dass Du nach Durchlauf der Sub main annimmst, dass das zuletzt selektierte Element über ThisDrawing.ModelSpace.Item1 ansprechen kannst? ==> Sorry, so geht's nicht, denn nochmals:
- die Eigenschaft .Item1 gibt es nicht
- auch richtig geschrieben ThisDrawing.ModelSpace.Item(1) würde es nicht lösen, denn das vom User gewählte Element bei ThisDrawing.Utility.GetEntity LwPolyobject, PickedPoint, Prompt ist nicht zwangsweise das erste Element im Modellbereich.


Mach also eine Funktion aus Deiner Sub main, die die Fläche der Polylinie retourniert - oder im Fehlerfall z.B. -1. Dann hast Du mit der Gültigkeit/Lebensdauer der Variable LWPolyobject kein Problem mehr.

- alfred -

------------------
www.hollaus.at

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