typeof bmpcolor = ObjBitmap;; typeof winColor = ObjWin;; typeof font = ObjFont;; typeof sliColorAlpha = ObjSlider;; typeof txtAlphaValue = ObjText;; typeof cColorCycle = ObjCheck;; typeof txtSizeMax = ObjText;; typeof cSizeConst = ObjCheck;; typeof winSize = ObjWin;; typeof txtExpertInfinit = ObjText;; typeof cmExpertVolume = ObjBox;; typeof txtExpertVolumeSphereRadiusMsg = ObjText;; typeof txtExpertVolumeSphereRadius = ObjText;; typeof txtExpertVolumeConeMsg = ObjText;; typeof txtExpertVolumeConeLong = ObjText;; typeof txtExpertVolumeConeLarg = ObjText;; typeof txtExpertVolumeConeHaut = ObjText;; typeof txtExpertVolumePlanMsg = ObjText;; typeof txtExpertVolumePlanLong = ObjText;; typeof txtExpertVolumePlanLarg = ObjText;; typeof txtExpertVolumeLineMsg = ObjText;; typeof txtExpertVolumeLineLong = ObjText;; typeof cmExpertEffect = ObjBox;; typeof txtExpertEffectConstantMsg = ObjText;; typeof txtExpertEffectConstantX = ObjText;; typeof txtExpertEffectConstantY = ObjText;; typeof txtExpertEffectConstantZ = ObjText;; typeof txtExpertEffectElectricMsg = ObjText;; typeof txtExpertEffectElectricAX = ObjText;; typeof txtExpertEffectElectricAY = ObjText;; typeof txtExpertEffectElectricAZ = ObjText;; typeof txtExpertEffectElectricBX = ObjText;; typeof txtExpertEffectMagneticMsg = ObjText;; typeof txtExpertEffectMagneticAX = ObjText;; typeof txtExpertEffectMagneticAY = ObjText;; typeof txtExpertEffectMagneticAZ = ObjText;; typeof txtExpertEffectMagneticBX = ObjText;; typeof txtExpertEffectChaotic0Msg = ObjText;; typeof txtExpertEffectChaotic0AX = ObjText;; typeof txtExpertEffectChaotic0AY = ObjText;; typeof txtExpertEffectChaotic0AZ = ObjText;; typeof txtExpertEffectChaotic0BX = ObjText;; typeof txtExpertEffectChaotic0BY = ObjText;; typeof txtExpertEffectChaotic0BZ = ObjText;; typeof txtExpertEffectChaotic1Msg = ObjText;; typeof txtExpertEffectChaotic1AX = ObjText;; typeof txtExpertEffectChaotic1AY = ObjText;; typeof txtExpertEffectChaotic1AZ = ObjText;; typeof txtExpertEffectChaotic1BX = ObjText;; typeof txtExpertEffectChaotic1BY = ObjText;; typeof txtExpertEffectChaotic1BZ = ObjText;; typeof txtExpertEffectHelicoidMsg = ObjText;; typeof txtExpertEffectHelicoidAX = ObjText;; typeof txtExpertEffectHelicoidAY = ObjText;; typeof txtExpertEffectHelicoidAZ = ObjText;; typeof txtExpertEffectHelicoidBX = ObjText;; typeof txtExpertEffectHelicoidBY = ObjText;; typeof txtExpertEffectHelicoidBZ = ObjText;; typeof cExpertBillboard = ObjCheck;; typeof cExpertRainbow = ObjCheck;; typeof txtExpertMasse = ObjText;; typeof winHelp = ObjWin;; typeof colorInit = S;; typeof colorInitClick = I;; typeof listSizes = [[F F] r1];; typeof listSizesOld = [[F F] r1];; proto plugloc = fun [S] S;; proto plughelp = fun [S] S;; proto stopParticles = fun [] I;; proto setParticleInitColor = fun [I H3d] I;; proto setParticleInitColorAlpha = fun [I H3d] I;; proto setParticleColorCycle = fun [I H3d] I;; proto setParticlesLife = fun [F H3d] I;; proto setParticulesVolumeSphere = fun [F H3d] I;; proto setParticleVolumeCone = fun [I F H3d] I;; proto setParticleVolumePlan = fun [I F H3d] I;; proto setParticleVolumeLine = fun [F H3d] I;; proto setParticlesEffectConstant = fun [[F F F] H3d] I;; proto setParticlesEffectElectric = fun [[F F F][F F F] H3d] I;; proto setParticlesEffectMagnetic = fun [[F F F][F F F] H3d] I;; proto setParticlesEffectChaotic0 = fun [[F F F][F F F] H3d] I;; proto setParticlesEffectChaotic1 = fun [[F F F][F F F] H3d] I;; proto setParticlesEffectHelicoid = fun [[F F F][F F F] H3d] I;; proto setParticleVarSizes = fun [[[F F] r1] H3d] I;; /* MISC. */ /* Retourne la valeur de durée de vie en fonction de l'abscisse du clic l -> [[I I] r1] : listSizes w -> I : largeur de la fenêtre du graph x -> I : pos x du clic m -> I : marge autour de la position réelle pour acceptation <- I : valeur de la durée de vie */ fun getLifeByX(l, w, x, m)= if l == nil then nil else let hd l -> [vie _] in let 25+((ftoi vie)*((w-30)/100)) -> v in if x >= (v-m) && x < (v+m) then ftoi vie else getLifeByX tl l w x m;; fun replaceTailleInListSizes(l, vie, taille)= if l == nil then nil else let hd l -> [v t] in if v == vie then [vie taille] :: (tl l) else (hd l) :: replaceTailleInListSizes tl l vie taille;; /* SIZE */ fun getSizes(l, out)= if l == nil then linebuild out else let hd l -> [_ taille] in ( set out = (ftoa taille) :: out; getSizes tl l out );; fun size_initList(m)= let itof m -> m in set listSizes = [0.0 m] :: [10.0 m] :: [20.0 m] :: [30.0 m] :: [40.0 m] :: [50.0 m] :: [60.0 m] :: [70.0 m] :: [80.0 m] :: [90.0 m] :: [100.0 m] :: nil;; /* Création du graph des tailles en fonction de la durée de vie des particules */ fun size_winCrGraph(w, h, m, l)= if l == nil then 0 else let hd l -> [vie taille] in let hd tl l -> [vie2 taille2] in let ftoi vie -> vie in let ftoi taille -> taille in let ftoi vie2 -> vie2 in let ftoi taille2 -> taille2 in let 25+(m-taille)*(h-20-25)/m -> y in let 25+(m-taille2)*(h-20-25)/m -> y2 in let 25+(vie*((w-30)/100)) -> x in let 25+(vie2*((w-30)/100)) -> x2 in ( _PAINTcircle winSize x y 4 DRAW_INVISIBLE 0 0 DRAW_SOLID 0x00ff00; if vie2 != nil then _PAINTline winSize x y x2 y2 DRAW_SOLID 1 0x00ff00 else nil; size_winCrGraph w h m tl l );; /* Création des axes et des labels du graph fun [] I */ fun size_winCrAxes()= let _GETwindowSizePosition winSize -> [w h _ _] in let atoi _GETtext txtSizeMax -> m in ( _CLRwindow winSize; _PAINTline winSize 25 20 25 h-15 DRAW_SOLID 1 0; _PAINTline winSize 20 h-20 w-50 h-20 DRAW_SOLID 1 0; _TXTout winSize font 200 5 TD_LEFT|TD_TOP 0 plugloc "SIZE_CONF"; _TXTout winSize font 1 25 TD_LEFT|TD_BASELINE 0 "100%"; _TXTout winSize font 10 h-5 TD_LEFT|TD_BASELINE 0 "0"; _TXTout winSize font w-70 h-5 TD_LEFT|TD_BASELINE 0 "100%"; _TXTout winSize font 10 3 TD_LEFT|TD_TOP 0 plugloc "SIZELINE"; _TXTout winSize font (w/2) h-5 TD_CENTER|TD_BASELINE 0 plugloc "TIMELINE"; _TXTout winSize font w-2 h-60 TD_RIGHT|TD_BASELINE 0xff0000 "UNDO"; _TXTout winSize font w-2 h-40 TD_RIGHT|TD_BASELINE 0xff0000 "REDO"; _TXTout winSize font w-2 h-20 TD_RIGHT|TD_BASELINE 0xff0000 "RESET"; if (_GETcheck cSizeConst) then nil else _TXTout winSize font w/2 h/2 TD_CENTER|TD_BASELINE 0xff0000 plugloc "SIZEWIN_DISABLED"; size_winCrGraph w h m listSizes; );; fun size_sizeConst(obj, u, state)= size_winCrAxes; _ENwindow winSize state;; fun size_winPaint(obj, u)= size_winCrAxes;; fun size_winClick(obj, obj3d, x, y, btn)= let _GETwindowSizePosition winSize -> [w h _ _] in let atoi _GETtext txtSizeMax -> m in let getLifeByX listSizes w x (w-70)/10 -> vie in if x > (w-35) && y > (h-68) && y < (h-52) then // undo let listSizes -> old in ( set listSizes = listSizesOld; set listSizesOld = old; size_winCrAxes ) else if x > (w-35) && y > (h-48) && y < (h-32) then // redo let listSizesOld -> new in ( set listSizesOld = listSizes; set listSizes = new; size_winCrAxes ) else if x > (w-35) && y > (h-28) && y < (h-12) then // reset let listSizes -> old in ( set listSizes = size_initList m; set listSizesOld = old; size_winCrAxes ) else if y > 25 && y < (h-20) && vie != nil then // graph let m-ftoi(((itof(y-25))/.99.0)*.(itof m)) -> taille in let if taille > m then m else taille -> taille in ( set listSizesOld = listSizes; set listSizes = replaceTailleInListSizes listSizes itof vie itof taille; size_winCrAxes; setParticleVarSizes listSizes obj3d ) else 0;; /* COLOR */ fun color_cycleColor(obj, h, state)= setParticleColorCycle state h;; fun color_alphaClick(obj, l, r, h)= _SETtext txtAlphaValue strcat ftoa l " %"; setParticleInitColorAlpha ftoi (l *. 1.27) h;; fun color_winClick(obj, u, x, y, btn)= set colorInitClick = _GETpixel24 bmpcolor x y; let u -> [win obj origin] in ( if !origin then setParticleInitColor colorInitClick obj else 0; _PAINTwindow win );; fun color_winPaint(obj, u)= _BLTbitmap winColor bmpcolor 0 0;; fun color_winEnd(obj, u)= _DSbitmap bmpcolor;; /* EXPERT */ fun expert_infinit(obj, h)= let _GETtext obj -> vie in setParticlesLife atof vie h;; fun expert_volumeSphereRadius(obj, h)= let _GETtext obj -> r in setParticulesVolumeSphere atof r h;; fun expert_volumeCone(obj, u)= let u -> [h n] in let atof _GETtext obj -> c in setParticleVolumeCone n c h;; fun expert_volumePlan(obj, u)= let u -> [h n] in let atof _GETtext obj -> c in setParticleVolumePlan n c h;; fun expert_volumeLine(obj, h)= let atof _GETtext obj -> c in setParticleVolumeLine c h;; fun expert_volumeChoice(obj, h, i, s)= _SHOWtext txtExpertVolumeSphereRadius WINDOW_HIDDEN; _SHOWtext txtExpertVolumeSphereRadiusMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_HIDDEN; if !strcmp s plugloc "EXPERT_VOLUME_SPHERE" then ( _SHOWtext txtExpertVolumeSphereRadius WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeSphereRadiusMsg WINDOW_UNHIDDEN; expert_volumeSphereRadius txtExpertVolumeSphereRadius h ) else if !strcmp s plugloc "EXPERT_VOLUME_CONE" then ( _SHOWtext txtExpertVolumeConeMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_UNHIDDEN; expert_volumeCone txtExpertVolumeConeLong [h 1]; expert_volumeCone txtExpertVolumeConeLarg [h 2]; expert_volumeCone txtExpertVolumeConeHaut [h 3] ) else if !strcmp s plugloc "EXPERT_VOLUME_PLAN" then ( _SHOWtext txtExpertVolumePlanMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_UNHIDDEN; expert_volumePlan txtExpertVolumePlanLong [h 1]; expert_volumePlan txtExpertVolumePlanLarg [h 2] ) else if !strcmp s plugloc "EXPERT_VOLUME_LINE" then ( _SHOWtext txtExpertVolumeLineMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_UNHIDDEN; expert_volumeLine txtExpertVolumeLineLong h ) else 0;; fun expert_effectConstant(obj, h)= let atof _GETtext txtExpertEffectConstantX -> x in let atof _GETtext txtExpertEffectConstantY -> y in let atof _GETtext txtExpertEffectConstantZ -> z in setParticlesEffectConstant [x y z] h;; fun expert_effectElectric(obj, h)= let atof _GETtext txtExpertEffectElectricAX -> ax in let atof _GETtext txtExpertEffectElectricAY -> ay in let atof _GETtext txtExpertEffectElectricAZ -> az in let atof _GETtext txtExpertEffectElectricBX -> bx in setParticlesEffectElectric [ax ay az] [bx nil nil] h;; fun expert_effectMagnetic(obj, h)= let atof _GETtext txtExpertEffectMagneticAX -> ax in let atof _GETtext txtExpertEffectMagneticAY -> ay in let atof _GETtext txtExpertEffectMagneticAZ -> az in let atof _GETtext txtExpertEffectMagneticBX -> bx in setParticlesEffectMagnetic [ax ay az] [bx nil nil] h;; fun expert_effectChaotic0(obj, h)= let atof _GETtext txtExpertEffectChaotic0AX -> ax in let atof _GETtext txtExpertEffectChaotic0AY -> ay in let atof _GETtext txtExpertEffectChaotic0AZ -> az in let atof _GETtext txtExpertEffectChaotic0BX -> bx in let atof _GETtext txtExpertEffectChaotic0BX -> by in let atof _GETtext txtExpertEffectChaotic0BX -> bz in setParticlesEffectChaotic0 [ax ay az] [bx by bz] h;; fun expert_effectChaotic1(obj, h)= let atof _GETtext txtExpertEffectChaotic1AX -> ax in let atof _GETtext txtExpertEffectChaotic1AY -> ay in let atof _GETtext txtExpertEffectChaotic1AZ -> az in let atof _GETtext txtExpertEffectChaotic1BX -> bx in let atof _GETtext txtExpertEffectChaotic1BX -> by in let atof _GETtext txtExpertEffectChaotic1BX -> bz in setParticlesEffectChaotic1 [ax ay az] [bx by bz] h;; fun expert_effectHelicoid(obj, h)= let atof _GETtext txtExpertEffectHelicoidAX -> ax in let atof _GETtext txtExpertEffectHelicoidAY -> ay in let atof _GETtext txtExpertEffectHelicoidAZ -> az in let atof _GETtext txtExpertEffectHelicoidBX -> bx in let atof _GETtext txtExpertEffectHelicoidBX -> by in let atof _GETtext txtExpertEffectHelicoidBX -> bz in setParticlesEffectHelicoid [ax ay az] [bx by bz] h;; fun expert_effectChoice(obj, h, i, s)= _SHOWtext txtExpertEffectConstantMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantX WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantY WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_HIDDEN; if !strcmp s plugloc "EXPERT_EFFECT_CONSTANT" then ( _SHOWtext txtExpertEffectConstantMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantZ WINDOW_UNHIDDEN; expert_effectConstant nil h ) else if !strcmp s plugloc "EXPERT_EFFECT_ELECTRIC" then ( _SHOWtext txtExpertEffectElectricMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_UNHIDDEN; expert_effectElectric nil h ) else if !strcmp s plugloc "EXPERT_EFFECT_MAGNETIC" then ( _SHOWtext txtExpertEffectMagneticMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_UNHIDDEN; expert_effectMagnetic nil h ) else if !strcmp s plugloc "EXPERT_EFFECT_CHAOTIC0" then ( _SHOWtext txtExpertEffectChaotic0Msg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_UNHIDDEN; expert_effectChaotic0 nil h ) else if !strcmp s plugloc "EXPERT_EFFECT_CHAOTIC1" then ( _SHOWtext txtExpertEffectChaotic1Msg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_UNHIDDEN; expert_effectChaotic1 nil h ) else if !strcmp s plugloc "EXPERT_EFFECT_HELICOID" then ( _SHOWtext txtExpertEffectHelicoidMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_UNHIDDEN; expert_effectHelicoid nil h ) else 0;; /* PLUGIN */ fun plugin_suppr(obj, u)= stopParticles;; fun help_end(obj, u)= set winHelp = nil;; fun plugin_help(obj, u)= let u -> [win h] in if winHelp == nil then ( set winHelp = _CRwindow _channel win 0 0 400 400 WN_MENU|WN_MINBOX|WN_NOSCOL " HELP !"; _CBwinDestroy winHelp @help_end 0; _CRtext _channel winHelp 5 5 390 390 ET_VSCROLL plughelp M3objName session h ) else nil;; fun plugin_getVolVectorA(fx)= if !strcmp fx plugloc "EXPERT_VOLUME_SPHERE" then linebuild (_GETtext txtExpertVolumeSphereRadius) :: nil else if !strcmp fx plugloc "EXPERT_VOLUME_CONE" then linebuild (_GETtext txtExpertVolumeConeLong) :: (_GETtext txtExpertVolumeConeLarg) :: (_GETtext txtExpertVolumeConeHaut) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_PLAN" then linebuild (_GETtext txtExpertVolumePlanLong) :: (_GETtext txtExpertVolumePlanLarg) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_LINE" then linebuild (_GETtext txtExpertVolumeLineLong) :: nil else nil;; fun plugin_getVolVectorB(fx)= linebuild nil;; fun plugin_getEffectVectorA(fx)= if !strcmp fx plugloc "EXPERT_EFFECT_CONSTANT" then linebuild (_GETtext txtExpertEffectConstantX) :: (_GETtext txtExpertEffectConstantY) :: (_GETtext txtExpertEffectConstantZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_ELECTRIC" then linebuild (_GETtext txtExpertEffectElectricAX) :: (_GETtext txtExpertEffectElectricAY) :: (_GETtext txtExpertEffectElectricAZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_MAGNETIC" then linebuild (_GETtext txtExpertEffectMagneticAX) :: (_GETtext txtExpertEffectMagneticAY) :: (_GETtext txtExpertEffectMagneticAZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_CHAOTIC0" then linebuild (_GETtext txtExpertEffectChaotic0AX) :: (_GETtext txtExpertEffectChaotic0AY) :: (_GETtext txtExpertEffectChaotic0AZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_CHAOTIC1" then linebuild (_GETtext txtExpertEffectChaotic1AX) :: (_GETtext txtExpertEffectChaotic1AY) :: (_GETtext txtExpertEffectChaotic1AZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_HELICOID" then linebuild (_GETtext txtExpertEffectHelicoidAX) :: (_GETtext txtExpertEffectHelicoidAY) :: (_GETtext txtExpertEffectHelicoidAZ) :: nil else nil;; fun plugin_getEffectVectorB(fx)= if !strcmp fx plugloc "EXPERT_EFFECT_CONSTANT" then nil else if !strcmp fx plugloc "EXPERT_EFFECT_ELECTRIC" then linebuild (_GETtext txtExpertEffectElectricBX) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_MAGNETIC" then linebuild (_GETtext txtExpertEffectMagneticBX) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_CHAOTIC0" then linebuild (_GETtext txtExpertEffectChaotic0BX) :: (_GETtext txtExpertEffectChaotic0BY) :: (_GETtext txtExpertEffectChaotic0BZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_CHAOTIC1" then linebuild (_GETtext txtExpertEffectChaotic1BX) :: (_GETtext txtExpertEffectChaotic1BY) :: (_GETtext txtExpertEffectChaotic1BZ) :: nil else if !strcmp fx plugloc "EXPERT_EFFECT_HELICOID" then linebuild (_GETtext txtExpertEffectHelicoidBX) :: (_GETtext txtExpertEffectHelicoidBY) :: (_GETtext txtExpertEffectHelicoidBZ) :: nil else nil;; fun closeedit() = // ajouter l'alpha à la couleur !!!!!!!!!!!!! strbuild ( "init" :: "on" :: nil ) :: ( "initColor" :: (itoa colorInitClick) :: nil ) :: ( "initSizes" :: (getSizes listSizes nil) :: nil ) :: ( "maxSize" :: (_GETtext txtSizeMax) :: nil ) :: ( "colorCycle" :: (let _GETcheck cColorCycle -> x in if x then "on" else "off") :: nil) :: ( "typeFX" :: ( let _GETcombo cmExpertEffect -> [i s] in s ) :: nil ) :: ( "typeFXvecA" :: ( let _GETcombo cmExpertEffect -> [i s] in plugin_getEffectVectorA s ) :: nil ) :: ( "typeFXvecB" :: ( let _GETcombo cmExpertEffect -> [i s] in plugin_getEffectVectorB s ) :: nil ) :: ( "typeVolEmitter" :: ( let _GETcombo cmExpertVolume -> [i s] in s ) :: nil ) :: ( "typeVolVecA" :: ( let _GETcombo cmExpertVolume -> [i s] in plugin_getVolVectorA s ) :: nil ) :: ( "typeVolVecB" :: ( let _GETcombo cmExpertVolume -> [i s] in plugin_getVolVectorB s ) :: nil ) :: ( "typeMaskEmitter" :: ( _GETtext txtExpertInfinit ) :: nil ) :: ( "typeParticle" :: ( let _GETcheck cExpertBillboard -> b in let _GETcheck cExpertRainbow -> r in if !b && !r then "0" else if b && !r then "1" else if !b && r then "2" else "4" ) :: nil ) :: ( "masse" :: ( _GETtext txtExpertMasse ) :: nil ) :: nil;; /* ("typeParticle"::part::nil):: nil ;; */ /* MAIN */ fun win_paint(obj, u)= _PAINTrectangle obj 155 30 20 20 DRAW_SOLID 1 0 DRAW_SOLID colorInitClick;; fun dynamicedit(win, obj, mat, param, origin)= if obj == nil then nil else let strextr param -> l in let _GETwindowSizePosition win -> [_ _ x y] in let [500 710] -> [w h] in let if win == nil then _CRwindow _channel DMSwin 0 0 w h WN_MENU strcat plugloc "TITLE" M3objName session obj else win -> win in ( // misc. _SIZEwindow win w h x y; _CLRwindow win; _CBwinPaint win @win_paint 0; set bmpcolor = _LDbitmap _channel _checkpack "dms/3d/plugins/dynparticles/_colormap.bmp"; set font = _CRfont _channel 14 0 0 "Arial"; // _CRtext _channel win 5 5 w-10 20 ET_BORDER strcat plugloc "TITLE" M3objName session obj; // Couleurs _CRtext _channel win 5 5 w-10 20 ET_BORDER plugloc "TITLE_COLOR"; _CRtext _channel win 5 30 145 20 0 plugloc "TITLE_COLOR_INIT"; set winColor = _CRwindow _channel win 5 55 170 78 WN_CHILDINSIDE|WN_NOCAPTION nil; _CBwinPaint winColor @color_winPaint 0; _CBwinDestroy winColor @color_winEnd 0; _CBwinClick winColor @color_winClick [win obj origin]; _CRtext _channel win (w/2)+5 30 (w/2)-40 20 0 plugloc "TITLE_COLOR_ALPHA"; set txtAlphaValue = _CRtext _channel win w-30 30 25 20 ET_ALIGN_RIGHT "100 %"; set sliColorAlpha = _CRslider _channel win _GETdefaultFont (w/2)+5 55 (w/2)-10 20 10 0.0 100.0 100.0 100.0 mkfun4 @color_alphaClick obj SLIDER_INTER_FIXED|SLIDER_BUTTON; _SETsliderBackColor sliColorAlpha 0xffffff; _SETsliderPrecisionStep sliColorAlpha 1.0; _SETsliderColor sliColorAlpha 0x00ff00; _SETsliderCursorColor sliColorAlpha 0xff0000; _SETsliderPrecisionMark sliColorAlpha 0; set cColorCycle = _CRcheck _channel win (w/2)+5 90 (w/2)-10 20 CH_LEFT plugloc "TITLE_COLOR_CYCLE"; _CBcheck cColorCycle @color_cycleColor obj; _CRtext _channel win (w/2)+5 110 (w/2)-10 25 0 plugloc "TITLE_COLOR_CYCLEMSG"; // Tailles _CRtext _channel win 5 140 w-10 20 ET_BORDER plugloc "TITLE_SIZE"; _CRtext _channel win 5 165 (w/2)-55 20 0 plugloc "TITLE_SIZE_MAX"; set txtSizeMax = _CReditLine _channel win (w/2)-45 165 40 20 ET_DOWN|ET_NUMBER "10"; set cSizeConst = _CRcheck _channel win (w/2)+5 165 (w/2)-10 20 CH_LEFT plugloc "TITLE_SIZE_CONST"; _CBcheck cSizeConst @size_sizeConst 0; let atoi _GETtext txtSizeMax -> m in size_initList m; set listSizesOld = listSizes; set winSize = _CRwindow _channel win 5 190 w-10 145 WN_CHILDINSIDE|WN_NOCAPTION|WN_DOWN nil; _ENwindow winSize _GETcheck cSizeConst; _CBwinPaint winSize @size_winPaint 0; _CBwinClick winSize @size_winClick obj; size_winCrAxes; // Paramètres avancés _CRtext _channel win 5 340 w-10 20 ET_BORDER plugloc "TITLE_EXPERT"; // PCL_INFINIT _CRtext _channel win 5 365 w-60 20 0 plugloc "EXPERT_INFINIT"; set txtExpertInfinit = _CReditLine _channel win w-50 365 45 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "96"; _CBtext txtExpertInfinit @expert_infinit obj; // VOLUME _CRtext _channel win 5 390 w-120 20 0 plugloc "EXPERT_VOLUME"; set cmExpertVolume = _CRcombo _channel win w-110 390 105 90 CB_NOEDIT|ET_ALIGN_RIGHT nil; _ADDcombo cmExpertVolume 0 plugloc "EXPERT_VOLUME_SPHERE"; _ADDcombo cmExpertVolume 1 plugloc "EXPERT_VOLUME_CONE"; _ADDcombo cmExpertVolume 2 plugloc "EXPERT_VOLUME_PLAN"; _ADDcombo cmExpertVolume 3 plugloc "EXPERT_VOLUME_LINE"; _SELcombo cmExpertVolume 0; _CBcombo cmExpertVolume @expert_volumeChoice obj; // VOLUME SPHERE set txtExpertVolumeSphereRadiusMsg = _CRtext _channel win 5 415 w-120 20 0 plugloc "EXPERT_VOLUME_SPHERE_RADIUS"; set txtExpertVolumeSphereRadius = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "100"; _CBtext txtExpertVolumeSphereRadius @expert_volumeSphereRadius obj; // VOLUME CÔNE set txtExpertVolumeConeMsg = _CRtext _channel win 5 415 w-120 40 0 plugloc "EXPERT_VOLUME_CONE_DIMENSIONS"; set txtExpertVolumeConeLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "500"; set txtExpertVolumeConeLarg = _CReditLine _channel win w-110 440 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "300"; set txtExpertVolumeConeHaut = _CReditLine _channel win w-110 465 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "1000"; _CBtext txtExpertVolumeConeLong @expert_volumeCone [obj 1]; _CBtext txtExpertVolumeConeLarg @expert_volumeCone [obj 2]; _CBtext txtExpertVolumeConeHaut @expert_volumeCone [obj 3]; _SHOWtext txtExpertVolumeConeMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_HIDDEN; // VOLUME PLAN set txtExpertVolumePlanMsg = _CRtext _channel win 5 415 w-120 40 0 plugloc "EXPERT_VOLUME_PLAN_DIMENSIONS"; set txtExpertVolumePlanLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "500"; set txtExpertVolumePlanLarg = _CReditLine _channel win w-110 440 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "300"; _CBtext txtExpertVolumePlanLong @expert_volumePlan [obj 1]; _CBtext txtExpertVolumePlanLarg @expert_volumePlan [obj 2]; _SHOWtext txtExpertVolumePlanMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_HIDDEN; // VOLUME LIGNE set txtExpertVolumeLineMsg = _CRtext _channel win 5 415 w-120 20 0 plugloc "EXPERT_VOLUME_LINE_DIMENSIONS"; set txtExpertVolumeLineLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "500"; _CBtext txtExpertVolumeLineLong @expert_volumeLine obj; _SHOWtext txtExpertVolumeLineMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_HIDDEN; // EFFETS _CRtext _channel win 5 490 w-120 20 0 plugloc "EXPERT_EFFECT"; set cmExpertEffect = _CRcombo _channel win w-110 490 105 130 CB_NOEDIT|ET_ALIGN_RIGHT nil; _ADDcombo cmExpertEffect 0 plugloc "EXPERT_EFFECT_CONSTANT"; _ADDcombo cmExpertEffect 1 plugloc "EXPERT_EFFECT_ELECTRIC"; _ADDcombo cmExpertEffect 2 plugloc "EXPERT_EFFECT_MAGNETIC"; _ADDcombo cmExpertEffect 3 plugloc "EXPERT_EFFECT_CHAOTIC0"; _ADDcombo cmExpertEffect 4 plugloc "EXPERT_EFFECT_CHAOTIC1"; _ADDcombo cmExpertEffect 5 plugloc "EXPERT_EFFECT_HELICOID"; _SELcombo cmExpertEffect 0; _CBcombo cmExpertEffect @expert_effectChoice obj; // EFFET CONSTANT set txtExpertEffectConstantMsg = _CRtext _channel win 5 515 w-10 20 0 plugloc "EXPERT_EFECT_CONSTANT_MSG"; set txtExpertEffectConstantX = _CReditLine _channel win w-295 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "0"; set txtExpertEffectConstantY = _CReditLine _channel win w-195 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "5"; set txtExpertEffectConstantZ = _CReditLine _channel win w-95 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "10"; _CBtext txtExpertEffectConstantX @expert_effectConstant obj; _CBtext txtExpertEffectConstantX @expert_effectConstant obj; _CBtext txtExpertEffectConstantX @expert_effectConstant obj; // EFFET ELECTRIQUE set txtExpertEffectElectricMsg = _CRtext _channel win 5 515 w-10 40 0 plugloc "EXPERT_EFECT_ELECTRIC_MSG"; set txtExpertEffectElectricAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "30"; set txtExpertEffectElectricAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; set txtExpertEffectElectricAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectElectricBX = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "5"; _CBtext txtExpertEffectElectricAX @expert_effectElectric obj; _CBtext txtExpertEffectElectricAY @expert_effectElectric obj; _CBtext txtExpertEffectElectricAZ @expert_effectElectric obj; _CBtext txtExpertEffectElectricBX @expert_effectElectric obj; _SHOWtext txtExpertEffectElectricMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_HIDDEN; // EFFET MAGNETIQUE set txtExpertEffectMagneticMsg = _CRtext _channel win 5 515 w-10 40 0 plugloc "EXPERT_EFECT_MAGNETIC_MSG"; set txtExpertEffectMagneticAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "30"; set txtExpertEffectMagneticAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectMagneticAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; set txtExpertEffectMagneticBX = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "1"; _CBtext txtExpertEffectMagneticAX @expert_effectMagnetic obj; _CBtext txtExpertEffectMagneticAY @expert_effectMagnetic obj; _CBtext txtExpertEffectMagneticAZ @expert_effectMagnetic obj; _CBtext txtExpertEffectMagneticBX @expert_effectMagnetic obj; _SHOWtext txtExpertEffectMagneticMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_HIDDEN; // EFFET CHAOTIQUE 0 set txtExpertEffectChaotic0Msg = _CRtext _channel win 5 515 w-10 40 0 plugloc "EXPERT_EFECT_CHAOTIC0_MSG"; set txtExpertEffectChaotic0AX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "30"; set txtExpertEffectChaotic0AY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectChaotic0AZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; set txtExpertEffectChaotic0BX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "1"; set txtExpertEffectChaotic0BY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectChaotic0BZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; _CBtext txtExpertEffectChaotic0AX @expert_effectChaotic0 obj; _CBtext txtExpertEffectChaotic0AY @expert_effectChaotic0 obj; _CBtext txtExpertEffectChaotic0AZ @expert_effectChaotic0 obj; _CBtext txtExpertEffectChaotic0BX @expert_effectChaotic0 obj; _CBtext txtExpertEffectChaotic0BY @expert_effectChaotic0 obj; _CBtext txtExpertEffectChaotic0BZ @expert_effectChaotic0 obj; _SHOWtext txtExpertEffectChaotic0Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_HIDDEN; // EFFET CHAOTIQUE 1 set txtExpertEffectChaotic1Msg = _CRtext _channel win 5 515 w-10 40 0 plugloc "EXPERT_EFECT_CHAOTIC1_MSG"; set txtExpertEffectChaotic1AX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "30"; set txtExpertEffectChaotic1AY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectChaotic1AZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; set txtExpertEffectChaotic1BX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "1"; set txtExpertEffectChaotic1BY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectChaotic1BZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; _CBtext txtExpertEffectChaotic1AX @expert_effectChaotic1 obj; _CBtext txtExpertEffectChaotic1AY @expert_effectChaotic1 obj; _CBtext txtExpertEffectChaotic1AZ @expert_effectChaotic1 obj; _CBtext txtExpertEffectChaotic1BX @expert_effectChaotic1 obj; _CBtext txtExpertEffectChaotic1BY @expert_effectChaotic1 obj; _CBtext txtExpertEffectChaotic1BZ @expert_effectChaotic1 obj; _SHOWtext txtExpertEffectChaotic1Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_HIDDEN; // EFFET HELICOÏDAL set txtExpertEffectHelicoidMsg = _CRtext _channel win 5 515 w-10 40 0 plugloc "EXPERT_EFECT_HELICOID_MSG"; set txtExpertEffectHelicoidAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "30"; set txtExpertEffectHelicoidAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectHelicoidAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; set txtExpertEffectHelicoidBX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "1"; set txtExpertEffectHelicoidBY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "15"; set txtExpertEffectHelicoidBZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER "20"; _CBtext txtExpertEffectHelicoidAX @expert_effectHelicoid obj; _CBtext txtExpertEffectHelicoidAY @expert_effectHelicoid obj; _CBtext txtExpertEffectHelicoidAZ @expert_effectHelicoid obj; _CBtext txtExpertEffectHelicoidBX @expert_effectHelicoid obj; _CBtext txtExpertEffectHelicoidBY @expert_effectHelicoid obj; _CBtext txtExpertEffectHelicoidBZ @expert_effectHelicoid obj; _SHOWtext txtExpertEffectHelicoidMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_HIDDEN; // PCL_BILLBOARD & PCL_RAINBOW set cExpertBillboard = _CRcheck _channel win 5 610 w-10 20 CH_LEFT plugloc "EXPERT_BILLBOARD"; set cExpertRainbow = _CRcheck _channel win 5 635 w-10 20 CH_LEFT plugloc "EXPERT_RAINBOW"; // MASSE _CRtext _channel win 5 660 w-60 20 0 plugloc "EXPERT_MASSE"; set txtExpertMasse = _CReditLine _channel win w-50 660 45 20 ET_DOWN|ET_ALIGN_RIGHT "0"; // BTN SUPPRIMER & HELP _CBbutton _CRbutton _channel win 5 685 (w/2)-10 20 0 plugloc "HELP" @plugin_help [win obj]; _CBbutton _CRbutton _channel win (w/2)+5 685 (w/2)-10 20 0 plugloc "SUPPR" @plugin_suppr 0; @closeedit );;