text: Clazz.declarePackage ("J.shapesurface");
  Clazz.load (["J.shapesurface.Isosurface"], "J.shapesurface.Pmesh", ["java.util.Hashtable", "JU.Measure", "$.P3", "$.V3"], function () {
  c$ = Clazz.declareType (J.shapesurface, "Pmesh", J.shapesurface.Isosurface);
  Clazz.defineMethod (c$, "initShape",
  function () {
  Clazz.superCall (this, J.shapesurface.Pmesh, "initShape", []);
  this.myType = "pmesh";
  });
  Clazz.overrideMethod (c$, "getProperty",
  function (property, index) {
  if (property === "face") {
  var m = this.currentMesh;
  if (index >= 0 && (index >= this.meshCount || (m = this.meshes[index]) == null)) return null;
  return m == null ? null : this.getFace (m);
  }return this.getPropI (property, index);
  }, "~S,~N");
  Clazz.defineMethod (c$, "getFace",
   function (m) {
  if (m.haveQuads) return null;
  var vs = m.vs;
  var htEdges =  new java.util.Hashtable ();
  var v1 = 0;
  var v0;
  var v01;
  var n = 0;
  var edge0 = null;
  for (var i = m.pc; --i >= 0; ) {
  if (m.bsSlabDisplay != null && !m.bsSlabDisplay.get (i)) continue;
  var triangle = m.pis[i];
  var mask = triangle[3];
  for (var j = 0; j < 3; j++) if ((mask & (1 << j)) != 0) {
  v1 = triangle[j];
  var v2 = triangle[(j + 1) % 3];
  var key = v2 + "_" + v1;
  if (htEdges.containsKey (key)) {
  htEdges.remove (key);
  n--;
  } else {
  n++;
  edge0 =  Clazz.newIntArray (-1, [v1, v2]);
  htEdges.put (v1 + "_" + v2, edge0);
  htEdges.put ("" + v1, edge0);
  }}
  }
  if (n == 0) return null;
  var a =  Clazz.newIntArray (n, 2, 0);
  a[0] = edge0;
  var vectorBA =  new JU.V3 ();
  var vectorBC =  new JU.V3 ();
  v01 = v0 = a[0][0];
  v1 = a[0][1];
  var pt = 0;
  var min = 0.0001;
  while (v1 != v0) {
  var edge = htEdges.get ("" + v1);
  if (edge == null) break;
  var angle = JU.Measure.computeAngle (vs[v01], vs[v1], vs[edge[1]], vectorBA, vectorBC, true);
  var d2 = vs[v1].distanceSquared (vs[edge[1]]);
  v1 = edge[1];
  if (angle < 179 && d2 > min) {
  a[++pt] = edge;
  v01 = edge[0];
  } else {
  a[pt][1] = v1;
  }}
  if (JU.Measure.computeAngle (vs[v01], vs[v1], vs[a[0][1]], vectorBA, vectorBC, true) >= 179 || vs[v1].distanceSquared (vs[a[0][1]]) <= min) {
  a[0][0] = a[pt--][0];
  }n = (pt < 0 ? 1 : ++pt);
  var pts =  new Array (n);
  for (var i = 0; i < n; i++) pts[i] = JU.P3.newP (vs[a[i][0]]);
  
  return pts;
  }, "J.shape.Mesh");
  });
  