DECLARE struct $moments,$target,$vec2,$fmath,$fvector,$feccet
DECLARE double $radius
CECHO ${$fmath=$root.func.math}
CECHO ${$feccet=$root.func.eccet}
CECHO ${$fvector=$root.func.vector}

# save away they grey values, as we will filter them
SAVEGREY /tmp/angleplot_automark.g16.gz
# remove possible markers
MARKCC ^0 0
# use a wide median to remove motion artefacts at the skull boundaries
FILTSEP_MEDIAN 0 7 0 0
FILTSEP_MEDIAN 1 7 0 0
# Mark totally black areas with class 1
MARKCG 0 5 0 1
# Mark the area that is connected to the middle with 2
MARKCC_CONNECTED 255 255 0 2
# Mark the area that is connected to the border (upper left corner) as 0
MARKCC_CONNECTED 0 0 0 0
# Now dilate the outer area (0) by 27 into the inner area (2) result is (3)
MARKCC_HALFDILATE1D 0x0f 27 0 3 2
# Again dilate the outer area by 7 to form a border of 3
MARKCC_HALFDILATE1D 0x0f 7 0 6 3
# Now we have a 20 wide border in 3 - remove the helper colors
# Keep 6, we need that later for dragging in at top/bottom
MARKCC 0 6
MARKCC 1,2 0
# Recolor to 2
MARKCC 3 2

# Get position - voxel coords. Make sure they are inside
POS_CLIPTOVOL
POS
# Erase other planes
MARKC_CUBE o 0 0 ${(int)$root.rc.z} ${$root.vol[current].size.x-1} ${$root.vol[current].size.y-1} ${(int)$root.rc.z} ^, 255
MERGEGREY /tmp/angleplot_automark.g16.gz

# Now find the relative position of the skull
FIND_MOMENTS -c 2
CECHO ${$moments=$root.rc}

# the biggest eigenvalue is about average(radius^2) of the other axes
CECHO ${$radius=$fmath.sqrt($moments.eigen[0].value)}

# normalize the vectors, so that the small diameter vector points right
{ IF1 ${$moments.eigen[1].vector.x<0}
	CECHO ${$moments.eigen[1].vector=$fvector.scale($moments.eigen[1].vector,-1.0)}
} IF1 0 0

# normalize the vectors, so that the big diameter vector points down
{ IF1 ${$moments.eigen[2].vector.y<0}
	CECHO ${$moments.eigen[2].vector=$fvector.scale($moments.eigen[2].vector,-1.0)}
} IF1 0 0

# mark the basal ganglions

CECHO ${$target=$moments.cog}
CECHO ${$target=$fvector.add($target,$moments.eigen[1].vector,$radius*-0.45)}
CECHO ${$target=$fvector.add($target,$moments.eigen[2].vector,$radius*-0.2)}
CECHO ${$target=$feccet.globaltolocal($target)}
MARKC_CUTSPHERE ${$fvector.tostring($target,0)} 4 20 20 0

CECHO ${$target=$moments.cog}
CECHO ${$target=$fvector.add($target,$moments.eigen[1].vector,$radius*0.45)}
CECHO ${$target=$fvector.add($target,$moments.eigen[2].vector,$radius*-0.2)}
CECHO ${$target=$feccet.globaltolocal($target)}
MARKC_CUTSPHERE ${$fvector.tostring($target,0)} 5 20 20 0

# make a bump in the medial axis

CUTPLANE_ADD _MkAngle
CECHO ${$vec2=$moments.eigen[1].vector}
CECHO ${$target=$moments.cog}
CECHO ${$target=$fvector.add($target,$vec2,$radius*-0.1)}
CUTPLANE_DEF_NORM_BASE ${$vec2.x} ${$vec2.y} ${$vec2.z} ${$target.x} ${$target.y} ${$target.z}
CUTPLANE_MARK 2 8
CECHO ${$vec2=$moments.eigen[1].vector}
CECHO ${$target=$moments.cog}
CECHO ${$target=$fvector.add($target,$vec2,$radius*0.1)}
CUTPLANE_DEF_NORM_BASE ${-$vec2.x} ${-$vec2.y} ${-$vec2.z} ${$target.x} ${$target.y} ${$target.z}
CUTPLANE_MARK 2 8
CUTPLANE_DEL _MkAngle

MARKCC_HALFDILATE1D 12 20 2 3 0
MARKCC_HALFDILATE1D 12 20 6 7 2
MARKCC 6,7 0
MARKCC 8,3 2

MARKCC_HULL 10 10 0 2 3
MARKCC 3 2
MARKCC_HALFDILATE1D 15 5 2 6 0
MARKCC_HULL 10 10 0 6 3 2
MARKCC 3,6 0

#MAP back other planes
MARKCC 255 0
