Added cddlib-094h from http://www.inf.ethz.ch/personal/fukudak/cdd_home/
Change-Id: I64519509269e434b1b9ea87c3fe0805e711c0ac9
diff --git a/third_party/cddlib/examples-ml/PolytopeSkeleton.m b/third_party/cddlib/examples-ml/PolytopeSkeleton.m
new file mode 100644
index 0000000..5a617d3
--- /dev/null
+++ b/third_party/cddlib/examples-ml/PolytopeSkeleton.m
@@ -0,0 +1,66 @@
+(*
+ PolytopeSkeleton.m,
+ by Komei Fukuda, fukuda@ifor.math.ethz.ch
+ Version March 3, 1999.
+ -- This Needs View3D package ---
+*)
+
+Visible[ineq_Integer, {a_,b_}, viewpoint_]:=
+ If[N[a[[ineq]].viewpoint] >= N[b[[ineq]]], True, False];
+
+Visible[{a_,b_}, viewpoint_]:=
+ Map[Visible[#,{a,b},viewpoint]&, Range[Length[b]]];
+
+VisibleSkeleton[vertices_,ecd_, ead_, {a_, b_},viewpoint_]:=
+ Block[{grtemp, edgelist, i, visibility, viseges, invisedges, visibles,invisibles},
+ edgelist={};
+ Do[ edgelist=Join[edgelist,Map[{i, #}&, ead[[i]]]],
+ {i,1,Length[ead]}
+ ];edgelist=Select[edgelist,#[[1]]<#[[2]]&];
+ visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
+ visedges=Select[edgelist,
+ (Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
+ invisedges=Complement[edgelist,visedges];
+ visibles=(vertices[[#]]&) /@ visedges;
+ invisibles=(vertices[[#]]&) /@ invisedges;
+ grtemp=Join[{Thickness[ 0.0085]},
+ Line /@ visibles,
+ {Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
+ grtemp
+ ];
+
+VisibleSkeleton2[vertices_,ecd_, ead_, flist_,{a_, b_},viewpoint_]:=
+ Block[{grtemp, edgelist, i, edgelist0, visibility, viseges, invisedges, visibles,invisibles},
+ edgelist0={};
+ Do[ edgelist0=Join[edgelist0,Map[{i, #}&, ead[[i]]]],
+ {i,1,Length[ead]}
+ ];edgelist0=Select[edgelist0,#[[1]]<#[[2]]&];
+ edgelist=Select[edgelist0,(Intersection[ecd[[#[[1]]]],ecd[[#[[2]]]],flist] != {})&];
+ visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
+ visedges=Select[edgelist,
+ (Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
+ invisedges=Complement[edgelist,visedges];
+ visibles=(vertices[[#]]&) /@ visedges;
+ invisibles=(vertices[[#]]&) /@ invisedges;
+ grtemp=Join[{Thickness[ 0.0085]},
+ Line /@ visibles,
+ {Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
+ grtemp
+ ];
+
+getMmaViewPoint[vp_,gr_]:=
+ ViewPointFromUser[vp,
+ FullOptions[gr,PlotRange],
+ FullOptions[gr,BoxRatios]
+ ];
+
+getUserViewPoint[vp_,gr_]:=
+ ViewPointToUser[vp,
+ FullOptions[gr,PlotRange],
+ FullOptions[gr,BoxRatios]
+ ];
+
+circle[alpha_, r_:2, h_:2]:=
+ {r*Cos[alpha], r*Sin[alpha], h}
+
+(* end of PolytopeSkeleton.m *)
\ No newline at end of file