Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Indicate2D in Skizze Koordinaten passen nicht

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
Autor Thema:  Indicate2D in Skizze Koordinaten passen nicht (1528 / mal gelesen)
razzor88
Mitglied



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

Beiträge: 42
Registriert: 09.06.2016

erstellt am: 12. Nov. 2017 19: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

Hallo zusammen,

ich habe zur Zeit ein kleines Problem mit der Funktion Indicate2D in einer Skizze.
Und zwar habe ich eine bereits geöffnete Skizze, in der ich nun per Makro einen Punkt erzeugen möchte.
Die Position des Punktes soll durch den Benutzer festgelegt werden, also mache ich das über Indicate2D.
Das Problem ist jetzt, je nach dem auf welcher Ebene die Skizze liegt, bzw. wie die Ebene im Raum gedreht ist, passen die Koordinaten die über Indicate2D ausgegeben werden nicht mit den Koordinaten der Skizze zusammen.
Hat jemand eine Lösung oder eine Idee woran das liegen könnte?

Hier mal der Code:

Code:

Public Sub punkt_einfügen()
        Dim Doc_1 As PartDocument ' Aktives PartDocument
        Dim Selection_1 As Selection ' Selection im aktiven PartDocument
        Dim Sketch As Sketch ' Aktive Skizze
        Dim Factory2D As Factory2D ' 2D Factory der Skizze
        Dim Koordinaten(1) ' Koordinaten für den Referenzpunkt
        Dim ReferenzPunkt As Point2D


        Doc_1 = Catia.ActiveDocument
        Selection_1 = Doc_1.Selection
        Selection_1.Search("CATSketchSearch.2DAxis_Origin,in")
        Sketch = Selection_1.Item(1).Value.Parent.Parent.Parent
        Selection_1.Clear()
        Factory2D = Sketch.OpenEdition()


        If Doc_1.Indicate2D("Zum Einfügen klicken", Koordinaten) = "Cancel" Then
            MsgBox("Abbruch durch Benutzer.", vbCritical + vbSystemModal, "Vorgang abgebrochen")
            Sketch.CloseEdition()
            Exit Sub
        End If
        ReferenzPunkt = Factory2D.CreatePoint(Koordinaten(0), Koordinaten(1))
        ReferenzPunkt.Construction = True
        Selection_1.Add(ReferenzPunkt)
        Selection_1.VisProperties.SetSymbolType(4)
        Selection_1.VisProperties.SetRealColor(255, 0, 0, 1)
        Selection_1.Clear()
        Sketch.CloseEdition()

    End Sub


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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 12. Nov. 2017 19: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 Nur für razzor88 10 Unities + Antwort hilfreich

razzor88
Mitglied



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

Beiträge: 42
Registriert: 09.06.2016

erstellt am: 13. Nov. 2017 16:47    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:
Original erstellt von joehz:
Hi razzor,

hier noch ein Beispiel zum Thema.

http://catia2.cad.de/index.php/de/tipps-tricks/programmierung/328-mit-der-maus-ein-rechteck-aufziehen-rubber-banding-demo

Vielleicht findest damit den Fehler.

Tschau,
Joe



Hallo Joe,

danke für deine Hilfe. Ich habe mir dein Beispiel mal angesehen und es etwas umgestrickt damit es mit einem Sketch funktioniert...
Ich habe dort das gleiche Problem wie mit meinem Programm, das die Koordinaten nicht mehr zu den Koordinaten vom Sketch passen, sobald dieser krumm und schief im Raum liegt. Sprich er zeichnet bei deinem Programm das Rechteck an einer anderen Stelle als dort wo die Maus ist ._.
hier der geänderte Code von deinem Programm:

Code:

Sub catmain()
        Dim Doc_1 As Document 'Active Document
        Dim Sketch As Sketch 'Sketch
        Dim Selection_1 As Selection

        Dim dblWptInd01(1) As Object '          'window point coordinates of indicates with
        Dim dblWptInd02(1) As Object          'respect to the view coordinate system, but not the 3D-axis
        Dim strRet As String


        Doc_1 = Catia.ActiveDocument
        Selection_1 = Doc_1.Selection
        Selection_1.Search("CATSketchSearch.2DAxis_Origin,in")
        Sketch = Selection_1.Item(1).Value.Parent.Parent.Parent
        Selection_1.Clear()


        '---------------------------------------------------------------------------------------------
        'get indicates
        strRet = GetTwoIndDragBox(Doc_1, Sketch, dblWptInd01, dblWptInd02)          'get indicates
        If (strRet = "Cancel") Or (strRet = "Undo") Or (strRet = "Redo") Then  'escape entered
            Exit Sub
        End If
        MsgBox("x1: " & Format(dblWptInd01(0), "####0.000000") & vbCrLf _
            & "Y1: " & Format(dblWptInd01(1), "####0.000000") & vbCrLf _
            & "X2: " & Format(dblWptInd02(0), "####0.000000") & vbCrLf _
            & "y2: " & Format(dblWptInd02(1), "####0.000000"))
    End Sub

    '---------------------------------------------------------------------------------------
    ' Procedure : GetTwoIndDragBox
    ' Author    : jherzog
    ' Date      : 07.10.2014
    ' Time      : 22:06
    ' Languages : VB6 Pro
    ' V5-Release: V5R19/21
    ' Purpose  : Retrieve indicated points from user;
    ' Parms    : oParent:  the active doc
    '          : odrVw:    the active view
    '          : ptStart():first indicate(start point)
    '          : ptEnd():  second indicate(endpoint)
    ' Ret. Value: "Normal", "Cancel", "Undo", "Redo" as returned from IndicateOrSelectElement2D
    '
    ' Syntax    : strRet = GetTwoIndDragBox(oAD, drVw, dblWptInd01, dblWptInd02)
    '
    ' Prereqs  : -
    ' Remarks  : -
    '---------------------------------------------------------------------------------------
    '
    Function GetTwoIndDragBox(iDoc As Document, iSketch As Sketch, ptStart() As Object, ptEnd() As Object) As String
        Dim Selection_1 As Selection
        Dim Status As String
        Dim InputObjectType(0)
        Dim bIsDrawn As Boolean
        Dim ObjectSelected

        ' On Error GoTo GetTwoIndDragBox_Error

        Selection_1 = iDoc.Selection
        'switch to catia

        '---------------------------------------------------------------------------------
        Status = iDoc.Indicate2D("Click to define the start point!", ptStart)            'get first corner
        If (Status = "Cancel") Or (Status = "Undo") Or (Status = "Redo") Then
            GetTwoIndDragBox = Status
            Exit Function                                                                    'quit on escape
        End If
        '---------------------------------------------------------------------------------
        InputObjectType(0) = "Point2D"                                                  'dummy type
        Status = "MouseMove"
        bIsDrawn = False
        'get second point
        Status = Selection_1.IndicateOrSelectElement2D("Click to locate the second point!",
                                                InputObjectType, False, False, True, ObjectSelected, ptEnd)

        Do While (Status = "MouseMove")                                                  'rubber band!
            DrawRect(iSketch, ptStart, ptEnd, 6, 1, 128, 0, 255)
            bIsDrawn = True
            Status = Selection_1.IndicateOrSelectElement2D("Click to locate the endpoint!",
                                                    InputObjectType, False, False, True, ObjectSelected, ptEnd)
            ' GoTo CleanUp
        Loop

        If (Status = "Cancel") Or (Status = "Undo") Or (Status = "Redo") Then            'escape entered
            MsgBox("Canceled by user!", vbInformation Or vbOKOnly, "GetTwoIndDragBox")
            GetTwoIndDragBox = Status
            GoTo CleanUp
            Exit Function
        End If

        GetTwoIndDragBox = Status

        Exit Function
        '---------------------------------------------------------------------------------------
CleanUp:
        If bIsDrawn = True Then
            Selection_1.Search("Name=TEMPRECT_*,all")
            If Selection_1.Count > 0 Then Selection_1.Delete()
            Selection_1.Clear()
        End If
        '  Return
        '---------------------------------------------------------------------------------------
GetTwoIndDragBox_Error:
        Dim errMsg As String
        Dim errRet As Object

        Select Case Err.Number
            Case 5            'Invalid procedure call or argument
      'happens if catia window is minimized

            Case -2147467259    'method delete failed
            Case Else
                errMsg = Err.Number & ": " & Err.Description & " in GetTwoIndDragBox"
                errRet = MsgBox(errMsg, vbOKOnly, "GetTwoIndDragBox")
        End Select

        'Resume Next                                          'fall thru to quit sub
        '---------------------------------------------------------------------------------------
    End Function

    '---------------------------------------------------------------------------------------
    ' Procedure : DrawRect
    ' Author    : jherzog
    ' Date      : 07.10.2014
    ' Time      : 22:06
    ' Languages : VB6 Pro
    ' V5-Release: V5R19/21
    ' Purpose  : Draw system parallel rubber band box between to points
    ' Parms    : strView:  Name of view to draw to
    '          : dPStart():Start point variant array (0) = x, (1) = y;
    '          : dPEnd():  End point
    '          : iLnType(optional): Line type, as specified acc. to catia standards
    '          : iLnThck(optional): Line thickness
    '          : iLnColx(optional): RGB-color values
    ' Ret. Value: -
    '
    ' Syntax    : DrawRect odrVw.Name, ptStart, ptEnd, 6, 1, 128, 0, 255
    '          : (Dot-Dashed, 0.13, light purple)
    ' Prereqs  : -
    ' Remarks  : Only for system parallel views(0°, 90°, 180°, 270°)
    '---------------------------------------------------------------------------------------
    '
    Sub DrawRect(iSketch As Sketch, dPStart() As Object, dPEnd() As Object, Optional iLnType As Integer = Nothing, Optional iLnThck As Integer = Nothing, Optional iLnColR As Integer = Nothing, Optional iLnColG As Integer = Nothing, Optional iLnColB As Integer = Nothing)

        Dim Doc_1 As Object 'DrawingDocument
        Dim odrVw As DrawingView
        Dim Factory2D As Factory2D
        Dim lnRect(3) ' As Line2D
        Dim Selection_1 As Selection
        Dim visProps As VisPropertySet

        Doc_1 = Catia.ActiveDocument
        Selection_1 = Doc_1.Selection
        Factory2D = iSketch.OpenEdition()


        lnRect(0) = Factory2D.CreateLine(dPStart(0), dPStart(1), dPEnd(0), dPStart(1))
        lnRect(1) = Factory2D.CreateLine(dPEnd(0), dPStart(1), dPEnd(0), dPEnd(1))
        lnRect(2) = Factory2D.CreateLine(dPEnd(0), dPEnd(1), dPStart(0), dPEnd(1))
        lnRect(3) = Factory2D.CreateLine(dPStart(0), dPEnd(1), dPStart(0), dPStart(1))
        lnRect(0).Name = "TEMPRECT_" & lnRect(0).Name
        lnRect(1).Name = "TEMPRECT_" & lnRect(1).Name
        lnRect(2).Name = "TEMPRECT_" & lnRect(2).Name
        lnRect(3).Name = "TEMPRECT_" & lnRect(3).Name
        visProps = Selection_1.VisProperties
        Selection_1.Search("Name=TEMPRECT_*,all")
        If Selection_1.Count2 > 0 Then
            If Not iLnColR = Nothing And Not iLnColG = Nothing And Not iLnColB = Nothing Then
                visProps.SetRealColor(iLnColR, iLnColG, iLnColB, 0)
            End If
            If Not iLnType = Nothing Then visProps.SetRealLineType(iLnType, 0)
            If Not iLnThck = Nothing Then visProps.SetRealWidth(iLnThck, 0)
            Selection_1.Clear()
        End If
    End Sub



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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 13. Nov. 2017 20: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 razzor88 10 Unities + Antwort hilfreich

Hi razzor,

bei solch komplexen Themen versuch ich mich langsam, schrittweise der Lösung zu nähern.

Mehrfach gekippte Ebenen kann ich nimmer aus der Lameng heraus verstehen.

Also probier ich's erst mit systemparallelen Ebenen; wenn das klappt, dann mit einfach gekippten Ebenen.

KISS-Prinzip! (Keep it simple and stupid)

Nur so als Anregung.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 13. Nov. 2017 23:37    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 razzor88 10 Unities + Antwort hilfreich

Servus razzor88

Ist bei Anklicken eines "Punktes" auch die Skizze parallel zur Ansicht ausgerichtet?
Ich vermute das die Ansicht eine Auswirkung auf die ausgegeben Koordinaten hat.
ggf erst die Ansicht parallel zur Skizze machen und (falls möglich) sperren.
Oder kann man die "richtigen" Koordinaten berechnen? (auf Skizze entlang der Blickrichtung projizieren? (wird "spaßig" bei der perspektivischen Ansicht))

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

razzor88
Mitglied



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

Beiträge: 42
Registriert: 09.06.2016

erstellt am: 15. Nov. 2017 21:09    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:
Original erstellt von bgrittmann:
Servus razzor88

Ist bei Anklicken eines "Punktes" auch die Skizze parallel zur Ansicht ausgerichtet?
Ich vermute das die Ansicht eine Auswirkung auf die ausgegeben Koordinaten hat.
ggf erst die Ansicht parallel zur Skizze machen und (falls möglich) sperren.
Oder kann man die "richtigen" Koordinaten berechnen? (auf Skizze entlang der Blickrichtung projizieren? (wird "spaßig" bei der perspektivischen Ansicht))

Gruß
Bernd


Hallo Bernd,

ja die Ansicht ist parallel wenn der Punkt angeklickt werden soll.
Ich hab die Ausrichtung vom Viewpoint3D mal Ausgelesen und mit der Ausrichtung vom Sketch verglichen... Passt zusammen...
Hab auch mal mit der Ausrichtung vom Viewpoint3D herumgespielt allerdings ohne Erfolg.
Also habe ich mich dazu entschlossen das ganze über Indicate3D zu lösen und die Koordinaten einfach umzurechen auf die Skizze, funktioniert bisher einwandfrei. Aber falls jemand eine Idee hat wie man das ganze mit Indicate2D lösen kann, wäre ich dankbar!

Hier mal der Code falls ihn mal jemand gebrauchen kann:

Code:

Public Sub punkt_einfügen()
        Dim Doc_1 As PartDocument ' Aktives PartDocument
        Dim Selection_1 As Selection ' Selection im aktiven PartDocument
        Dim Sketch As Sketch ' Aktive Skizze
        Dim Factory2D As Factory2D ' 2D Factory der Skizze
        Dim ReferencePoint As Point2D
        Dim SupportPlane As Plane ' Hilfsebene für Indicate3D
        Dim Position_ReferencePoint2D(1) ' 2D Koordinaten des Referenzpunktes
        Dim Position_ReferencePoint3D(2) ' 3D Koordinaten des Referenzpunktes
        Dim HybridShapeFactory As HybridShapeFactory

        Doc_1 = Catia.ActiveDocument
        Selection_1 = Doc_1.Selection
        HybridShapeFactory = Doc_1.Part.HybridShapeFactory
        Selection_1.Search("CATSketchSearch.2DAxis_Origin,in")
        Sketch = Selection_1.Item(1).Value.Parent.Parent.Parent
        Selection_1.Clear()
        Factory2D = Sketch.OpenEdition()

        ' Hilfsebene für Indicate 3D erstellen
        SupportPlane = GetSupportplanefromSketch(Sketch, Doc_1)

        ' Position durch Benutzer festlegen
        If Doc_1.Indicate3D(SupportPlane, "Zum Einfügen klicken", Position_ReferencePoint2D, Position_ReferencePoint3D) = "Cancel" Then
            MsgBox("Abbruch durch Benutzer.", vbCritical + vbSystemModal, "Vorgang abgebrochen")
            Exit Sub
        End If

        ' Hilfsebene löschen
        HybridShapeFactory.DeleteObjectForDatum(SupportPlane)

        ' 3D Koordinaten in Skizzenkoordinaten umrechnen
        Position_ReferencePoint2D = Transform_3DCoords2SketchCoords(Sketch, Position_ReferencePoint3D)

        Factory2D = Sketch.OpenEdition()
        ReferencePoint = Factory2D.CreatePoint(Position_ReferencePoint2D(0), Position_ReferencePoint2D(1))
        ReferencePoint.Construction = True
        Selection_1.Add(ReferencePoint)
        Selection_1.VisProperties.SetSymbolType(4)
        Selection_1.VisProperties.SetRealColor(255, 0, 0, 1)
        Selection_1.Clear()
        Sketch.CloseEdition()

    End Sub

Public Function GetSupportplanefromSketch(iSketch As Sketch, iDocument As PartDocument) As Plane
        Dim AxisData(8)
        Dim HybridShapeFactory As HybridShapeFactory = iDocument.Part.HybridShapeFactory
        Dim SupportPlane As HybridShapePlaneEquation
        iSketch.GetAbsoluteAxisData(AxisData)
        SupportPlane = HybridShapeFactory.AddNewPlaneEquation(AxisData(4) * AxisData(8) - AxisData(5) * AxisData(7), AxisData(5) * AxisData(6) -
        AxisData(3) * AxisData(8), AxisData(3) * AxisData(7) - AxisData(4) * AxisData(6), 0)
        iDocument.Part.HybridBodies.Item(1).AppendHybridShape(SupportPlane)
        iDocument.Part.UpdateObject(SupportPlane)
        Return SupportPlane
    End Function

    Public Function Transform_3DCoords2SketchCoords(iSketch As Sketch, iCoordinates As Array) As Array
        Dim AxisData(8)
        Dim Coords(1)
        iSketch.GetAbsoluteAxisData(AxisData)

        Coords(0) = AxisData(3) * (iCoordinates(0) - AxisData(0)) + AxisData(4) * (iCoordinates(1) - AxisData(1)) + AxisData(5) *
        (iCoordinates(2) - AxisData(2))
        Coords(1) = AxisData(6) * (iCoordinates(0) - AxisData(0)) + AxisData(7) * (iCoordinates(1) - AxisData(1)) + AxisData(8) *
        (iCoordinates(2) - AxisData(2))

        Return Coords
    End Function


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