Autor
|
Thema: Punkte auslesen (3668 mal gelesen)
|
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 09. Dez. 2010 14:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich versuche eine Fallunterscheidung in meinem Programm zu bauen. Es gibt 3D Modellen, die nur positiven oder nur negativen Y-Wert haben und es gibt Modelle, die positive als auch negative Y-Wert haben. Mit welchem Befehl kann man das problem so loesen, dass durch Makros das Modell ertmal untersucht wird ob das nur positive- oder nur negative- oder beide Y-Wert hat. Danach soll es einfach ausgeben,dass es um ein Modell mit nur Positiven handel oder nur mit negativen oder mit beides.... Ich danke euch MFG BM Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 09. Dez. 2010 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
|
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 09. Dez. 2010 16:15 <-- editieren / zitieren --> Unities abgeben:
|
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 09. Dez. 2010 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
|
Sandepp Mitglied Konstrukteur
Beiträge: 3 Registriert: 24.11.2010
|
erstellt am: 09. Dez. 2010 17:16 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
...und so suchst du nach den Punkten: Sub CATMain() set sel= CATIA.ActiveDocument.Selection sel.clear sel.search "(CATGmoSearch.Point),all" sel.Clear End Sub gruß teri gand lene wala ------------------ Sandeep Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 10. Dez. 2010 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
Hallo , und so sieht die komplette Lösung aus ;-) Code:
Sub CATMain() 'by DANIEL FRAUENRATH '***DEKLARATION Dim objPartDoc As PartDocument Dim objSel As Selection Dim objPointColl() As Object Dim i As Long Dim objPoint As Variant Dim dblYValue As Double Dim arrPointCoord(2) Dim booMinusCheck As Boolean '***PART DOKUMENT HOLEN (TYP ABRFRAGE) On Error Resume Next Set objPartDoc = CATIA.ActiveDocument If Err.Number <> 0 Then MsgBox "Das aktive Dokument ist kein CATPart!", vbExclamation, "ABBRUCH" Exit Sub Else On Error GoTo 0 End If '***PUNKTE SELEKTIEREN Set objSel = objPartDoc.Selection objSel.Clear objSel.Search "(CATGmoSearch.Point),all" If objSel.Count = 0 Then MsgBox "Es wurden keine Punkt-Features im Dokument gefunden!", vbExclamation, "KEINE PUNKTE" objSel.Clear Exit Sub Else ReDim objPointColl(objSel.Count - 1) For i = 0 To objSel.Count - 1 Set objPointColl(i) = objSel.Item(i + 1).Value Next objSel.Clear End If '***Y-KOORDINATEN ABFRAGEN For Each objPoint In objPointColl If TypeName(objPoint) = "HybridShapePointCoord" Then lngYValue = objPoint.Y.Value Else objPoint.GetCoordinates arrPointCoord lngYValue = arrPointCoord(1) End If If CheckValue(lngYValue) = True Then MsgBox "Es wurde mindestens ein Punkt mit negativem Y-Wert identifiziert!" + vbNewLine + vbNewLine + _ "Punktname:" + vbTab + objPoint.Name + vbNewLine + _ "Y-Wert:" + vbTab + vbTab + CStr(lngYValue), vbInformation, "NEGATIVE WERTE GEFUNDEN" Exit Sub End If Next MsgBox "Es wurden keine Punkte mit negativen Y-Wert gefunden!", vbInformation, "KEINE NEGATIVEN PUNKTE GEFUNDEN"
End Sub
Private Function CheckValue(ByVal lngYValue As Double) As Boolean '***VERGLEICH MIT NULL If lngYValue < 0 Then CheckValue = True Else CheckValue = False End If End Function
------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 15. Dez. 2010 13:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, erstmal vielen Dank für deine Hilfe;-) Ich habe auch so änlich versucht... Es gibt immer eine Fehlermeldung "Es wurden keine Punkte gefunden". Ich habe ein paar andere Freunde gefragt und die sind der Meinung, dass bei mir um 2D Punkte handelt. Daher findet das programm keine Punkte! Weiss jemand vielleicht wie man das auf 2D Punkte umstellen kann? Ich danke euch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 15. Dez. 2010 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Dez. 2010 13:21 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
Servus Folgendes Makro such dir alle Punkte in der gerade selektiereten Skizze: Code: Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection selection1.Search "CATSketchSearch.2DPoint,sel" End Sub
Den Rest solltest du selbst hin bekommen.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 15. Dez. 2010 13:38 <-- editieren / zitieren --> Unities abgeben:
Das Modell darf nicht hochladen da ich kein zugriff auf dem abgelegten Netzwerk habe. Ein Bild habe ich noch gemacht, wie die Punkte aufgebaut sind. Vielleicht klappt das auch damit. Ich danke dir für deine Mühe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 15. Dez. 2010 13:41 <-- editieren / zitieren --> Unities abgeben:
|
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 15. Dez. 2010 13:48 <-- editieren / zitieren --> Unities abgeben:
|
DanielFr. Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 15. Dez. 2010 15:55 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
Hallo , und hier sieht man mal wieder wie wichtig es ist eine präzise Fragestellung zu liefern . Anbei der nochmals überarbeitete Code welcher jetzt auch Punkte aus Skizzen sucht und verarbeitet Code:
Sub CATMain()'by DANIEL FRAUENRATH 'Version: 1.1 '***DEKLARATION Dim objPartDoc As PartDocument Dim objPart As Part Dim objSPAWB As Workbench Dim objSel As Selection Dim strSelString As String Dim objPointColl() As Object Dim i As Long Dim objPoint As Variant Dim dblYValue As Double Dim arrPointCoord(2) Dim booMinusCheck As Boolean Dim objPointRef As Reference Dim objMeasurable As Object Dim objMsgBoxRes As VbMsgBoxResult Dim objPointFailColl() Dim objPointPassColl() As Object '***PART DOKUMENT HOLEN (TYP ABRFRAGE) On Error Resume Next Set objPartDoc = CATIA.ActiveDocument Set objPart = objPartDoc.Part Set objSPAWB = objPartDoc.GetWorkbench("SPAWorkbench") If Err.Number <> 0 Then MsgBox "Das aktive Dokument ist kein CATPart!", vbExclamation, "ABBRUCH" Exit Sub Else On Error GoTo 0 End If '***PUNKTE SELEKTIEREN Set objSel = objPartDoc.Selection objSel.Clear strSelString = "(((((CATStFreeStyleSearch.Point + CATSketchSearch.2DPoint) + CATDrwSearch.2DPoint) + CATPrtSearch.Point) + CATGmoSearch.Point) + CATSpdSearch.Point),all" CATIA.HSOSynchronized = False objSel.Search CStr(strSelString) CATIA.HSOSynchronized = True If objSel.Count = 0 Then MsgBox "Es wurden keine Punkt-Features im Dokument gefunden!", vbExclamation, "KEINE PUNKTE" objSel.Clear Exit Sub Else ReDim objPointColl(objSel.Count - 1) ReDim objPointPassColl(objSel.Count - 1) For i = 0 To objSel.Count - 1 Set objPointColl(i) = objSel.Item(i + 1).Value Next objSel.Clear End If '***Y-KOORDINATEN ABFRAGEN ReDim Preserve objPointFailColl(0) For Each objPoint In objPointColl If TypeName(objPoint) = "HybridShapePointCoord" Then lngYValue = objPoint.Y.Value ElseIf TypeName(objPoint) = "Point2D" Then Set objPointRef = objPart.CreateReferenceFromObject(objPoint) Set objMeasurable = objSPAWB.GetMeasurable(objPointRef) objMeasurable.GetPoint arrPointCoord lngYValue = arrPointCoord(1) Else objPoint.GetCoordinates arrPointCoord lngYValue = arrPointCoord(1) End If If CheckValue(lngYValue) = True Then If UBound(objPointFailColl) = 0 Then ReDim Preserve objPointFailColl(UBound(objPointFailColl) + 2) Else ReDim Preserve objPointFailColl(UBound(objPointFailColl) + 3) End If Set objPointFailColl(UBound(objPointFailColl) - 2) = objPoint objPointFailColl(UBound(objPointFailColl) - 1) = objPoint.Name objPointFailColl(UBound(objPointFailColl)) = lngYValue End If Next '***ERGEBNISSAUSGABE Dim strMsgTitle As String Dim objMsgSkin As VbMsgBoxStyle Dim M1, M2, strMsgBody As String If UBound(objPointFailColl) <= 1 Then MsgBox "Es wurden keine Punkte mit negativen Y-Wert gefunden!", vbInformation, "KEINE NEGATIVEN PUNKTE GEFUNDEN" Else '***GRUNDEINSTELLUNG MSGBOX strMsgTitle = "NEGATIVE Y-WERTE GEFUNDEN" objMsgSkin = vbExclamation + vbYesNo + vbDefaultButton2 M1 = "Folgende Punkte wurden mit negativen Y-Werten indentifiziert!" M2 = "Wollen Sie den/die Punkte(e) selektieren?" For i = 0 To UBound(objPointFailColl) Step 3 strMsgBody = strMsgBody + vbNewLine + _ "Punktname:" + vbTab + objPointFailColl(i + 1) + vbNewLine + _ "Y-Koordinate:" + vbTab + CStr(objPointFailColl(i + 2)) + vbNewLine Next objMsgBoxRes = MsgBox(M1 + vbNewLine + vbNewLine + strMsgBody + vbNewLine + vbNewLine + M2, objMsgSkin, strMsgTitle) If objMsgBoxRes = vbYes Then For i = 0 To UBound(objPointFailColl) Step 3 objSel.Add objPointFailColl(i) Next End If End If
End Sub
Private Function CheckValue(ByVal lngYValue As Double) As Boolean '***VERGLEICH MIT NULL If lngYValue < 0 Then CheckValue = True Else CheckValue = False End If End Function
------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sandepp Mitglied Konstrukteur
Beiträge: 3 Registriert: 24.11.2010
|
erstellt am: 15. Dez. 2010 17:24 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
HAllo Danile, Kannst du mir sagen, wo die Befehle wie "CATSketchSearch.2DPoint" zu finden sind? Habe echt lange gesucht, diese habe ich nur in dem Kochbuch... gefunden. Sind die auch irgendwo zusammen gefasst? lg Sandeep ------------------ Sandeep Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Dez. 2010 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
|
Sandepp Mitglied Konstrukteur
Beiträge: 3 Registriert: 24.11.2010
|
erstellt am: 15. Dez. 2010 17:59 <-- editieren / zitieren --> Unities abgeben: Nur für sucher2010
|
sucher2010 Mitglied
Beiträge: 51 Registriert: 04.10.2010 CATIA V5 R17 Home CATIA V5 R16 Work
|
erstellt am: 17. Dez. 2010 09:47 <-- editieren / zitieren --> Unities abgeben:
|