redesign geometry part. Now uses polymorphic.

Signed-off-by: anti-freak <antifreak2011@gmail.com>