Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Polyline über Punktauswahl am Bildschirm

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:  Polyline über Punktauswahl am Bildschirm (1051 mal gelesen)
Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 02. Okt. 2012 14:34    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 zusammen!

Ich bin mal wieder dabei mich mit .Net zu beschäftigen und versuch mich einige Dinge
aus VBA in .Net umzusetzen.

In den Hilfen wird ja so einiges gut beschrieben, aber wie bekomme ich es hin, eine Polyline am Bildschirm
über Punktauswahl zu zeichnen?

So ging es unter VBA:

Code:

'--Neue Polylinie--!!!
Dim VarPoint As Variant
Dim VertList() As Double
Dim i As Long
Dim FKPline As AcadLWPolyline

i = 0
On Error Resume Next
VarPoint = ThisDrawing.Utility.GetPoint(, "Ersten Punkt wählen: ")
If Err = 0 Then
    ReDim VertList(1)
    VertList(i) = VarPoint(0): VertList(i + 1) = VarPoint(1)
    Do Until Err.Number <> 0
        i = i + 2
        VarPoint = ThisDrawing.Utility.GetPoint(VarPoint, vbCr & "Nächsten Punkt" & _
                                                "wählen und mit Enter stoppen: ")
        ReDim Preserve VertList(UBound(VertList) + 2)
        VertList(i) = VarPoint(0): VertList(i + 1) = VarPoint(1)
        If FKPline Is Nothing Then
            Set FKPline = ThisDrawing.ModelSpace.AddLightWeightPolyline(VertList)
        Else
            FKPline.Coordinates = VertList
        End If
    Loop
    Dim lngResp As Long
    lngResp = MsgBox("Möchten Sie die Polylinie schließen?", vbYesNo, "Polylinie" & _
                    "schließen Modus")
    If lngResp = 6 Then
    FKPline.Closed = True
    End If
End If


Unter .Net bekomme ich es einfach nicht hin.

Code:

    <CommandMethod("PL04")>
    Public Sub PL04()
        Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
        Dim acCurDb As Database = acDoc.Database

        Dim Varpoint As PromptPointResult
        Dim Vertlist As Point2dCollection = New Point2dCollection
        Dim VarOpt1 As PromptPointOptions = New PromptPointOptions("")
        Dim VarOpt2 As PromptPointOptions = New PromptPointOptions("")
        Dim i As Long

        i = 0

        On Error Resume Next

        'Eingabeaufforderung für den ersten Punkt-------------
        VarOpt1.Message = vbLf & "Bitte den ersten Punkt festlegen: "
        Varpoint = acDoc.Editor.GetPoint(VarOpt(0))
        Vertlist.Add(New Point2d(Varpoint.Value.X, Varpoint.Value.Y))

        If Varpoint.Status = PromptStatus.Cancel Then Exit Sub

        Do Until Err.Number <> 0
            i = i + 2

            'Eingabeaufforderung für die nächsten Punkte-------------
            VarOpt2.Message = vbLf & "Bitte den nächten Punkt festlegen: "

            ReDim Preserve Vertlist(UBound(Vertlist) + 2)

            '????????????????????????????????????
            '????????????????????????????????????
            '????????????????????????????????????
            '????????????????????????????????????

        Loop

    End Sub


Es wäre super, wenn mir da jemand bei helfen könnte.

------------------
Gruß

Dirk

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 02. Okt. 2012 14:55    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 Dirk.B 10 Unities + Antwort hilfreich

Hallo Dirk,

... es sieht so aus, als wüßtest du nun nicht weiter, wie man eine LwPolyLine in .Net erzeugt.
Du willst erzeugen, also st das Schlüsselwort new zu werwenden:

Code:
für c#.Net
Polyline2d _mPolyline = new Polyline2d(...);

Du musst nun mal schauen, was der Konstruktor für Parameter fordert und diese dann eben auch erfüllen.

Willst du das Ganze dann auch noch am Bildschirm sehen, dann musst du die Polyline noch dem aktuellen Bereich hinzufügen (Modell/Layout) und der Transaction mitteilen, dass es ein neues Objekt gibt.
Da dies alles sehr umständlich ist, würde ich dir empfehlen, diese dynamische Benutzerabfrage gleich mit einem Jig zu machen.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 02. Okt. 2012 15:22    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 Holger!

Mit der Polylinie unter .Net funktioniert, wenn ich mit fest
Definierten Punkten arbeite. Dies wird in der Hilfe ja auch gut beschrieben. Mir geht es um die dynamiyche Eingabe.
In meinen VBA - Programmen benötige dieses Möglichkeit um mal etwas nachzuzeichnen und mit weiteren Info zu bestücken.
Nun möchte ich aber zu .Net wechslen und probier daher so eigiges aus.

Ich hatte zwischendurch noch mal weiter ausprobiert.

Code:

        Dim pPtRes As PromptPointResult
        Dim colPt As Point2dCollection = New Point2dCollection
        Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")

        '' Prompt for the first point
        pPtOpts.Message = vbLf & "Bitte den ersten Punkt festlgen: "
        pPtRes = acDoc.Editor.GetPoint(pPtOpts)
        colPt.Add(New Point2d(pPtRes.Value.X, pPtRes.Value.Y))

        '' Exit if the user presses ESC or cancels the command
        If pPtRes.Status = PromptStatus.Cancel Then Exit Sub

        Dim i As Integer = 1

        If Err.Number = 0 Then
            Do Until Err.Number <> 0
                'i = i + 2
                '' Prompt for the next points
                pPtOpts.Message = vbLf & "Bitte einen nächsten Punkt festlgen: "

                '' Use the previous point as the base point
                pPtOpts.UseBasePoint = True
                pPtOpts.BasePoint = pPtRes.Value

                pPtRes = acDoc.Editor.GetPoint(pPtOpts)
                colPt.Add(New Point2d(pPtRes.Value.X, pPtRes.Value.Y))

                If pPtRes.Status = PromptStatus.Cancel Then Exit Sub

                '' Increment the counter
                i = i + 1
            Loop

            On Error Resume Next
            '' Create a polyline with 5 points
            Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()


                '' Open the Block table for read
                Dim acBlkTbl As BlockTable
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

                '' Open the Block table record Model space for write
                Dim acBlkTblRec As BlockTableRecord
                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)

                Dim acPoly As Polyline = New Polyline()
                acPoly.AddVertexAt(i, colPt(0), 0, 0, 0)

                'Dim acPoly As Polyline = New Polyline()
                'acPoly.AddVertexAt(0, colPt(0), 0, 0, 0)
                'acPoly.AddVertexAt(1, colPt(1), 0, 0, 0)
                'acPoly.AddVertexAt(2, colPt(2), 0, 0, 0)
                'acPoly.AddVertexAt(3, colPt(3), 0, 0, 0)
                'acPoly.AddVertexAt(4, colPt(4), 0, 0, 0)

                '' Close the polyline

                Dim lngResp As Long
                lngResp = MsgBox("Möchten Sie die Polylinie schließen?", MsgBoxStyle.YesNo, "Polylinie schließen Modus")
                If lngResp = 6 Then
                    acPoly.Closed = True
                    acPoly.Color = Color.FromRgb(255, 0, 0)
                End If

                '' Add the new object to the block table record and the transaction
                acBlkTblRec.AppendEntity(acPoly)
                acTrans.AddNewlyCreatedDBObject(acPoly, True)

                '' Save the new object to the database
                acTrans.Commit()
            End Using

        End If


Was genau meinst Du denn hiermit?

Zitat:
... würde ich dir empfehlen, diese dynamische Benutzerabfrage gleich mit einem Jig zu machen.

------------------
Gruß

Dirk

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 03. Okt. 2012 08: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 Nur für Dirk.B 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Dirk.B:
Was genau meinst Du denn hiermit?

Link zu AU

Ein Jig ist ein dynamisch am Bildschirm erzeugtes Object, welches auf Benutzeraktionen mit der Maus reagiert - was ganz nach deinem Vorhaben klingt.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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

Dirk.B
Mitglied
Tischler / Leiter Arbeitsvorbereitung


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

Beiträge: 534
Registriert: 25.11.2003

AutoCAD 2019/2020
CAD+T 2020
HP ZBook 15 G4, 64-bit,
WIN 10 Pro

erstellt am: 04. Okt. 2012 10:07    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 Holger!

Vielen Dank für den Link.
Ich werde das mal im Laufe des Tages ausprobieren.

------------------
Gruß

Dirk

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