<< Click to Display Table of Contents >> Navigation: 3. Script Language > PlugIn-Commands > PIS. - PlugIn Send > Sample Code Buttonbar for Blender |
MiniRobotLanguage (MRL)
Buttonbar for Blender-Sample Code
This Script is a commercial Blender AddOn
Intention
Using the SPR and its PlugIn we can realize a "Companion" for any Software that accepts Mouse and Keyboard Input.
The Code below realizes the Blenderbar Pro AddOn.It was developed over time so it does not yet use all the new Features for Textfiles.
However the idea to implement them has to do with these tasks.
The AddOn is available at Blendermarket here:
https://blendermarket.com/products/blender-quickbuttons-buttonbar
but as you have the SPR you can just compile it yourself.
Code Explanation
Example
'
'SPR Script-file: Blender-AddOn
'Purpose: V.5
'Author:Theo Gottwald
'Creation date: 26-08-2020 at 12:19:34
'===========================================================
'#EXE:?path\Quickbuttons.exe
'#SPI:ForceWrite
'#SPI:NoMutex
'#ICS:32
'#MAN:ai
'
'MRK.1
NAI.Blender
MBX.Blender is not installed on your System.
GTO.enz
EIF.
' Debugmodus bei Problemen
VAR.$$CMD=$cmdexe$
JNS.$$CMD|nodeb
VBT.$$CMD
VTL.$$CMD
IVV.$$CMD="-deb"
DBM.2
EIF.
:nodeb
GSB.Definitions
' use any window to attach the plugin
GSB.FindBlender
GSB.CheckSlow
' Maximale Anzahl Layer (Button-Ebenen)
GSB.Count_Layers
POP.$$LAM
' Bigstep ausrechnen
CAL.$$BIO=$$LAM/2|i
GSB.FirstRun
GSB.Init_plugin
' Setze Texte der Buttons
PUV.$$LAY
GSB.Init_Button_Layer
' Make the PlugIn visible
PIS.$$REA|show
DOL.1
GSB.CloseIfDestroyed
PIW.$$REA|$$RET
GSB.Auswertung
PAU.0.1
OOP.
PAU.2
:enz
END.
'-----------------------------------------------------------
:CloseIfDestroyed
NEW.$$ULT
GTO.enz
EIF.
RET.
'-----------------------------------------------------------
' Switch Layers
'-----------------------------------------------------------
:NextLayer
' Falls nur ein Layer
JIV.$$LAM=1|enl
$$A00=$$LAY
VIC.$$LAY
:Layerpro
IVV.$$LAY>$$LAM
CAL.$$LAY=$$LAY-$$LAM
EIF.
IVV.$$LAY<1
CAL.$$LAY=$$LAY+$$LAM
EIF.
:NewLayer
PUS.$$LAY
GSB.Init_Button_Layer
:enl
RET.
'-----------------------------------------------------------
:FastLayer
' Falls nur ein Layer
JIV.$$LAM=1|enl
$$A00=$$LAY
CAL.$$LAY=$$LAY+2
GTO.Layerpro
RET.
'-----------------------------------------------------------
' Bei Doppelklick
:RevLayer
' Falls nur ein Layer
JIV.$$LAM=1|enl
$$A00=$$LAY
CAL.$$LAY=$$LAY-1
IVV.$$LAY=0
VAN.$$LAY=$$LAM
EIF.
GTO.Layerpro
RET.
'-----------------------------------------------------------
' Input: number der Button-Ebene auf STACK
:Init_Button_Layer
GSB.CountTextFiles
GSB.SetButtonText
' Tooltip-Paralelrobot informieren
$$MSG=GDA.$$TBN-$$LAY
SIK.qued Message|$$TIA|$$MSG
RET.
'-----------------------------------------------------------
' Count Textfiles per Button-Ebene
' Input Ebene Number on Stack
' Output Number of Buttons in Ebene on Stack
:CountTextFiles
SAV.Save|$$LOP|$$NTX|$$PAT
GSB.GenLFP
POP.$$PAT
$$PBT=$$PATButton
VAN.$$BNU=0
FOR.$$LOP|1|99
VAR.$$NTX=$$LOP
GSB.ConstructCompleteFN
IEF.$$NFN
VAN.$$BNU=$$LOP
ELS.
GTO.LoopExit
EIF.
NEX.
:LoopExit
PUV.$$BNU
SAV.Restore
RET.
'-----------------------------------------------------------
' $$NTX ist die Zahl die eingesetzt wird
:Replace
FMT.$$NTX|00
VAR.$$NFN=$$PBT
RPL.$$NFN|XX|$$NTX
RET.
'-----------------------------------------------------------
' $$RMB=[OnRightMouseButton!]
'-----------------------------------------------------------
:RMB_Process
TXT.Find_Line_with|$$RMB|$$POS
IVV.$$POS>0
TXT.Get_after_Line|$$POS|$$BTR
TXT.Get_before_Line|$$POS|$$BTL
ELS.
TXT.Get_pure_Text|$$BTT
EIF.
IVV.$$RMF=1
VAR.$$BTT=$$BTR
ELS.
ACH.$$BTL|$$CRL|2|$$BTT
EIF.
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
:writeCMD
SCW.h|$$ULT
GSB.GetCoords
GSB.ReplaceSV
GSB.clickType
:doNotType
RET.
'-----------------------------------------------------------
' Click and Type into Blender
'-----------------------------------------------------------
:clickType
SFW.$$ULT
SAW.$$ULT
GMP.msk|$$MSX|$$MSY
MLE.$$CLX,$$CLY
MDI.$$CLX,$$CLY
WII.5|$$PID
MLM.$$CLX,$$CLY
GSB.typeIt
MPO.s|$$MSX,$$MSY
RET.
'-----------------------------------------------------------
' Here we are going to type into the Python Console Window
:typeIt
IVV.$$SLO=1
SKP.$$CMD
ELS.
CLP.r|$$CLP
$$CMD=$$CMD$crlf$
CLP.t|$$CMD
KYD.{STRG},"v"
PAU.150|ms
KYU.{STRG},"v"
PAU.100|ms
EIF.
CLP.t|$$CLP
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
' Replace all those Special Variables like [?lib] etc. with the final content
:ReplaceSV
IVC.$$BTT=filename=
' Get First Line (Buttonname)
SBD.$$BTT|$crlf$|1|$$FIA
SBD.$$BTT|$crlf$|2|$$FIB
SBD.$$BTT|$crlf$|3|$$FIC
' Hole Pfad nach =
SBD.$$FIB|2|=|$$FID
VAR.$$BTT=$$FIA$crlf$$$FIB$crlf$$crlf$$$FIC
EIF.
NVC.$$BTT=[
GTO.NoSpecial
EIF.
IVC.$$BTT=$$DFD
VAR.$$POS=$tos$
GSB.FileDialog
EIF.
' Work on [?lib]
IEF.$$LIA\
RPL.$$BTT|$$COD|$$LIB
EIF.
IVC.$$BTT=$$UNF
RND.0|9999|$$RAN
FMT.$$RAN|0000
VBT.$$RAN
RPL.$$BTT|$$UNF|$$RAN|eb
EIF.
' Work on [INP]
IVC.$$BTT=$$COI
VAR.$$POS=$tos$
GSB.SpecialOpt
EIF.
' Work on [INP1] etc.
IVC.$$BTT=$$CIN
GSB.SpecialOptB
EIF.
:NoSpecial
' Prevent too many Linefeeds in Result
$$CMD=$crlf$$$BTT$crlf$
RPL.$$CMD|$crlf$$crlf$|$crlf$
RET.
'-----------------------------------------------------------
'[?File?]
:FileDialog
CAL.$$TMB=$$POS+7
STR.DELETE|$$BTT|$$POS|$$TMB
CLP.r|$$CLI
VRT.$$CLI|\
$$CLI=$$CLI\
IEF.$$CLI
$$STA=$$CLI
ELS.
$$STA=?desktop\
EIF.
:retry
DFD.$$FID|Please choose the File|$$STA
JIT.retry
NEF.$$FID
MBX.File does not exist. Please try again.||File-Warning.
GTO.retry
EIF.
STR.INSERT|$$BTT|$$POS|$$FID
RET.
'-----------------------------------------------------------
'-----------------------------------------------------------
' $$ALJ -> Letztes Input
' [ in $$POS
:SpecialOpt
VAR.$$BTT=$$BTT$crlf$
' Input in $$ALI
CAL.$$TMC=$$POS+4
' [INP] löschen
STR.DELETE|$$BTT|$$POS|$$TMC
$$EOL=$crlf$
VAR.$$WHA=
STR.FIND|$$BTT|$$POS|$$EOL
' $$WHE ist nun Zeilenende hinter [INP]
VAR.$$WHE=$tos$
' Falls keine Parameter hinter [INP] sind
VAR.$$ALK=
IVV.$$WHE=$$POS
$$WHA=
VAR.$$WHB=$$WHA
ELS.
' $$WHA contains all Characters behind the [INP] until EOL
GSS.$$POS|($$WHE-1)|$$BTT|$$WHA
' Aus Quellstring löschen
STR.DELETE|$$BTT|$$POS|($$WHE-1)
'Alles hinter "!" wird als Default-Value genommen
IVC.$$WHA=!
VAR.$$POT=$tos$
GSS.1|($$POT-1)|$$WHA|$$WHB
GSS.($$POT+1)|0|$$WHA|$$ALK
ELS.
VAR.$$WHB=$$WHA
EIF.
EIF.
LEN.$$ALJ|$$LEN
IVV.§§TMC=§§TML
IVV.$$LEN<2
VAR.$$ALJ=$$ALK
EIF.
EIF.
RPL.$$BTT|$crlf$$crlf$|$crlf$
RPL.$$BTT|$sp$$sp$|$sp$
GUT.$$WHB||$$ALJ|$$ALI
PAU..5
VBT.$$ALI
VAR.$$ALJ=$$ALI
VBT.$$ALI|,
' $$ALC enthält Anzahl der ","
GSC.$$ALI|,|$$ALC
' Anzahl der übergeben Parameter in $$ALC
VIC.$$ALC
VAR.§§TML=§§TMC
RET.
'-----------------------------------------------------------
' Work on [INP1]
' 12345
:SpecialOptB
NVC.$$BTT=$$CIN
GTO.NoSpec
EIF.
VAR.$$POA=$tos$
CAL.$$POE=$$POA+5
CAL.$$POF=$$POE+1
' Testen ob korrekte Syntax [INP1] ... [INP9]
GSS.$$POE|$$POE|$$BTT|$$TMA
IVS.$$TMA!]
GTO.NoSpec
EIF.
' Holen der Zahl hinter INP in $$NUA
CAL.$$POG=$$POA+4
GSS.$$POG|$$POG|$$BTT|$$NUA
IVV.$$NUA|<|1
GTO.NoSpec
EIF.
' Ist Parameter mit der number übergeben worden?
IVV.$$NUA|>|$$ALC
GTO.NoSpec
EIF.
' Parameter holen in $$NUB
SBD.$$ALI|,|$$NUA|$$NUB
' Im Original ersetzen
VAR.$$NUC=[INP$$NUA]
RPL.$$BTT|$$NUC|$$NUB
' Können etliche Paramter in jeder Zeile sein
GTO.SpecialOptB
:NoSpec
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
'-----------------------------------------------------------
'
'-----------------------------------------------------------
' Resultat in $$NOE und auf Stack
:Count_Layers
VAN.$$NOE=0
FOR.$$LOP|1|9
PUS.$$LOP
GSB.GenLFP
POP.$$DIN
IEF.$$DIN
VIC.$$NOE
ELS.
GTO.Outc
EIF.
NEX.
:Outc
PUV.$$NOE
RET.
'-----------------------------------------------------------
' Layernumber in $$LAY
' Buttonnumber in $$NTX
' Rückgabe in $$NFN
:ConstructCompleteFN
FMT.$$LAY|0
FMT.$$NTX|00
VAR.$$NFN=$$LAP$$LAY\Button$$NTX.txt
RET.
' Generate Layer-Folder-Name
' Input Number of Layer on Stack
' Output: Folder Name like BE2 on Stack
:GenLFP
POP.$$A01
FMT.$$A01|1
VAR.$$A00=$$LAP$$A01\
VBT.$$A00
PUV.$$A00
RET.
'-----------------------------------------------------------
'-----------------------------------------------------------
'-----------------------------------------------------------
'
'-----------------------------------------------------------
' Check if First Run
:FirstRun
' Default button-Text
VAR.$$NTX=1
VAR.$$LAY=1
GSB.ConstructCompleteFN
NEF.$$NFN
GSB.FirstRunB
EIF.
RET.
'-----------------------------------------------------------
:FirstRunB
$$PBT=$$OFN
' Create 9 Button_Files
FOR.$$LOP|1|9
VAR.$$DEF=#Button $$LOP$crlf$$$CMA
VAR.$$NTX=$$LOP
VAR.$$NTX=$$LOP
VAR.$$LAY=1
GSB.ConstructCompleteFN
NEF.$$NFN
CTF.$$NFN|$$DEF
EIF.
NEX.
RET.
'-----------------------------------------------------------
' FAST and SLOW
'-----------------------------------------------------------
:SetOpt
CAL.$$SLO=1-$$SLO
IVV.$$SLO=1
NEF.$$SLF
CTF.$$SLF|Slowmode
EIF.
ELS.
DEL.$$SLF
EIF.
GSB.SetTxt
RET.
'-----------------------------------------------------------
' Prüfe auf SLOW.txt
:CheckSlow
IEF.$$SLF
$$SLO=1
ELS.
$$SLO=0
EIF.
RET.
'-----------------------------------------------------------
:SetTxt
IVV.$$SLO=1
$$SPD=SLOW
ELS.
$$SPD=FAST
EIF.
PIS.$$REA|sBt|$$SP2|$$SPD
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
:SaveWinSizeIf
CFI.$$SEI|Blender|SizeSet|$$SEJ
IVV.$$SEJ=0
GSB.SaveWinSize
EIF.
RET.
'-----------------------------------------------------------
:SaveWinSize
SCW.h|$$ULT
GWP.$$XPO,$$YPO|$$XSZ,$$YSZ
CTI.$$SEI|Blender|XPos|$$XPO
CTI.$$SEI|Blender|YPos|$$YPO
CTI.$$SEI|Blender|XSize|$$XSZ
CTI.$$SEI|Blender|YSize|$$YSZ
CTI.$$SEI|Blender|SizeSet|1
RET.
'-----------------------------------------------------------
:RestoreWinSize
CFI.$$SEI|Blender|SizeSet|$$SEJ
IVV.$$SEJ=1
CFI.$$SEI|Blender|XPos|$$XPO
CFI.$$SEI|Blender|YPos|$$YPO
CFI.$$SEI|Blender|XSize|$$XSZ
CFI.$$SEI|Blender|YSize|$$YSZ
SCW.h|$$ULT
SWP.$$XPO,$$YPO|$$XSZ,$$YSZ
EIF.
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
:RunIt
IEF.$$DMM
EXS.$$DMM
ELS.
MBX.Sorry ...$crlf$$$DMM$crlf$ not found.
EIF.
RET.
'-----------------------------------------------------------
:RunButtonswitcher
VAR.$$DMM=?exeloc\SwitchButton.exe
GSB.RunIt
RET.
'-----------------------------------------------------------
:RunDesktops
VAR.$$DMM=?exeloc\Desktops_Manager.exe
GSB.RunIt
RET.
'-----------------------------------------------------------
'
'-----------------------------------------------------------
:Definitions
' Get Screen DPI
DPI.s|$$DPX,$$DPY
VAF.$$SLF=?exeloc\Slow.txt
VAF.$$WIF=?exeloc\Blendersize.txt
' The Prefix of the Directories with the Buttons
VAR.$$LYN=BE
'VAF.$$OFN=?exeloc\$$LYN?\Button**.txt
VAR.$$LAP=?exeloc\$$LYN
VAR.$$LIA=?exeloc\Library
VAR.$$LIB=?exeloc\
RPL.$$LIB|\|/
RPL.$$LIB|//|/
RPL.$$LIB|/|//|b
VAR.$$ADL=Add Library
' This will be replaced with the path to the Library Folder
VAR.$$COD=[?lib]
VAR.$$DFD=[?File?]
VAR.$$FOD=filename=
' Sample Code for Sample-Buttons
VAR.$$CMA=bpy.ops.ptcache.free_bake_all()$crlf$bpy.ops.ptcache.bake_all(bake=True)$crlf$
' The Delimiter between the Python-Code for left and right Mousebutton
VAR.$$RMB=[OnRightMouseButton!]
' This will be replaced with a 4 digit random number
VAR.$$UNF=[?RND4?]
' Dispaly User-Input Box. Input is comma separated and goes to [INP1],[INP2]...
VAR.$$COI=[INP]
' This is the prefix for [INP1][INP2]...
VAR.$$CIN=[INP
' Aktueller Button-Layer (Button-Ebene)
VAN.$$LAY=1
' Default Input ist leer
VAR.$$ALJ=
' Button-Farben
$$COM=&HA2A2A2
$$COL=&HA0A0A0
' Button-Ordner 1 erstellen falls nicht vorhanden
VAR.$$FOA=?exeloc\BE1\
NEF.$$FOA
MKD.$$FOA
EIF.
' Last Button-Number
VAR.§§TML=0
' Immer 2 Top-Buttons
VAN.$$TOB=2
' Settings about the BB
VAR.$$SEI=?exeloc\Settings.ini
VAR.$$HID=0
VAR.$$CRL=$crlf$
RET.
'-----------------------------------------------------------
:FindBlender
NEP.Blender.exe
:RunOwn
GEP.XXXXX.blend|$$BIS
EXE.$$BIS|-con
$$PID=#pid#
STW.BctoXwp|Ghost_Windowclass|Blender|noBlend|250|$$PID
ELS.
' Falls Blender auf anderem Desktop läuft oder minimized ist
STW.BctoXw|Ghost_Windowclass|Blender|RunOwn|5
IWI.t
GTO.RunOwn
EIF.
$$PID=#pid#
EIF.
' Store the window handle in a variable
HTV.$$ULT
CFI.$$SEI|Blender|SizeSet|$$SEJ
IVV.$$SEJ=1
GSB.RestoreWinSize
ELS.
' Neue Fenstergröße ausrechnen
CAL.$$NSX=#wsx#/100*90|i
CAL.$$NSY=#wsy#/100*90|i
MBX. $$NSX-$$NSY
SWP.0,0|$$NSX,$$NSY|F
' Blender-WindSize speichern wenn noch nicht geschehen
GSB.SaveWinSizeIf
EIF.
' Treat Console-Window
STW.Xctwop|ConsoleWindowClass|blender|0|noCons|$$PID
SWP.rb,bb||T
:noCons
:GetCoords
' Koordinaten des Blender Fensters unten rechts
VAR.$$RIG=#ir#
VAR.$$BOT=#ib#
' Klick-Koordinaten
CAL.$$CLX=$$RIG-100
CAL.$$CLY=$$BOT-100
RET.
'-----------------------------------------------------------
'-----------------------------------------------------------
:noBlend
MBX.I did not find the Main-Window from Blender.$crlf$Please get support.$crlf$Program ends.
END.
RET.
'-----------------------------------------------------------
' Here is the Management for the System-Buttons
'-----------------------------------------------------------
' Input: Number of Buttons on Stack
' $$TBN - total Button Number wird gesetzt auf totale Button-Anzahl inkl. END und Switch
'
:SetButtonText
' Zeiger auf 1. Button wird immer erhöht
VAN.$$PBZ=1
' Button Anzahl ohne Systembutton
POP.$$BNU
' Nur auf Layer 1 die Buttons END und FAST
CAL.$$LAI=$$PBZ-1
IVV.$$LAY!1
CAL.$$TBN=$$BNU+3
ELS.
CAL.$$TBN=$$BNU+7
'Zwei Switch Button auf L1 und 4 System-Buttons
EIF.
' Buttionanzahl setzen
PIS.$$REA|sbn|$$TBN
' gelber Switch Layer-Button
GSB.Paint_SwitchLayerButton
GSB.Paint_SwitchFast
' Button Texte setzen
FOR.$$LOP|1|$$BNU
VAR.$$NTX=$$LOP
GSB.ConstructCompleteFN
IEF.$$NFN
CAL.$$FIB=$$PBZ
TXT.Load_Textfile|$$NFN
TXT.Get_Line_Trimmed|1|$$BTX
VLT.$$BTX|#
PIS.$$REA|sBt|$$FIB|$$LOP. $$BTX
GSB.SetBtCol
EIF.
VIC.$$PBZ
NEX.
' Spezialbuttons
IVV.$$LAY=1
' Add Systen-Button with Multi-Functions
GSB.MultiButton
' Add Openlib-Button
GSB.OpenLib
GSB.AddHide
' Add END and FAST if Layer 1
GSB.AddEFast
EIF.
GSB.AddEnd
RET.
'-----------------------------------------------------------
:SetBtCol
IVC.$$BTX=$$ADL
' Adlib-Farbe ' Orange - &H00AAFF/80CAFF rot - &HE2E2FF drk.blue: &H80CAFF
IVV.$$ADO=0
$$COL=&H80CAFF
$$ADO=1
ELS.
$$COL=&HFFFAA0
EIF.
ELS.
IVC.$$BTT=$$RMB
$$COL=&HE2F2F2
ELS.
$$COL=&HE0E0E0
EIF.
EIF.
:SetCol
PIS.$$REA|sbbc|$$FIB|$$COL
RET.
'-----------------------------------------------------------
:Set_Fast_Values
SCS.$$LAM
CAN.1
$$LAE=1
$$LAD=1
GTO.Paint_Fast
CAN.2
$$LAE=1
$$LAD=2
GTO.Paint_Fast
CAE.
$$BIU=2
ESC.
' rechte Seite
CAL.$$LAD=$$LAY+$$BIO
IVV.$$LAD>$$LAM
CAL.$$LAD=$$LAD-$$LAM
EIF.
' linke Seite
CAL.$$LAE=$$LAY-$$BIU
IVV.$$LAE<1
CAL.$$LAE=$$LAE+$$LAM
EIF.
:Paint_Fast
RET.
'-----------------------------------------------------------
:Paint_SwitchFast
$$SLC=$$PBZ
GSB.Set_Fast_Values
VAV.$$TXA=$$LAD <- [$$LAY] -> $$LAE
PIS.$$REA|sBt|$$SLC|$$TXA
PIS.$$REA|sbbc|$$SLC|&H00FFCC
' Zeiger auf nächsten Button im Plugin
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:Paint_SwitchLayerButton
$$SLB=$$PBZ
CAL.$$LAD=$$LAY+1
IVV.$$LAD>$$LAM
$$LAD=1
EIF.
CAL.$$LAE=$$LAY-1
IVV.$$LAE<1
$$LAE=$$LAM
EIF.
VAV.$$TXA=$$LAD <- [$$LAY] -> $$LAE
PIS.$$REA|sBt|$$SLB|$$TXA
' Orange - &H00AAFF
PIS.$$REA|sbbc|$$SLB|&H00FFEE
' Zeiger auf nächsten Button im Plugin
VIC.$$PBZ
RET.
'-----------------------------------------------------------
' UNUSED
' $$TXA=OpenLib
' $$TXA=Save Blender-Size
' $$TXA=Restore Blender-Size
' $$TXA=Run Desktops Manager
' $$TXA=Run ButtonSwitcher
'-----------------------------------------------------------
:MultiButton
' Spezialbutton 1 (SP1-SP4)
VAN.$$SP4=$$PBZ
$$TXA=Save/Restore Blender
PIS.$$REA|sBt|$$SP4|$$TXA
PIS.$$REA|sbbc|$$SP4|&H00FFCC
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:OpenLib
' Spezialbutton 1 (SP1-SP4)
VAN.$$SP3=$$PBZ
$$TXA=OpenLib/Kill Blend.
PIS.$$REA|sBt|$$SP3|$$TXA
PIS.$$REA|sbbc|$$SP3|&H00FFAA
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:AddEFast
' Fast-Button
VAN.$$SP2=$$PBZ
PIS.$$REA|sBt|$$SP2|Fast
PIS.$$REA|sbbc|$$SP2|&H00FF66
' Text für FAST-Button
GSB.SetTxt
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:AddHide
' Hide-Button
VAN.$$SP5=$$PBZ
PIS.$$REA|sBt|$$SP5|HIDE/OnTop:$$I09
PIS.$$REA|sbbc|$$SP5|&H00FF88
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:AddEnd
' END-Button
VAN.$$SP1=$$PBZ
PIS.$$REA|sBt|$$SP1|END
PIS.$$REA|sbbc|$$SP1|&H00FF00
VIC.$$PBZ
RET.
'-----------------------------------------------------------
:Lab_OnTop
CAL.$$I09=1-$$I09
PIS.$$REA|stm|$$I09
PIS.$$REA|sBt|$$SP5|HIDE/OnTop:$$I09
RET.
'-----------------------------------------------------------
:Lab_HIDE
VAN.$$HID=1
PIS.$$REA|sbn|1
PIS.$$REA|sbhs|40
PIS.$$REA|sBt|1|U
PIS.$$REA|sbbc|1|&HFF0000
RET.
'-----------------------------------------------------------
:Lab_UnHide
PIS.$$REA|sbhs|$$I08
GSB.Init_Button_Layer
VAN.$$HID=0
RET.
'-----------------------------------------------------------
' Tooltips nur wenn nicht "OnTop"
:Tooltips
IVV.$$I10=1
IVV.$$I09=0
PIS.$$REA|gmb
VAN.$$ATT=$tos$
PIS.$$REA|gh|$$ATT
VAN.$$ATU=$tos$
' Button-Nr. - Layer-Nr. - Buttonhwnd.
$$MSG=ENT.$$ATT-$$LAY-$$ATU
SIK.qued Message|$$TIA|$$MSG
$$ATM=$$ATL
EIF.
EIF.
RET.
'-----------------------------------------------------------
:OnLeave
IVV.$$I10=1
IVV.$$I09=0
PIS.$$REA|gmb
VAN.$$ATL=$tos$
$$MSG=LEA.$$ATT-$$LAY
SIK.qued Message|$$TIA|$$MSG
EIF.
EIF.
RET.
'-----------------------------------------------------------
:Auswertung
'DBP.$$RET
' Get Button number out of $$RET into §§TMA
SBD.$$RET|$sp$|1|§§TMA-$$LAY
' Button Action into §§TMB
SBD.$$RET|$sp$|2|§§TMB
JIS.§§TMB=!normal!|enk
JIS.§§TMB=!Closed!|enk
JIS.§§TMB=!Iconic!|enk
JIS.§§TMB=!nsize!|enk
'-----------------------------------------------------------
' HIDE-Button
IVV.$$HID=1
IVV.§§TMA=1
GSB.Lab_UnHide
EIF.
GTO.enk
EIF.
' Tooltips
IVS.§§TMB=!M!O!
GSB.Tooltips
GTO.enk
EIF.
IVS.§§TMB=!M!L!
GSB.OnLeave
GTO.enk
EIF.
'-----------------------------------------------------------
' Normal Click LMB
SCS.§§TMB
CAS.!P!
VAR.$$RMF=0
GTO.More
' react on right Buttonpress
CAS.!R!
' Switch Button-Layer
VAR.$$RMF=1
GTO.More
CAS.!P!D!
' Left Doubleclick
' Switch Button-Layer fast
IVV.§§TMA=$$SLB
GSB.FastLayer
MSB.4170|1
GTO.enk
EIF.
CAE.
' Doppelklick woanders wie Klick
$$RMF=0
GTO.More
ESC.
' Für alle Layer gemeinsam
:More
' Switch Button-Layer
SCS.§§TMA
CAN.$$SLB
IVV.$$RMF=1
GSB.RevLayer
GTO.enk
ELS.
GSB.NextLayer
GTO.enk
EIF.
CAN.$$SLC
GSB.Set_Fast_Values
IVV.$$RMF=0
CAL.$$LAY=$$LAD
ELS.
CAL.$$LAY=$$LAE
EIF.
GSB.NewLayer
GTO.enk
ESC.
' END abprüfen
IVV.§§TMA=$$SP1
GTO.enz
EIF.
:OnlyOneSB
IVV.$$LAY=1
SCS.§§TMA
CAN.$$SP5
IVV.$$RMF=1
GSB.Lab_OnTop
ELS.
GSB.Lab_HIDE
EIF.
CAN.$$SP4
IVV.$$RMF=0
GSB.SaveWinSize
ELS.
GSB.RestoreWinSize
EIF.
GTO.enk
CAN.$$SP3
IVV.$$RMF=1
GSB.KillBlend
ELS.
' OpenLib nur in Button-Layer 1
IEF.$$LIA\
EXS.$$LIA\
EIF.
EIF.
GTO.enk
CAN.$$SP2
' FAST-Button
GSB.SetOpt
CAE.
GTO.DoMyButtons
ESC.
GTO.enk
EIF.
:DoMyButtons
' Alle Anderen Buttons hier
' $$TOB - Anzahl der Top-Buttons
CAL.$$NTX=§§TMA-$$TOB
JIV.$$NTX>$$SP1|enk
'MBX.$$NTX$crlf$§§TMA$crlf$$$TOB
GSB.ConstructCompleteFN
NEF.$$NFN
MBX.File "$$NFN" can not be loaded.
GTO.enk
EIF.
GSB.GetTextFile
GSB.RMB_Process
GSB.writeCMD
:enk
RET.
'-----------------------------------------------------------
' Tested Ready
'-----------------------------------------------------------
:KillBlend
MBT.Press Ok to Kill Blender-Prozess!|Want Kill Blender?|32|(4+48+256)|$$RES
IVV.$$RES=6
CPR.$$PID|5000
EIF.
GTO.FindBlender
RET.
'-----------------------------------------------------------
:Init_plugin
PIL.$$REA|01
PIS.$$REA|hide
PIS.$$REA|GetHandle
$$PIH=$tos$
NEF.$$SEI
' ButtonHdistance
VAN.$$I00=4
CTI.$$SEI|Buttons|ButtonHdistance|$$I00
VAR.$$I01=sv
CTI.$$SEI|Position|show|$$I01
VAN.$$I02=-2
CTI.$$SEI|Position|Adjust_A|$$I02
VAN.$$I04=-5
CTI.$$SEI|Position|Adjust_B|$$I04
' attach the Plugin to the window
' 1 - Links 2 - Rechts 3 - links inside, 4 - rechts inside
' 5 - links inside bündig, 6 -rechts inside bündig
'
VAN.$$I05=2
CTI.$$SEI|Position|Side_H|$$I05
VAN.$$I06=1
CTI.$$SEI|Position|Side_V|$$I06
VAN.$$I07=4
CTI.$$SEI|Buttons|ButtonVdistance|$$I07
VAN.$$I08=180
CTI.$$SEI|Buttons|Length|$$I08
VAN.$$I09=1
CTI.$$SEI|Position|OnTop|$$I09
VAN.$$I10=1
CTI.$$SEI|Tooltips|Enabled|$$I10
ELS.
' Buttondistance
VAN.$$I00=4
CFI.$$SEI|Buttons|ButtonHdistance|$$I00
VAR.$$I01=sv
CFI.$$SEI|Position|show|$$I01
VAN.$$I02=-2
CFI.$$SEI|Position|Adjust_A|$$I02
VAN.$$I04=-5
CFI.$$SEI|Position|Adjust_B|$$I04
' attach the Plugin to the window, 2 - right side, 1 - ganz oben
VAN.$$I05=2
CFI.$$SEI|Position|Side_H|$$I05
VAN.$$I06=1
CFI.$$SEI|Position|Side_V|$$I06
VAN.$$I07=4
CFI.$$SEI|Buttons|ButtonVdistance|$$I07
VAN.$$I08=180
CFI.$$SEI|Buttons|Length|$$I08
VAN.$$I09=0
CFI.$$SEI|Position|OnTop|$$I09
VAN.$$I10=1
CFI.$$SEI|Tooltips|Enabled|$$I10
EIF.
' Plugin vertikal anordnen Buttondistanz 4 Pixel
PIS.$$REA|sbhd|$$I00
PIS.$$REA|$$I01
PIS.$$REA|scf|$$I02|0|$$I04
PIS.$$REA|attach|$$ULT|$$I05|$$I06
PIS.$$REA|hide
' Set Distance between buttons (vertical in Points)
PIS.$$REA|sbvd|$$I07
' Setze Breite der Buttons
PIS.$$REA|sbhs|$$I08
PIS.$$REA|stm|$$I09
IVV.$$I10=1
GSB.Parallel
EIF.
RET.
'-----------------------------------------------------------
'-----------------------------------------------------------
' Helps with Plugin and Tooltipps
:Parallel
PRR.0
$$ROH=#cbw#
GDF.hp|$$ROH|$$PII
VAR.$$RUN=1
DOL.($$RUN=1)
WIK.|Message Any|$$MSG
GSS.2|0|$$MSG|$$MSG
JIS.$$MSG=EXIT|enc
GSS.1|3|$$MSG|$$CMD
GSS.5|0|$$MSG|$$PAR
SCS.$$CMD
CAS.LEA
GSB.PRR_Close_TT
CAS.ENT
GSB.PRR_Set_TT
CAS.GDA
GSB.PRR_GetData
ESC.
OOP.
:enc
ENR.
PRE.$$TIC
VAR.$$TIA=#pcun#
RET.
'-----------------------------------------------------------
' Tooltip-Engine
'-----------------------------------------------------------
' bekommt Anzahl der Buttons und Layernumber
:PRR_GetData
BCH.$$PAR|-||$$TBN
ACH.$$PAR|-||$$LAY
CAL.$$SP1=$$TBN
IVV.$$LAY=1
CAL.$$SP2=$$TBN-1
CAL.$$SP3=$$TBN-2
CAL.$$SP4=$$TBN-3
CAL.$$SP5=$$TBN-4
EIF.
RET.
'-----------------------------------------------------------
:PRR_Set_TT
BCH.$$PAR|-||$$BUT
ACH.$$PAR|-||$$LAY
ACH.$$PAR|-|2|$$HWN
'PRT.PL: Layer $$LAY -- Hwnd:$$HWN --- Button-Nr.$$BUT
IVV.$$LTT!$$BUT
' Switch Buttons
IVV.$$BUT<3
$$BTX=Use this Buttons to switch between the Button-Layers.$crlf$
$$BTX=$$BTXThey are made in a way that you will reach any Layer within 1-2 Clicks.
GTO.PRR_SetText
EIF.
CAL.$$NTX=$$BUT-2
IVV.$$BUT=$$SP1
$$BTX=*END* This Button will close the Buttonbar.
GTO.PRR_SetText
EIF.
IVV.$$LAY=1
SCS.$$BUT
CAN.$$SP2
$$BTX=*FAST* Here you can set the Typing-Speed of the Buttonbar to FAST or to SLOW.
CAN.$$SP3
$$BTX=LMB:*HIDE*/Minimze Buttonbar.$crlf$RMB: Change "OnTop"-Behavior from Buttonbar.$crlf$1 - BB is on Top (no Tooltips).$crlf$0 - BB is "Normal", here Tooltipps are possible.
CAN.$$SP4
$$BTX=LMB:*Openlib* this will open the Library-Folder in an Explorer Window.$crlf$RMB:*Kill Blender* this will kill the Blender-Process which the Buttonbar hangs on.$crlf$No Danger for other running Blender Versions.
CAN.$$SP5
$$BTX=LMB:*SAVE* This will save the current Size and Position of the Blender Window.$crlf$Into the Settings.ini-File.$crlf$RMB:*RESTORE* this will restore the Blender Windows Size and Position that was saved before.
CAE.
GTO.PRR_Getfile
ESC.
GTO.PRR_SetText
ELS.
GTO.PRR_Getfile
EIF.
:PRR_Getfile
GSB.ConstructCompleteFN
IEF.$$NFN
GSB.GetTextFile
GSB.PRR_TT
GTO.PRR_SetText
EIF.
EIF.
RET.
'-----------------------------------------------------------
:PRR_Close_TT
STW.ABcwXop|Ballontext|0|NoBall|$$PII
CLW.
GTO.PRR_Close_TT
:NoBall
RET.
'-----------------------------------------------------------
:GetTextFile
TXT.Load_Textfile|$$NFN
TXT.Get_pure_Text|$$BTT
TXT.Replace_in_Text|**_$crlf$|**
'CFF.$$NFN|$$BTT
'VLT.$$BTT|$$CRL$sp$
'RPL.$$BTT|**_$crlf$|**|e
RET.
'-----------------------------------------------------------
:PRR_TT
SBD.$$BTT|$$CRL|2|$$BTX
RPL.$$BTX|**|$$CRL|e
RET.
'-----------------------------------------------------------
:PRR_SetText
VAR.$$PAI=FS:10 T:50
SCW.h|$$HWN
SBT.$$BTX|$$PAI
$$LTT=$$PAR
RET.
'-----------------------------------------------------------
'-----------------------------------------------------------
END.
Remarks
-
Limitations:-
-
See also:
•