Search in sources :

Example 1 with LineSegment

use of com.willwinder.universalgcodesender.visualizer.LineSegment in project Universal-G-Code-Sender by winder.

the class GcodeModel method updateVertexBuffers.

/**
 * Convert the gcodeLineList into vertex and color arrays.
 */
private void updateVertexBuffers() {
    if (this.isDrawable) {
        Color color;
        int vertIndex = 0;
        int colorIndex = 0;
        byte[] c = new byte[3];
        for (LineSegment ls : gcodeLineList) {
            // Find the lines color.
            if (ls.isArc()) {
                color = arcColor;
            } else if (ls.isFastTraverse()) {
                color = rapidColor;
            } else if (ls.isZMovement()) {
                color = plungeColor;
            } else {
                color = linearColor;
            }
            // Override color if it is cutoff
            if (ls.getLineNumber() < this.currentCommandNumber) {
                color = completedColor;
            }
            // Draw it.
            {
                Position p1 = ls.getStart();
                Position p2 = ls.getEnd();
                c[0] = (byte) color.getRed();
                c[1] = (byte) color.getGreen();
                c[2] = (byte) color.getBlue();
                // colors
                // p1
                lineColorData[colorIndex++] = c[0];
                lineColorData[colorIndex++] = c[1];
                lineColorData[colorIndex++] = c[2];
                // p2
                lineColorData[colorIndex++] = c[0];
                lineColorData[colorIndex++] = c[1];
                lineColorData[colorIndex++] = c[2];
                // p1 location
                lineVertexData[vertIndex++] = (float) p1.x;
                lineVertexData[vertIndex++] = (float) p1.y;
                lineVertexData[vertIndex++] = (float) p1.z;
                // p2
                lineVertexData[vertIndex++] = (float) p2.x;
                lineVertexData[vertIndex++] = (float) p2.y;
                lineVertexData[vertIndex++] = (float) p2.z;
            }
        }
        this.colorArrayDirty = true;
        this.vertexArrayDirty = true;
    }
}
Also used : Position(com.willwinder.universalgcodesender.model.Position) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment)

Example 2 with LineSegment

use of com.willwinder.universalgcodesender.visualizer.LineSegment in project Universal-G-Code-Sender by winder.

the class GcodeModel method generateObject.

/**
 * Parse the gcodeFile and store the resulting geometry and data about it.
 */
private boolean generateObject() {
    isDrawable = false;
    if (this.gcodeFile == null) {
        return false;
    }
    try {
        GcodeViewParse gcvp = new GcodeViewParse();
        logger.log(Level.INFO, "About to process {}", gcodeFile);
        try {
            IGcodeStreamReader gsr = new GcodeStreamReader(new File(gcodeFile));
            gcodeLineList = gcvp.toObjFromReader(gsr, 0.3);
        } catch (GcodeStreamReader.NotGcodeStreamFile e) {
            List<String> linesInFile;
            linesInFile = VisualizerUtils.readFiletoArrayList(this.gcodeFile);
            gcodeLineList = gcvp.toObjRedux(linesInFile, 0.3);
        }
        // Convert LineSegments to points.
        this.pointList = new ArrayList<>(gcodeLineList.size());
        for (LineSegment ls : gcodeLineList) {
            this.pointList.add(GcodeModel.toCartesian(ls));
        }
        gcodeLineList = pointList;
        this.objectMin = gcvp.getMinimumExtremes();
        this.objectMax = gcvp.getMaximumExtremes();
        if (gcodeLineList.isEmpty()) {
            return false;
        }
        // Grab the line number off the last line.
        System.out.println("Object bounds: X (" + objectMin.x + ", " + objectMax.x + ")");
        System.out.println("               Y (" + objectMin.y + ", " + objectMax.y + ")");
        System.out.println("               Z (" + objectMin.z + ", " + objectMax.z + ")");
        Position center = VisualizerUtils.findCenter(objectMin, objectMax);
        System.out.println("Center = " + center.toString());
        System.out.println("Num Line Segments :" + gcodeLineList.size());
        objectSize.x = this.objectMax.x - this.objectMin.x;
        objectSize.y = this.objectMax.y - this.objectMin.y;
        objectSize.z = this.objectMax.z - this.objectMin.z;
        /*
            this.scaleFactorBase = VisualizerUtils.findScaleFactor(this.xSize, this.ySize, this.objectMin, this.objectMax);
            this.scaleFactor = this.scaleFactorBase * this.zoomMultiplier;

            this.dimensionsLabel = Localization.getString("VisualizerCanvas.dimensions") + ": "
                    + Localization.getString("VisualizerCanvas.width") + "=" + format.format(objectWidth) + " "
                    + Localization.getString("VisualizerCanvas.height") + "=" + format.format(objectHeight);
            */
        // Now that the object is known, fill the buffers.
        this.isDrawable = true;
        this.numberOfVertices = gcodeLineList.size() * 2;
        this.lineVertexData = new float[numberOfVertices * 3];
        this.lineColorData = new byte[numberOfVertices * 3];
        this.updateVertexBuffers();
    } catch (GcodeParserException | IOException e) {
        String error = Localization.getString("mainWindow.error.openingFile") + " : " + e.getLocalizedMessage();
        logger.log(Level.SEVERE, error, e);
        GUIHelpers.displayErrorDialog(error);
        return false;
    }
    return true;
}
Also used : GcodeViewParse(com.willwinder.universalgcodesender.visualizer.GcodeViewParse) Position(com.willwinder.universalgcodesender.model.Position) IGcodeStreamReader(com.willwinder.universalgcodesender.utils.IGcodeStreamReader) IOException(java.io.IOException) GcodeStreamReader(com.willwinder.universalgcodesender.utils.GcodeStreamReader) IGcodeStreamReader(com.willwinder.universalgcodesender.utils.IGcodeStreamReader) ArrayList(java.util.ArrayList) List(java.util.List) GcodeParserException(com.willwinder.universalgcodesender.gcode.util.GcodeParserException) File(java.io.File) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment)

Example 3 with LineSegment

use of com.willwinder.universalgcodesender.visualizer.LineSegment in project Universal-G-Code-Sender by winder.

the class OutlineAction method generateOutlineCommands.

public List<GcodeCommand> generateOutlineCommands(File gcodeFile) throws IOException, GcodeParserException {
    List<LineSegment> gcodeLineList = parseGcodeLinesFromFile(gcodeFile);
    // We only care about carving motion, filter those commands out
    List<PartialPosition> pointList = gcodeLineList.parallelStream().filter(lineSegment -> !lineSegment.isFastTraverse()).flatMap(lineSegment -> {
        // We map both the start and end points in MM
        PartialPosition start = PartialPosition.fromXY(lineSegment.getStart().getPositionIn(UnitUtils.Units.MM));
        PartialPosition end = PartialPosition.fromXY(lineSegment.getEnd().getPositionIn(UnitUtils.Units.MM));
        return Stream.of(start, end);
    }).distinct().collect(Collectors.toList());
    UnitUtils.Units preferredUnits = backend.getSettings().getPreferredUnits();
    double jogFeedRateInMM = backend.getSettings().getJogFeedRate() * UnitUtils.scaleUnits(preferredUnits, UnitUtils.Units.MM);
    List<PartialPosition> outline = MathUtils.generateConvexHull(pointList);
    return outline.stream().map(point -> new GcodeCommand(GcodeUtils.generateMoveToCommand(Code.G1.name(), point, jogFeedRateInMM))).collect(Collectors.toList());
}
Also used : UnitUtils(com.willwinder.universalgcodesender.model.UnitUtils) ActionID(org.openide.awt.ActionID) ControllerStateEvent(com.willwinder.universalgcodesender.model.events.ControllerStateEvent) com.willwinder.universalgcodesender.utils(com.willwinder.universalgcodesender.utils) BackendAPI(com.willwinder.universalgcodesender.model.BackendAPI) ActionReference(org.openide.awt.ActionReference) ImageUtilities(org.openide.util.ImageUtilities) GcodeUtils(com.willwinder.universalgcodesender.gcode.util.GcodeUtils) UGSEvent(com.willwinder.universalgcodesender.model.UGSEvent) UGSEventListener(com.willwinder.universalgcodesender.listeners.UGSEventListener) GcodeViewParse(com.willwinder.universalgcodesender.visualizer.GcodeViewParse) GcodeParserException(com.willwinder.universalgcodesender.gcode.util.GcodeParserException) CentralLookup(com.willwinder.ugs.nbp.lib.lookup.CentralLookup) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) GcodeCommand(com.willwinder.universalgcodesender.types.GcodeCommand) Code(com.willwinder.universalgcodesender.gcode.util.Code) VisualizerUtils(com.willwinder.universalgcodesender.visualizer.VisualizerUtils) IOException(java.io.IOException) Logger(java.util.logging.Logger) ActionEvent(java.awt.event.ActionEvent) Collectors(java.util.stream.Collectors) LocalizingService(com.willwinder.ugs.nbp.lib.services.LocalizingService) File(java.io.File) FileStateEvent(com.willwinder.universalgcodesender.model.events.FileStateEvent) LoaderDialogHelper(com.willwinder.universalgcodesender.uielements.helpers.LoaderDialogHelper) java.awt(java.awt) ActionReferences(org.openide.awt.ActionReferences) List(java.util.List) Stream(java.util.stream.Stream) ControllerState(com.willwinder.universalgcodesender.listeners.ControllerState) ActionRegistration(org.openide.awt.ActionRegistration) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment) javax.swing(javax.swing) UnitUtils(com.willwinder.universalgcodesender.model.UnitUtils) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) GcodeCommand(com.willwinder.universalgcodesender.types.GcodeCommand) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment)

Example 4 with LineSegment

use of com.willwinder.universalgcodesender.visualizer.LineSegment in project Universal-G-Code-Sender by winder.

the class AbstractRotateAction method parseGcodeLinesFromFile.

private List<LineSegment> parseGcodeLinesFromFile(File gcodeFile) throws IOException, GcodeParserException {
    List<LineSegment> result;
    GcodeViewParse gcvp = new GcodeViewParse();
    try (IGcodeStreamReader gsr = new GcodeStreamReader(gcodeFile)) {
        result = gcvp.toObjFromReader(gsr, ARC_SEGMENT_LENGTH);
    } catch (GcodeStreamReader.NotGcodeStreamFile e) {
        List<String> linesInFile = VisualizerUtils.readFiletoArrayList(gcodeFile.getAbsolutePath());
        result = gcvp.toObjRedux(linesInFile, ARC_SEGMENT_LENGTH);
    }
    return result;
}
Also used : GcodeViewParse(com.willwinder.universalgcodesender.visualizer.GcodeViewParse) List(java.util.List) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment)

Example 5 with LineSegment

use of com.willwinder.universalgcodesender.visualizer.LineSegment in project Universal-G-Code-Sender by winder.

the class MirrorAction method getCenter.

private Position getCenter(File gcodeFile) throws IOException, GcodeParserException {
    List<LineSegment> lineSegments = parseGcodeLinesFromFile(gcodeFile);
    // We only care about carving motion, filter those commands out
    List<PartialPosition> pointList = lineSegments.parallelStream().filter(lineSegment -> !lineSegment.isFastTraverse()).flatMap(lineSegment -> {
        PartialPosition start = PartialPosition.from(lineSegment.getStart());
        PartialPosition end = PartialPosition.from(lineSegment.getEnd());
        return Stream.of(start, end);
    }).distinct().collect(Collectors.toList());
    return MathUtils.getCenter(pointList);
}
Also used : ActionID(org.openide.awt.ActionID) Position(com.willwinder.universalgcodesender.model.Position) ControllerStateEvent(com.willwinder.universalgcodesender.model.events.ControllerStateEvent) com.willwinder.universalgcodesender.utils(com.willwinder.universalgcodesender.utils) BackendAPI(com.willwinder.universalgcodesender.model.BackendAPI) ActionReference(org.openide.awt.ActionReference) UGSEvent(com.willwinder.universalgcodesender.model.UGSEvent) UGSEventListener(com.willwinder.universalgcodesender.listeners.UGSEventListener) EditorActionRegistration(org.netbeans.api.editor.EditorActionRegistration) GcodeViewParse(com.willwinder.universalgcodesender.visualizer.GcodeViewParse) GcodeLanguageConfig(com.willwinder.ugs.nbp.editor.GcodeLanguageConfig) HelpCtx(org.openide.util.HelpCtx) GcodeParserException(com.willwinder.universalgcodesender.gcode.util.GcodeParserException) CentralLookup(com.willwinder.ugs.nbp.lib.lookup.CentralLookup) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) MirrorProcessor(com.willwinder.universalgcodesender.gcode.processors.MirrorProcessor) Node(org.openide.nodes.Node) VisualizerUtils(com.willwinder.universalgcodesender.visualizer.VisualizerUtils) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) GcodeDataObject(com.willwinder.ugs.nbp.editor.GcodeDataObject) LocalizingService(com.willwinder.ugs.nbp.lib.services.LocalizingService) File(java.io.File) FileStateEvent(com.willwinder.universalgcodesender.model.events.FileStateEvent) LoaderDialogHelper(com.willwinder.universalgcodesender.uielements.helpers.LoaderDialogHelper) CookieAction(org.openide.util.actions.CookieAction) java.awt(java.awt) ActionReferences(org.openide.awt.ActionReferences) List(java.util.List) Stream(java.util.stream.Stream) ActionRegistration(org.openide.awt.ActionRegistration) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment) PartialPosition(com.willwinder.universalgcodesender.model.PartialPosition) LineSegment(com.willwinder.universalgcodesender.visualizer.LineSegment)

Aggregations

LineSegment (com.willwinder.universalgcodesender.visualizer.LineSegment)13 GcodeViewParse (com.willwinder.universalgcodesender.visualizer.GcodeViewParse)9 List (java.util.List)9 Position (com.willwinder.universalgcodesender.model.Position)6 GcodeParserException (com.willwinder.universalgcodesender.gcode.util.GcodeParserException)5 File (java.io.File)5 IOException (java.io.IOException)5 CentralLookup (com.willwinder.ugs.nbp.lib.lookup.CentralLookup)4 UGSEventListener (com.willwinder.universalgcodesender.listeners.UGSEventListener)4 BackendAPI (com.willwinder.universalgcodesender.model.BackendAPI)4 PartialPosition (com.willwinder.universalgcodesender.model.PartialPosition)4 UGSEvent (com.willwinder.universalgcodesender.model.UGSEvent)4 ControllerStateEvent (com.willwinder.universalgcodesender.model.events.ControllerStateEvent)4 FileStateEvent (com.willwinder.universalgcodesender.model.events.FileStateEvent)4 LoaderDialogHelper (com.willwinder.universalgcodesender.uielements.helpers.LoaderDialogHelper)4 com.willwinder.universalgcodesender.utils (com.willwinder.universalgcodesender.utils)4 VisualizerUtils (com.willwinder.universalgcodesender.visualizer.VisualizerUtils)4 java.awt (java.awt)4 Collectors (java.util.stream.Collectors)4 Stream (java.util.stream.Stream)4