Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Catcolor in vba

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:  Catcolor in vba (2567 / mal gelesen)
Diesaster
Mitglied
Student


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

Beiträge: 61
Registriert: 05.11.2015

erstellt am: 24. Aug. 2017 07:27    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

Guten Morgen Community,

eine kurze Frage in Sachen Programmierung.

Es gibt ja die Funktion

Code:

Objekt.SetParameterOnSubString catColor, Start, Ende, Farbe


mit der man die Farbe ändern kann.

Wieso warden hier die Farben nicht richtig umgesetzt?
Wenn ich beispielsweise vbRed angebe, dann färbt sich mein ausgewählter Text stets Schwarz.

Das Problem zusätzlich ist, dass nicht einmal der Integer-Wert funktioniert.

Rot ist hier beispielsweise -16711680 und Blau 65280.

Gibt es irgendwo eine Liste mit den Codes für die Standardfarben, wie Gelb, Grün, Cyan, Magenta?

Wenn ja, wo finde ich diese? Google hat leider keinen Erfolg erzielt. Ebenso das Forum nicht.

Gruß
Diesaster

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: 24. Aug. 2017 08: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 Nur für Diesaster 10 Unities + Antwort hilfreich

Servus

Bei mir funktioniert dein Code.
Hier findest du eine kurze Auflistung.
Die Methode RGB solltest du auch einfach bei dir im Makro verwenden können.

Gruß
Bernd

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

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

Diesaster
Mitglied
Student


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

Beiträge: 61
Registriert: 05.11.2015

erstellt am: 25. Aug. 2017 07: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

Danke für deine Antwort. Diese hat mir leider nicht das zurück gegeben, was ich wissen wollte.

Habe es selbst heraus gefunden, wie man auf diese Werte kommt.

Für den Fall das es jemand wissen will hier die kurze Erklärung, wie z.B. die negative Zahl für die rote Farbe entsteht:

Das Format ist RGBA (Rot-Grün-Blau-Transparenz:

Wenn ich die Farbe Rot möchte muss ich also folgenden RGBA-Code umwandeln: 255 0 0 0
Ich habe es so gelöst, dass ich die Zahl 255 in Binärcode umgewandelt habe. Dieser ist in dem Fall 11111111.
Die anderen werte sind alle 0. Anschließend habe ich den Code zusammengesetzt. Dieser sieht für
die Farbe Rot folgendermaßen aus:

11111111000000000000000000000000

Diesen Binärcode habe ich in den Taschenrechner eingegeben und in Dezimalzahl umrechnen lassen.
Die Dezimalzahl ist dann der Farbcode für die catcolor in Catia.

Dies funktioniert mit jeder anderen Farbe. Bei Grün beispielsweise hat man den Code 111111110000000000000000.


Hoffe es konnte ein bisschen helfen.

Gruss
Diesaster

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: 25. Aug. 2017 09: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 Nur für Diesaster 10 Unities + Antwort hilfreich

Servus Diesaster

Welches Release verwendest du?
zB in R19 wird scheinbar noch RBG verwendet, da funktioniert diese Zeile:

Code:
MyDrawingText.SetParameterOnSubString catColor, 5 , 2 , RGB(255,255,0)

Gruß
Bernd

PS: Bitte Systeminfo ergänzen

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

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

Lionel Hutz
Mitglied



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

Beiträge: 363
Registriert: 26.03.2014

CATIA V5 R20

erstellt am: 25. Aug. 2017 09:54    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 Diesaster 10 Unities + Antwort hilfreich

Habe folgendes Makro ausgeführt
Code:
Sub CATMain()
MsgBox RGB(0,255,255)
End Sub


Ergebnis: 65535
Das entspricht 256*256-1

Deshalb vermute ich, dass ihr von der selben Zahl in unterschiedlichen Formaten redet.

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

Diesaster
Mitglied
Student


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

Beiträge: 61
Registriert: 05.11.2015

erstellt am: 25. Aug. 2017 11:08    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

Ich arbeite mit verschiedenen Catia-Versionen. Von R19 bis R26 ist alles dabei.

In R24 wurde das Makro geschrieben. Und ja der Zahlenwert 65280 entspricht in dem Fall Blau also sollte eigentlich RGB (0 0 255) bzw. RBG (0 255 0).

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

Lionel Hutz
Mitglied



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

Beiträge: 363
Registriert: 26.03.2014

CATIA V5 R20

erstellt am: 25. Aug. 2017 11:41    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 Diesaster 10 Unities + Antwort hilfreich

Ich habe auch Quatsch geschrieben:
Mit den Werten in dem Makro oben hatte ich schon rum gespielt.
Mit RGB(255,255,0) komme ich auf den oben genannten Wert.

Kann mir jemand diese Logik erklären?:
RGB(0,0,255) => 16711680 =256*256*255
RGB(0,255,0) => 65025 = 256*255
RGB(255,0,0) => 255

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

Diesaster
Mitglied
Student


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

Beiträge: 61
Registriert: 05.11.2015

erstellt am: 25. Aug. 2017 11:49    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

Leider kann ich das auch nicht erklären.

catColor ist ziemlich Eigen. 

Wie oben im Text von mir beschrieben funktionieren die Farben vbRed und co nicht.
Nur wenn man es mit dem Binärcode umrechnet und den Wert für die Farbe einsetzt klappt dies.


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: 27. Aug. 2017 21: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 Nur für Diesaster 10 Unities + Antwort hilfreich

Servus Lionel

Zu der Codierung der RGB-Farben:
Ist eine Kombination von drei Bytes, beginnend mit blau, dann grün und dann rot.
Also im Heximalsystem zu Long:
rot: 0000FF = 255
grün: 00FF00 = 65280
blau: FF0000 = 16711680

Gruß
Bernd

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

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

EmilioSanchez
Mitglied



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

Beiträge: 70
Registriert: 02.11.2003

Intel I7 4700MQQ
24GB
Win10 Pro 64-Bit
Catia V5 R19/R26/28/29

erstellt am: 17. Aug. 2019 11:02    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 Diesaster 10 Unities + Antwort hilfreich

Hallo,

stehe vor dem gleichen Problem wie von Diesaster beschrieben.

Für viele Farbzuweisungen verwendet Catia ja RGB, bestehend aus drei Kanälen, für die Farbe Rot wäre das RGB(255,0,0).
Diese drei Werte lassen sich über den Farbdialog ermitteln und zuweisen.

Anders z.B. bei den DrawingTextProperties die Eigenschaft .Color.

Hier erwartet Catia einen Long Integer Wert kodiert aus RGBA, bestehend aus vier Kanälen, wobei der vierte die Transparenz angibt (0=Transparent / 255=Undurchsichtig so folgere ich zumindest aus der Doku)

Für die Farbe Rot wäre das laut Doku RGBA(255,0,0,255) -> was einem Long Integer von -16776961 entspricht.

Wie Diesaster schon geschrieben hat muß diese RGBA nun in Binärcode und dann in Long Integer umgewandelt werden.
Hat vielleicht von euch jemand eine Idee wie das mit VBA Code zu lösen ist?
(Die Taschenrechnermethode hilft hier nicht, ich möchte ja vom Farbdialog direkt die Farbe zuweisen)

THX

Bernd

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: 17. Aug. 2019 13:51    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 Diesaster 10 Unities + Antwort hilfreich

Servus Bernd

Ich vermute dass die Berechnung so geht:

Code:
Sub CATMain()

  MsgBox CLng(&HFF0000FF) 'Hex-Wert zum vergleichen

  MsgBox GetRGBALong(255,0,0,255)

end Sub


Function GetRGBALong(lRed as Long, lGreen as Long, lBlue as Long, lAlpha as long) as long

   GetRGBALong = lRed + lGreen * 256 + lBlue * 256^2 - (lAlpha + 1 ) * 256^2
  'Berechnung kann noch optimiert werden
end function


Stimmt das so? Ich hab leider zu wenig Beispiele gefunden um den Code zu verifizieren.

Gruß
Bernd

EDIT: Alternative Idee falls das zusammensetzen des Hexwerts so stimmt

Code:
Function GetRGBALong(lRed as Long, lGreen as Long, lBlue as Long, lAlpha as long) as long
  GetRGBALong = Clng( "&H" & hex(lAlpha) & right((hex(lBlue + 256)),2) & right((hex(lGreen + 256)),2) & right((hex(lRed + 256)),2))
end function

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

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

EmilioSanchez
Mitglied



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

Beiträge: 70
Registriert: 02.11.2003

Intel I7 4700MQQ
24GB
Win10 Pro 64-Bit
Catia V5 R19/R26/28/29

erstellt am: 17. Aug. 2019 22: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 Nur für Diesaster 10 Unities + Antwort hilfreich

Hallo Bernd,

erst mal vielen Dank für die Blitzschnelle Antwort.

Ich habe deinen Codevorschlag getestet, funktioniert aber nur bei der Farbe Rot.
Sieht mit anderen Werten wie folgt aus:
              RGB              Soll           IST
Rot       255,0,0,255     / -16776961    / -16776961
Blau      0,0,255,255     / 65535        / -65536
Grün      0,255,0,255     / 16711935     / -16711936
Hellgrün  192,255,192,255 / -1056980737  / -4128832

Leider spuckt das WWW hierzu auch nicht viel aus.
Habe nur folgende Codezeile in Java gefunden:
var rgb = (red << 24) + (green << 16) + (blue << 8) + (alpha);
(https://stackoverflow.com/questions/17945972/converting-rgba-values-into-one-integer-in-javascript)
Sagt mir aber leider nichts.

Falls jemand mal den Zahlenwert für eine Farbe braucht:
Drawing mit z.B. einer Linie erstellen und eine Bemaßung ranklicken.
Der Bemaßung eine Farbe geben.
Diesen Codeschnipsel in VBA ausführen:

Sub CATMain()

  Dim drawingDocument1 As DrawingDocument
  Set drawingDocument1 = CATIA.ActiveDocument

  Dim selection1 As Selection
  Set selection1 = drawingDocument1.Selection

  selection1.Search "CATDrwSearch.DrwDimension,all"

  Dim Dimension As DrawingDimension
  Set Dimension = selection1.Item(1).Value
                               
  Dim oDimLine As DrawingDimLine
  Set oDimLine = Dimension.GetDimLine

  MsgBox oDimLine.Color


End Sub

Gruß

Bernd

[Diese Nachricht wurde von EmilioSanchez am 17. Aug. 2019 editiert.]

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

EmilioSanchez
Mitglied



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

Beiträge: 70
Registriert: 02.11.2003

Intel I7 4700MQQ
24GB
Win10 Pro 64-Bit
Catia V5 R19/R26/28/29

erstellt am: 18. Aug. 2019 10:49    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 Diesaster 10 Unities + Antwort hilfreich

Hallo,

folgender Code liefert zumindest schon mal das richtige Ergebnis:

Sub CATMain()

    'Encode RGB nach RGBA ohne Transparenz als long integer [R,G,B (A=immer 255 = keine Transparenz)]
     MsgBox GetRGBALong(255, 0, 128)

End Sub


Function GetRGBALong(lRed As Long, lGreen As Long, lBlue As Long) As Long
   
    'Wenn Hex-Wert einstellig auf zweistellig auffüllen
    StrHexRed = Hex(lRed)
    If Len(StrHexRe) = 1 Then StrHexRed = "0" & StrHexRed
    StrHexGreen = Hex(lGreen)
    If Len(StrHexGreen) = 1 Then StrHexGreen = "0" & StrHexGreen
    StrHexBlue = Hex(lBlue)
    If Len(StrHexBlue) = 1 Then StrHexBlue = "0" & StrHexBlue

    GetRGBALong = ("&H" & StrHexRed & StrHexGreen & StrHexBlue & Hex(255))

End Function

Vielleicht geht's ja eleganter.

Gruß

Bernd

[Diese Nachricht wurde von EmilioSanchez am 18. Aug. 2019 editiert.]

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