C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

RGBAのLong型

こちらの続きのようなものです。
GetParameterOnSubStringメソッド - C#ATIA

こちらのDrawingText.TextPropertiesのcolorがRGBAのLong型を返してきます。
r1 DrawingTextProperties (Object)
この数値がRGB(例えば255, 255, 0)をどうやって計算すれば求められる値なのか
分かりません。

色々と調べたのですがやっぱりわかりませんでした。
きっと計算で出来るのでしょうけど。

仕方ないのでSelectionで色を変更し、GetParameterOnSubStringで拾い出すマクロを
作りました。

'vba
Sub test()
    Dim doc As Document
    Set doc = CATIA.ActiveDocument
    
    Dim sel As Object 'selection
    Set sel = doc.selection
    
    Dim msg$: msg = "選択して下さい : ESCキー 終了"
    Dim txt As Variant 'DrawingText
    
    Dim vis As Variant 'As VisPropertySet
    Set vis = sel.VisProperties
    Dim colorMap As Variant
    
    colorMap = initColorMap()
        
    Dim rgbAry As Variant
    Select Case sel.SelectElement2(Array("DrawingText"), msg, False)
        Case "Cancel", "Undo", "Redo"
            Exit Sub
        End Select
    Set txt = sel.Item(1).value
    
    For i = 0 To UBound(colorMap)
        rgbAry = Split(colorMap(i), ",")
        Call vis.SetRealColor( _
            CLng(rgbAry(0)), _
            CLng(rgbAry(1)), _
            CLng(rgbAry(2)), _
            1)
        iParam = CatTextProperty.catColor
        res = txt.GetParameterOnSubString(iParam, 0, 0)
        
        Debug.Print colorMap(i) & " -> " & res
    Next
    
End Sub

Private Function initColorMap() _
    As Variant 'array(str)
    
    initColorMap = Array( _
        "255, 255, 0", _
        "128, 0, 255", _
        "0, 0, 255", _
        "0, 128, 255", _
        "0, 255, 255", _
        "0, 255, 0", _
        "0, 128, 0", _
        "211, 178, 125", _
        "255, 128, 0", _
        "255, 0, 0", _
        "255, 0, 255", _
        "128, 64, 64")

End Function

で結果はこちら

255, 255, 0 -> -65281
128, 0, 255 -> -2147418113
0, 0, 255 -> 65535
0, 128, 255 -> 8454143
0, 255, 255 -> 16777215
0, 255, 0 -> 16711935
0, 128, 0 -> 8388863
211, 178, 125 -> -743277057
255, 128, 0 -> -8388353
255, 0, 0 -> -16776961
255, 0, 255 -> -16711681
128, 64, 64 -> -2143272705

フムフム・・・やっぱりわかりません。 でもこの方法で行けそう。