Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Linie zeichnen

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:  Linie zeichnen (1133 mal gelesen)
Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 05. Dez. 2008 14:59    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

Hi,

ich bin langsam am Verzweifeln. Ich lasse den Benutzer Objekte auswählen, das können Blöcke, Polylinien, u.s.w. sein. Diese löse ich dann so lange auf, bis die Objekte nur mehr Linien sind --> myObject.Explode(newOjectsCreated)

Das funktioniert auch. Da ich aber gesehen habe, dass die Objekte in der Zeichnung selbst nicht aufgelöst werden wollte ich die bestehenden Objekte löschen und dann die Linien nachzeichnen.

Für das Zeichnen der Linien habe ich folgende Funktion geschrieben:


Code:

Public Structure entityList
    Dim id As Long
    Dim entity As Object
    Dim groupName As String
    Dim startPoint As Point3d
    Dim endPoint As Point3d
End Structure

'Zeichnet alle Linie die in der Entitliste gespeichert sind
    Public Sub drawLines(ByVal linesToDraw() As entityList)
        Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
        Dim tm As Autodesk.AutoCAD.DatabaseServices.TransactionManager = db.TransactionManager
        'start a transaction
        Dim ta As Transaction = tm.StartTransaction()

        Dim bt As BlockTable = tm.GetObject(db.BlockTableId, OpenMode.ForRead, False)
        Dim btr As BlockTableRecord = tm.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
        Dim myLine As Line
        Dim myLineID As ObjectId

        Try

            For i As Long = 0 To linesToDraw.Length - 1

                MsgBox("Startpunkt der Linie:" & vbNewLine & linesToDraw(i).startPoint.X & vbNewLine & linesToDraw(i).startPoint.Y _
                    & vbNewLine & linesToDraw(i).startPoint.Z & vbNewLine & vbNewLine & linesToDraw(i).endPoint.X & vbNewLine _
                    & linesToDraw(i).endPoint.Y & vbNewLine & linesToDraw(i).endPoint.Z)

                myLine = New Line(linesToDraw(i).startPoint, linesToDraw(i).endPoint)


                myLineID = btr.AppendEntity(myLine)
                tm.AddNewlyCreatedDBObject(myLine, True)

            Next

            ta.Commit()
        Catch ex As Exception
            MsgBox("Fehler: " + ex.Message)
        Finally
            ta.Dispose()
        End Try
    End Sub


Um sicher zu gehen, dass in meiner Liste auch gültige Werte drinnen sind, habe ich die mal mit einer MsgBox ausgeben lassen. Und da stehen in der Tat gültige Werte drinnen.

Mein Problem: Ich kriege keine Fehlermeldung aber die Linien werden trotzdem nicht gezeichnet.

Was mache ich da falsch?

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 05. Dez. 2008 15:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

die Linien müssen nicht nur in die Datenbank geschrieben werden (was mit tm.Commit bestätigt wird), sondern die Linien müssen auch wissen, wohin sie gehören, z.B. ModelSpace!!!

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 05. Dez. 2008 15:39    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

Hi Alfred,

ich dachte das wird mit der Zeile

Code:

myLineID = btr.AppendEntity(myLine)

gemacht? Wenn nein, wie stelle ich das an?

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 05. Dez. 2008 15:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

sorry vielmals, die Zeile habe ich im wahrsten Sinne des Wortes 'überflogen', da hast Du natürlich recht.

Dann sehe ich aber in Deinem Codeschnippsel keinen (offensichtlichen) Fehler.

Nur eine Situation würde ich vermeiden, auch in Hinblick auf geschachtelte TransActions (vielleicht ist es das auch schon): Du verwendest manchmal tm (TransActionManager) und manchmal ta (TransAction), ich brauche den TransActionManager nur zum Starten einer TransAction, dann nie wieder, alles andere läuft dann mit dieser TransAction.

Also hätte ich wie folgt getauscht (tm ==> ta):

Code:
 
  Dim ta As Transaction = tm.StartTransaction()
  Dim bt As BlockTable = ta.GetObject(db.BlockTableId, OpenMode.ForRead, False)
  Dim btr As BlockTableRecord = ta.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
  Dim myLine As Line
  Dim myLineID As ObjectId

        Try

            For i As Long = 0 To linesToDraw.Length - 1

                MsgBox("Startpunkt der Linie:" & vbNewLine & linesToDraw(i).startPoint.X & vbNewLine & linesToDraw(i).startPoint.Y _
                    & vbNewLine & linesToDraw(i).startPoint.Z & vbNewLine & vbNewLine & linesToDraw(i).endPoint.X & vbNewLine _
                    & linesToDraw(i).endPoint.Y & vbNewLine & linesToDraw(i).endPoint.Z)

                myLine = New Line(linesToDraw(i).startPoint, linesToDraw(i).endPoint)


                myLineID = btr.AppendEntity(myLine)
                ta.AddNewlyCreatedDBObject(myLine, True)

            Next

            ta.Commit()
        Catch ex As Exception
            MsgBox("Fehler: " + ex.Message)
        Finally
            ta.Dispose()
        End Try



- alfred -

[Diese Nachricht wurde von a.n. am 05. Dez. 2008 editiert.]

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 05. Dez. 2008 16:20    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

Hi Alfred,

hat leider auch keinen Unterschied ausgemacht. Das allerkomischste, wenn ich das mal so nenne darf, an der Sache ist folgendes:

Ich lasse mir mittels der MsgBox die Koordinaten auch ausgeben um sicher zu stellen dass da auch was vernünftiges drinnen ist. Und da sehe ich, wie die Linien gezeichnet werden. Nur sobald ich bei der letzten MsgBox OK klicke ist alles wieder weg...

Sehr kurios...

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 05. Dez. 2008 16:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

wenn Du nach dem Vorgang mal alle Layer taust/einschaltest, allen Elementen Farbe 'vonLayer' gibst, sind diese auch nicht sichtbar?

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 05. Dez. 2008 17:04    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

Hi Alfred,

du forderst Sachen von mir deren ich noch nicht mächtig bin...

------------------
Grüsse Benny

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