Batch Update Timer

Hier mal eine Idee für einen Batch updater. Gedacht ist, dass das Batchprogramm alle 4 Monate Updates installiert. Das ganze ist sehr einfach gehalten, wie man sieht werde Schaltjahre und Monatslängen nicht berücksichtigt. Im Grunde wird einfach überprüft ob zum letzten mal Ausführen schon 120 Tage vergangen sind, wenn ja kann man wählen ob das Batch vorsetzen soll.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
@echo off
Setlocal EnableDelayedExpansion 

:: path to update ini
set "ini=D:\Dateien\DEV\BatchScripts\update.ini"
 
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
 
set splitMonth=%month:~0,1%
set splitDay=%day:~0,1%
 
if %splitMonth%==0 (
	set month=%month:~-1%
	)
if %splitDay%==0 (
	set day=%day:~-1%
	)	
 
if not exist %ini% (
	echo.year=%year%>>%ini%
	echo.month=!month!>>%ini%
	echo.day=!day!>>%ini%
	)
 
for /F "tokens=2 delims==" %%a in ('findstr /i year %ini%') do (
	set oldYear=%%a
	)
for /F "tokens=2 delims==" %%b in ('findstr /i month %ini%') do (
	set oldMonth=%%b
	)
for /F "tokens=2 delims==" %%c in ('findstr /i day %ini%') do (
	set oldDay=%%c
	)	
 
set /a calcDays = %year% * 365 + %month% * 30 + %day%
set /a calcOldDays = %oldYear% * 365 + %oldMonth% * 30 + %oldDay%
set /a diffDays = %calcDays% - %calcOldDays%

:: update cycle 120 days = 4 month
if %diffDays% LSS 120 GOTO run
echo.
echo....................................................................
echo.
echo.....Update Progress................................................
echo.
echo....................................................................
echo.
echo.
echo.Do you want to update media_compressor? Type: yes or no
echo.
set /P keyInput="Update Process:"
echo.
if %keyInput% == no exit
 
if %keyInput% == yes (
	del %ini%
	echo.year=%year%>>%ini%
	echo.month=!month!>>%ini%
	echo.day=!day!>>%ini%
	)
 
:run
pause

GUI für user_ibl_rect

In 3ds Max 2014 (früher vielleicht auch schon), läuft der user_ibl_rect shader eigentlich recht gut. Um ihn zu verwenden muss er in dem „standard.mi“ file verlinkt werden.

Hier noch eine passende GUI dafür:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
   gui "gui_user_ibl_rect" {
        control "Global"  "Global" (
            "uiName"      "User IBL Rectangle"
        )
        control "texture" "color texture" (
			"uiName" "HDR Texture"
			)
        control "samples" "integer" (
			"uiName" "Samples",
			"value" 0,
			"nonConnectable"
			)
        control "color" "color" (
			"uiName" "Color",
			"value" 1 1 1
			)
        control "intensity" "scalar" (
			"uiName" "Intensity",
			"value" 1.0
			)
		control "shadow_mode" "integer" (
			"uiName" "Shadow Mode",
			"enum",
			"value" "0 no shadow, 1 opaque, 2 transparent",
			"range"  0 2,
			"nonConnectable"
			)
		control "cone" "scalar" (
			"uiName" "Cone",
			"value" 90.0
			)	
		control "falloff" "scalar" (
			"uiName" "Falloff",
			"value" 2.0
			)
		control "angular_falloff" "scalar" (
			"uiName" "Angular Falloff",
			"value" 1.0
			)
		control "swap_uv" "boolean" (
			"uiName" "Swap UV",
			"nonConnectable"
			)
    }

Vielleicht zu dem Thema die Tage noch mehr.

Lichtquelle, anhand des Glanzpunktes auf einem Objekt, erstellen

Heute gibt es nur einen Link… Hatte mir die Tage Gedanken drüber gemacht ob man per Script die Position einer Lichtquelle, anhand des gewünschten Glanzpunktes, erstellen lassen kann. Und siehe da, das Script gibt es schon und funktioniert super! Besser als ich es hin bekommen hätte.

http://www.scriptspot.com/bobo/mxs2008/LightTouch

VLC Player auf mehreren Bildschirmen gleichzeitig abspielen.

Wenn man mehrere Filme auf mehreren Bildschirmen gleichzeitig abspielen möchte kann man das über ein Batchscript sehr schön lösen. Je nach Leistung des Computers funktioniert das nicht zu 100%, aber einige Millisekunden sollten verschmerzbar sein.

In dem folgenden Beispiel werden 5 Bildschirme angesteuert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
set vlcPath="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe"
 
 
 
start "erster VLC" %vlcPath% --loop "Clip1.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=3 --video-x=-5120 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "zweiter VLC" %vlcPath% --loop "Clip2.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=5 --video-x=-3090 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "dritter VLC" %vlcPath% --loop "Clip3.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=1 --video-x=-1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "vierte VLC" %vlcPath% --loop "Clip4.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=2 --video-x=0 --video-y=0 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
start "fuenfte VLC" %vlcPath% --loop "Clip5.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=4 --video-x=1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show
 
 
pause
tskill vlc /A

Um die Position zu ermitteln, am besten über Grafiktreiber die Bildschirm ID anzeigen lassen, und in Script korrigieren, auch was den Versatz angeht.

VLC bietet auch eine Master/Slave Funktion über Netzwerk an. Hier einfach noch mal nach googlen.

MaxScript Cube Shatter

Voronoi shatter gibt es einige, möchte man jedoch sein Objekt in Würfel zerlegen wird es schon etwas dünner mit dem Angebot. Hier ein Art, wie man das ganze mit maxscript umsetzten kann (GUI wird noch folgen):

CubeShatter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
orgObj = selection[1]
 
-- process slices
fn process orgObj = (
	if (orgObj != undefined) then (
 
		-- copy original for processing, set pivot and reset all transformations
		obj = copy orgObj
		obj.pivot = obj.center
		obj.pivot.z = obj.min.z
		resetXForm obj
		convertToMesh obj
		objDim = obj.max - obj.min
 
		-- size of the quad pieces in scene units
		PlaneDistance = 8
 
		-- calculate how many cuts in every dimension
		planeCountX = (objDim.x / PlaneDistance) as integer
		planeCountY = (objDim.y / PlaneDistance) as integer
		planeCountZ = (objDim.z / PlaneDistance) as integer
 
		--check if count come to the "soft" limit
		sum = planeCountX * planeCountY * planeCountZ
		if ( sum > 4000) do (
			if queryBox ("Warning: You want to cut \"" + sum as string + "\" pieces. Are you sure that you want to continue?") then (
 
			) else (
				delete obj
				return false
				)
		) 	
 
		--set the cut plane matrixes
		planeSumX = for x = 1 to planeCountX - 1 collect (matrix3 [0,0,-1] [0,1,0] [1,0,0] [(objDim.x / planeCountX * x + obj.min.x - obj.pos.x), (obj.max.y + obj.min.y) / 2, (obj.max.z + obj.min.z) / 2])
		planeSumY = for y = 1 to planeCountY - 1 collect (matrix3 [1,0,0] [0,0,1] [0,-1,0] [(obj.max.x + obj.min.x) / 2, (objDim.y / planeCountY * y + obj.min.y - obj.pos.y), (obj.max.z + obj.min.z) / 2])
		planeSumZ = for z = 1 to planeCountZ - 1 collect (matrix3 [0,1,0] [-1,0,0] [0,0,1] [(obj.max.x + obj.min.x) / 2, (obj.max.y + obj.min.y) / 2, (objDim.z / planeCountZ * z + obj.min.z - obj.pos.z)])
 
		-- cut object in the x direction
		objArray1 = #()	
		for a = 1 to planeSumX.count do (
			ob1 = copy obj
			addModifier ob1 (sliceModifier name:"cutPlane1" slice_type:2)
			ob1.cutPlane1.slice_plane.transform = planeSumX[a]
			addModifier ob1 (sliceModifier name:"cutPlane2" slice_type:3)
			if (a-1 > 0) do (ob1.cutPlane2.slice_plane.transform = planeSumX[a-1])
			addModifier ob1 (cap_holes())
			convertToMesh ob1
			join objArray1 #(ob1)
			)
		addModifier obj (sliceModifier name:"cutPlane3" slice_type:3)
		obj.cutPlane3.slice_plane.transform = planeSumX[planeSumX.count]
		addModifier obj (cap_holes())
		convertToMesh obj
		join objArray1 #(obj)
 
		-- cut objects in y direction
		objArray2 = #()		
		for b = 1 to objArray1.count do (
			for c = 1 to planeSumY.count do (
				ob2 = copy objArray1[b]
				addModifier ob2 (sliceModifier name:"cutPlane1" slice_type:3)
				if (c+1 <= planeSumY.count) do (ob2.cutPlane1.slice_plane.transform = planeSumY[c+1])
				addModifier ob2 (sliceModifier name:"cutPlane2" slice_type:2)
				ob2.cutPlane2.slice_plane.transform = planeSumY[c]
				addModifier ob2 (cap_holes())
				convertToMesh ob2
				join objArray2 #(ob2)
				)
			addModifier objArray1[b] (sliceModifier name:"cutPlane3" slice_type:3)
			objArray1[b].cutPlane3.slice_plane.transform = planeSumY[1]
			addModifier objArray1[b] (cap_holes())
			convertToMesh objArray1[b]
			join objArray2 #(objArray1[b])
			)	
 
		-- cut objects in y direction
		--objArray3 = #()		
		for i = 1 to objArray2.count do (
			for j = 1 to planeSumZ.count do (
				ob3 = copy objArray2[i]
				addModifier ob3 (sliceModifier name:"cutPlane1" slice_type:2)
				ob3.cutPlane1.slice_plane.transform = planeSumZ[j]
				addModifier ob3 (sliceModifier name:"cutPlane2" slice_type:3)
				if (j-1 > 0) do (ob3.cutPlane2.slice_plane.transform = planeSumZ[j-1])
				addModifier ob3 (cap_holes())
				convertToMesh ob3
				ob3.pivot = ob3.center
				--join objArray3 #(ob3)
				)
				addModifier objArray2[i] (sliceModifier name:"cutPlane3" slice_type:3)
				objArray2[i].cutPlane3.slice_plane.transform = planeSumZ[planeSumZ.count]
				addModifier objArray2[i] (cap_holes())
				convertToMesh objArray2[i]
				objArray2[i].pivot = objArray2[i].center
				--join objArray3 #(objArray2[i])
			)
 
		-- clear variables and clean script cache
		objArray1 = #()
		objArray2 = #()
		--objArray3 = #()
		enableSceneRedraw()
		CompleteRedraw()
		gc()
		) else (
			messageBox "Please select one object first!"
			)
	) -- fn end
 
process orgObj

Im Script die Länge der Würfelseite angeben (PlaneDistance), Objekt auswählen und Script ausführen.