Sample Code Buttonbar for Blender

<< Click to Display Table of Contents >>

Navigation:  3. Script Language > PlugIn-Commands > PIS. - PlugIn Send >

Sample Code Buttonbar for Blender

Buttonbar for Blender-Sample Code

Previous Top Next


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.

 

 

L1_Large

 

 

 

 

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:

 

    PIL. - PlugIn Launch

    PIS. - PlugIn Send

    PIW. - PlugInWait