//        protected override bool TreesAreCorrect() {
//            return TreeIsCorrect(leftConeSides) && TreeIsCorrect(rightConeSides);
//        }
//
//        bool TreeIsCorrect(RbTree<ConeSide> tree) {
//            var y = double.NegativeInfinity;
//            foreach (var t in tree) {
//                var x = coneSideComparer.IntersectionOfSegmentAndSweepLine(t);
//                var yp = x*DirectionPerp;
//                if (yp < y - ApproximateComparer.DistanceEpsilon)
//                    return false;
//                y = yp;
//            }
//            return true;
//        }
#endif
        void ProcessPortObstacleEvent(PortObstacleEvent portObstacleEvent) {
            Z = GetZ(portObstacleEvent);
            GoOverConesSeeingVertexEvent(portObstacleEvent);
            CreateConeOnVertex(portObstacleEvent);
        }
 void ProcessPointObstacleEvent(PortObstacleEvent portObstacleEvent) {
     Z = GetZ(portObstacleEvent);
     GoOverConesSeeingVertexEvent(portObstacleEvent);
 }