コード例 #1
0
    public DrawingResult accept(
        List<iUpdateable> soFar, final CachedLine line, final Dict properties) {
      if (!properties.isTrue(iLinearGraphicsContext.stroked, true)) return null;
      if (!properties.isTrue(iLinearGraphicsContext.containsDepth, false)) return null;

      Vector4 color = null;
      if (color == null) color = properties.get(iLinearGraphicsContext.strokeColor);
      if (color == null) color = properties.get(iLinearGraphicsContext.color);
      if (color != null) {
        if (color.w < 0.001) return null;
      }

      return new DrawingResult(
          DrawingResultCode.cont,
          new iUpdateable() {

            public void update() {
              if (!context.isLayer(line)) return;

              opName = properties.get(iLinearGraphicsContext.outputOpacityType);
              if (opName == null) opName = defaultOpType;

              // todo, transp

              path = context.getOutput();
              path.saveState();

              lineEmitter.setCanEmitCubic(false);

              lineEmitter.globalGeometricScale = 0;
              lineEmitter.globalFlatnessScale =
                  context.getGlobalProperties().getFloat(iLinearGraphicsContext.flatnessScale, 1);

              beginTransform(line, properties);

              drawInto(line, properties, null, context, lineEmitter);

              firstOut = true;

              Number dd = properties.get(PDFDash);
              if (dd != null) {
                context.getOutput().setLineDash(dd.floatValue(), dd.floatValue() * 1.4f, 0);
              }

              context.getOutput().stroke();
              context.getOutput().newPath();

              System.err.println(" submitting path ");
              path.restoreState();
            }
          });
    }
コード例 #2
0
          @Override
          public void emitLinearFrame(
              Vector3 a,
              Vector3 b,
              java.util.List<Object> name,
              java.util.List<Object> name2,
              Dict properties,
              iLinearGraphicsContext contex) {
            Vector4 outputTransform = SimplePDFLineDrawing_3d.this.outputTransform;
            if (properties.isTrue(iLinearGraphicsContext.noTransform, false))
              outputTransform = new Vector4(1, 1, 0, 0);

            setStrokeProperties(name, properties);
            if (firstOut || lastOut.distanceFrom(a) > 1e-5) {
              Vector2 at = transform(a);
              path.moveTo(at.x, at.y);
              firstOut = false;
              lastOut = new Vector3(b);
            }
            Vector2 at = transform(b);

            ; // System.out.println(" line to <"+b+" -> "+at);
            if (!shouldClip) path.lineTo(at.x, at.y);
            lastOut.x = b.x;
            lastOut.y = b.y;
          }
コード例 #3
0
    public DrawingResult accept(
        List<iUpdateable> soFar, final CachedLine line, final Dict properties) {

      if (!properties.isTrue(iLinearGraphicsContext.pointed, false)) return null;

      if (properties.isTrue(iLinearGraphicsContext.containsDepth, false)) return null;

      line.finish();

      unitSquare = null;

      DrawingResult res =
          new DrawingResult(
              DrawingResultCode.cont,
              new iUpdateable() {

                public void update() {
                  if (!context.isLayer(line)) return;

                  boolean notEnds = properties.isTrue(pointNotAtEnds, false);

                  for (CachedLine.Event e : line.events) {
                    if (notEnds
                        && e.attributes != null
                        && e.attributes.isTrue(isClippedEnd_v, false)) {
                      System.err.println(" skipped clipped end");
                      continue;
                    }

                    if (!e.method.equals(iLine_m.close_m)) {

                      float size = 1f / outputTransform.x;

                      Number ps = e.getAttributes().get(iLinearGraphicsContext.pointSize_v);
                      if (ps == null) ps = properties.get(iLinearGraphicsContext.pointSize);
                      if (ps != null) size = ps.floatValue() / outputTransform.x;

                      // size *= 0.25f;

                      Vector4 color = e.getAttributes().get(iLinearGraphicsContext.pointColor_v);
                      if (color == null) color = properties.get(iLinearGraphicsContext.pointColor);
                      if (color == null) color = properties.get(iLinearGraphicsContext.strokeColor);
                      if (color == null) color = properties.get(iLinearGraphicsContext.color);
                      if (color == null) color = new Vector4(0, 0, 0, 1);

                      color.w *= properties.getFloat(iLinearGraphicsContext.totalOpacity, 1f);

                      size *= context.getGlobalProperties().getFloat(pointSizeMul, 1);

                      remapProperties(null, color = new Vector4(color), 0);

                      if (unitSquare == null
                          || unitSquareLastColor.distanceFrom(color) > 0
                          || Math.abs(unitSquareLastSize - size) > 0.25f) {
                        constructUnitSquare(color, size);

                        unitSquareLastColor = color;
                        unitSquareLastSize = size;
                        PdfGState gs = new PdfGState();
                        gs.setFillOpacity(color.w);
                        String opName = properties.get(iLinearGraphicsContext.outputOpacityType);
                        if (opName == null) opName = defaultOpType;

                        gs.setBlendMode(new PdfName(opName));
                        context.getOutput().setGState(gs);
                      }

                      Vector2 at = transform(e.getDestination());

                      context
                          .getOutput()
                          .addTemplate(unitSquare, -size / 2 + at.x, -size / 2 + at.y);

                      // CachedLine markerLine
                      // = new CachedLine();
                      // iLine in =
                      // markerLine.getInput();
                      //
                      // Vector2 dest =
                      // e.getDestination();
                      // in.moveTo(dest.x -
                      // size / 2f, dest.y -
                      // size / 2);
                      // in.lineTo(dest.x +
                      // size / 2f, dest.y -
                      // size / 2);
                      // in.lineTo(dest.x +
                      // size / 2f, dest.y +
                      // size / 2);
                      // in.lineTo(dest.x -
                      // size / 2f, dest.y +
                      // size / 2);
                      // in.lineTo(dest.x -
                      // size / 2f, dest.y -
                      // size / 2);
                      // markerLine.getProperties().put(iLinearGraphicsContext.line_isStroked,
                      // false);
                      // markerLine.getProperties().put(iLinearGraphicsContext.line_isFilled,
                      // true);
                      // markerLine.getProperties().put(iLinearGraphicsContext.line_globalColor,
                      // color);
                      //
                      // System.err.println("
                      // point si8ze
                      // <"+size+">");
                      //
                      // System.err.println("
                      // making fill proxy ,,,
                      // ");
                      //
                      // new
                      // SimplePDFFill(context).accept(new
                      // ArrayList<iUpdateable>(),
                      // markerLine,
                      // markerLine.getProperties()).compute.update();
                      // System.err.println("
                      // making finished ,,,
                      // ");
                    }
                  }
                }
              });

      return res;
    }
コード例 #4
0
    public DrawingResult accept(
        List<iUpdateable> soFar, final CachedLine line, final Dict properties) {
      if (!properties.isTrue(iLinearGraphicsContext.filled, false)) return null;
      if (properties.isTrue(iLinearGraphicsContext.needVertexShading, false)) return null;

      System.err.println(" -- non special fill -- ");

      Vector4 color = null;
      if (color == null) color = properties.get(iLinearGraphicsContext.fillColor);
      if (color == null) color = properties.get(iLinearGraphicsContext.color);
      if (color != null) {
        if (color.w < 0.001) {
          System.err.println(" rejected: too transparent <" + color + ">");
          return null;
        } else {
          System.err.println(" color is <" + color + ">");
        }
      }

      float w = widthFor(context, properties);
      if (w < 1e-5) {
        System.err.println(" rejected: too thin");
      }

      final DynamicMesh outputLine = DynamicMesh.unshadedMesh();

      final TessLine3dEmitter_long fillEmitter =
          new TessLine3dEmitter_long() {

            @Override
            protected void decorateVertex(int v1, List<Object> name) {
              Object color = name == null ? null : name.get(0);
              if (color == null) color = properties.get(iLinearGraphicsContext.fillColor);
              if (color == null) color = properties.get(iLinearGraphicsContext.color);
              if (color == null) color = black;

              if (color instanceof float[])
                color =
                    new Vector4(
                        ((float[]) color)[0],
                        ((float[]) color)[1],
                        ((float[]) color)[2],
                        ((float[]) color)[3]);

              remapProperties(null, (Vector4) (color = new Vector4((Vector4) color)), 0);

              mesh.setAux(
                  v1,
                  Base.color0_id,
                  ((Vector4) color).x,
                  ((Vector4) color).y,
                  ((Vector4) color).z,
                  ((Vector4) color).w);
            }
          };

      fillEmitter.addTrackedProperty(
          iLinearGraphicsContext.fillColor_v,
          new iMetric<Vector4, Vector4>() {
            public float distance(Vector4 from, Vector4 to) {
              if (from == null || to == null) return 0;

              float d = (from).distanceFrom((to)) * 100;
              return d;
            }
          });

      return new DrawingResult(
          DrawingResultCode.cont,
          new iUpdateable() {

            public void update() {

              ; // System.out.println(" will update fill ");

              if (!context.isLayer(line)) return;

              opName = properties.get(iLinearGraphicsContext.outputOpacityType);
              if (opName == null) opName = defaultOpType;

              path = context.getOutput();
              path.saveState();
              path.setMiterLimit(2);

              lineEmitter.setCanEmitCubic(false);

              // lineEmitter.globalGeometricScale = 0;
              lineEmitter.globalFlatnessScale =
                  context.getGlobalProperties().getFloat(iLinearGraphicsContext.flatnessScale, 1);

              ; // System.out.println(" begin transform ");
              beginTransform(line, properties);

              ; // System.out.println(" drawing now ");
              drawInto(line, properties, null, context, lineEmitter);

              firstOut = true;

              // context.getOutput().clip();
              context.getOutput().fill();

              ; // System.out.println(" call that a path ");
              context.getOutput().newPath();

              fillEmitter.globalFlatnessScale = 1;
              fillEmitter.globalGeometricScale = 1;

              // drawInto(line, properties, null,
              // context, fillEmitter);
              //
              // MeshToPdfType4.dilateMesh(fillEmitter.mesh.getUnderlyingGeometry(),
              // line);
              //
              // PdfShading_type4 shading = new
              // MeshToPdfType4.PdfShading_type4(context.getWriter(),
              // (TriangleMesh)
              // fillEmitter.mesh.getUnderlyingGeometry());
              // context.getOutput().saveState();
              // context.getOutput().paintShading(shading);
              // context.getOutput().restoreState();
              //
              //

              System.err.println(" submitting path ");
              path.restoreState();
            }
          });
    }
コード例 #5
0
    public DrawingResult accept(
        List<iUpdateable> soFar, final CachedLine line, final Dict properties) {

      if (!properties.isTrue(iLinearGraphicsContext.pointed, false)) return null;

      if (!properties.isTrue(iLinearGraphicsContext.containsDepth, false)) return null;

      ; // System.out.println(" circular pointer 3d");

      line.finish();

      unitSquare = null;

      beginTransform(line, properties);

      DrawingResult res =
          new DrawingResult(
              DrawingResultCode.cont,
              new iUpdateable() {

                public void update() {
                  if (!context.isLayer(line)) return;

                  boolean notEnds = properties.isTrue(pointNotAtEnds, false);

                  for (CachedLine.Event e : line.events) {
                    if (notEnds
                        && e.attributes != null
                        && e.attributes.isTrue(isClippedEnd_v, false)) {
                      System.err.println(" skipped clipped end");
                      continue;
                    }

                    if (!e.method.equals(iLine_m.close_m)) {

                      float size = 1f / outputTransform.x;

                      Number ps = e.getAttributes().get(iLinearGraphicsContext.pointSize_v);
                      if (ps == null) ps = properties.get(iLinearGraphicsContext.pointSize);
                      if (ps != null) size = ps.floatValue() / outputTransform.x;

                      // size *= 0.25f;

                      Vector4 color = e.getAttributes().get(iLinearGraphicsContext.pointColor_v);
                      if (color == null) color = properties.get(iLinearGraphicsContext.pointColor);
                      if (color == null) color = properties.get(iLinearGraphicsContext.strokeColor);
                      if (color == null) color = properties.get(iLinearGraphicsContext.color);
                      if (color == null) color = new Vector4(0, 0, 0, 1);

                      color.w *= properties.getFloat(iLinearGraphicsContext.totalOpacity, 1f);

                      size *= context.getGlobalProperties().getFloat(pointSizeMul, 1);

                      remapProperties(null, color = new Vector4(color), 0);

                      if (unitSquare == null
                          || unitSquareLastColor.distanceFrom(color) > 0
                          || Math.abs(unitSquareLastSize - size) > 0.25f) {
                        constructUnitSquare(color, size);

                        unitSquareLastColor = color;
                        unitSquareLastSize = size;
                        PdfGState gs = new PdfGState();
                        gs.setFillOpacity(color.w);
                        String opName = properties.get(iLinearGraphicsContext.outputOpacityType);
                        if (opName == null) opName = defaultOpType;

                        gs.setBlendMode(new PdfName(opName));
                        context.getOutput().setGState(gs);
                      }

                      Vector2 a = e.getDestination();
                      float z = 0;
                      Object d = e.getAttributes().get(iLinearGraphicsContext.z_v);
                      if (d == null) z = 0;
                      else if (d instanceof Number) z = ((Number) d).floatValue();
                      else if (d instanceof Vector3) z = ((Vector3) d).z;

                      Vector2 at = transform(new Vector3(a.x, a.y, z));

                      ; // System.out.println(" transformed <"+a+" "+z+"> to <"+at+">
                        // <"+shouldClip+">");

                      if (!shouldClip)
                        context
                            .getOutput()
                            .addTemplate(unitSquare, -size / 2 + at.x, -size / 2 + at.y);
                    }
                  }
                }
              });

      return res;
    }