Coder Social home page Coder Social logo

sfact's People

Contributors

ahmetcemturan avatar hroncok avatar schneider-engineering avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sfact's Issues

Clip Over Perimeter Instructions are wrong

In the clip plugin, "Clip Over Perimeter adjuster" has the note "decrease for bigger gap", but in reality you increase this parameter for a larger gap. It's line 91 in clip.py. I'd make a pull request, but I didn't think it would be worth making a branch for one word :]

Retraction with relative extruder units

When using relative units as extruder values, the retraction distance in the gcode is always 0.0:

G1 F900.0
G1 E-0.0
G1 F1200.0
G1 X9.848 Y-22.999 Z0.4 F1200.0
G1 F900.0
G1 E0.0
G1 F1200.0

This does not happen when using absolute values.

"lash" plugin only works correctly for rectangular geometries

After a bit of tinkering with my new felixprinter I finally figured out that the lash plugin contains a "thinko". The way it compensates for backlash is strictly speaking only correct for rectangular pieces, i.e. with all perimeters aligned to the X and Y axis.
Way to reproduce: make a rectangular piece and rotate it slightly, i.e. alpha=5 or 10 degrees. printing this with backlash in the axis will leave pieces of wall after the corners that are parallel to the axis for a length of backlash/sin(alpha). This could be removed by reversing the extruder movement along the relevant axis for the backlash distance at the corner.

What the lash plugin does instead is trying to compensate for the backlash during the path to the corner, which results in the corner points being in the right place, but the line in between is only correct if it is parallel to one of the axis. On most prints and printers with edges mostly parallel to the axis and backlash 0.1mm or less this is barely noticeable, I only noticed because I have a bit of a vibration issue in my x-axis and can only use it somewhat loosened until that is fixed. Nevertheless, fixing the plugin to do the right thing in every case would improve the quality on any printer that uses this plugin.

I'll gladly provide test pieces or test updated code, but I haven't understood the plugin code yet.

Retraction per second or minute?

retraction used to be set at 30 mm per minute, now it's 30 per second. Is this a typo? I've been having odd retraction voids, and I'm wondering if the "stock" setting should be .5mm per second now.

readme.txt references non-existant sfact_settings folder

From Readme.txt:
"(CAUTION: If you want to use SFACT from within Pronterface, you need to copy the files into a folder called skeinforge within the folder of Pronterface. Then you will need to manually copy or move the sfact_settings folder into that directory as otherwise SFACT wont see the default profiles shipped with it.) "

The sfact_settings folder mentioned above does not appear to exist. Should it read sfact_profiles instead?

Suggestion: adding a textual diagram like the following might also help visually clarify the required final directory structure:

C:\
___ [Path to Pronterface] 
______ Pronterface
_________ locale
_________ sfact_settings (sfact_profiles?)
_________ skeinforge

No calibrate checkbox in Diameter

Hi, I have the recent version of SFACT (1.09.12 SFACT 50 PyPy),
but I cannot find this calibration checkbox and the field to enter my measurements.

sfact

Raft Issue

Running sfact on linux mint works fine until i add a raft, setting both base layers and interface layers to 1 and I get the following:

Multiply procedure took 1 second.

Supports generated for overhangs flatter than: 36.8698976458

Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in call
return self.func(*args)
File "/home/laptop/Desktop/SFACT-master/fabmetheus_utilities/settings.py", line 1173, in execute
self.repository.execute()
File "sfact.py", line 599, in execute
skeinforge_craft.writeOutput(fileName) #use this line instead of the below two for regular python slicing
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_utilities/skeinforge_craft.py", line 135, in writeOutput
return pluginModule.writeOutput(fileName, shouldAnalyze)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/export.py", line 275, in writeOutput
gcodeText = skeinforge_craft.getChainTextFromProcedures(fileName, procedures[: -1], gcodeText)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_utilities/skeinforge_craft.py", line 44, in getChainTextFromProcedures
text = craftModule.getCraftedText(fileName, text)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 226, in getCraftedText
return getCraftedTextFromText(archive.getTextIfEmpty(fileName, text), repository)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 236, in getCraftedTextFromText
return RaftSkein().getCraftedGcode(gcodeText, repository)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 815, in getCraftedGcode
self.addRaft()
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 585, in addRaft
self.addBaseLayer()
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 449, in addBaseLayer
self.addLayerFromEndpoints( self.baseEndpoints, self.repository.baseFeedRateMultiplier.value,self.repository.baseFlowRateMultiplier.value,baseLayerThickness,self.baseLayerThicknessOverLayerThickness, self.baseStep,z)
File "/home/laptop/Desktop/SFACT-master/skeinforge_application/skeinforge_plugins/craft_plugins/raft.py", line 512, in addLayerFromEndpoints
feedRateMinute = self.feedRateMinute * feedRateMultiplier / layerThicknessRatioSquared
TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

I have tried running as both root and regular user, If I reset the value's to zero it slices fine.

Any Ideas ?

Cheers

SFACT generates unnecessary overhang in internal pipe

I generated an STL file from the scad file below and then looked at the gcode after sfact had sliced it using the slice walking window in pronterface. As you rise up through the left hand vertical pipe in the model, the pipe bends through 90 degrees and becomes horizontal. If you move up to where the pipe void starts to narrow, rather than filling in the roof of the pipe uniformly, the bottom (as you look at the model on pronterface) side of the pipe next to the bend has a odd jig in its walls. This is not in the scad model, and if you fly through the model with meshlab it should not be there. Slic3r gets this pipe right, but has problems with parts of the vertical pipes which it leaves filled rather than hollow.

I have not tried building this model as if the pronterface rendering is right this overhang will sag into the pipe which will render it useless.

.scad file>>>>>>>>>>>>>>>>

// Hydrocyclone
// Copyright(C) David Goodenough 2011
// Licenced under GPL V3
// Much of the calculations for this parametric cyclone come from a paper
// found on the web called "The Sizing and Selection of Cyclones" by Richard
// A. Arterburn.

$fs=0.01;

cyclone(supplyIR=3,underflowIR=2,pipeWall=2,pipeLen=15,vesselWall=3);

// A pipe is an outer cylinder from which is removed an inner cylinder
module pipe(len,ir,wall) {
difference() {
cylinder(len,r=ir+wall);

translate(v=[0,0,-0.5]) cylinder(len+1,r=ir);

    }
}

// A funnel is an outer cone from which is removed an inner cone
module funnel(len,ir1,ir2,wall) {
difference() {
cylinder(len,r1=ir1+wall,r2=ir2+wall);

translate(v=[0,0,-0.5]) cylinder(len+1,r1=ir1,r2=ir2);

    }
}

// This is like a pipe, but has a side pipe entering it. This side pipe has
// to be clipped by the inside of the main cylinder. But actually the side
// pipe is a block, its easier that way. Also no need to remove the inside
// the pipe as we remove that later.
module chamber(cylLen,cylIr,cylWall,pipeLen,pipeIr,pipeWall, inletOffset,inletAngle) {
xlen = (2_cylIr) + pipeIr + pipeWall;
ylen = 2_( pipeIr + pipeWall );
zlen = 2*pipeIr + cylWall;
difference() {
union() {
cylinder(cylLen,r=cylIr+cylWall);
rotate([0,0,inletAngle])
translate([inletOffset+pipeIr,-(ylen + pipeWall/2),zlen/2])
cube(size=[xlen,ylen,zlen],center=true);
}

translate([0,0,-0.5]) cylinder(cylLen+ 1,r=cylIr);

    }
}

// This creates the inside of the inlet pipe, which has a 90 degree bend in it
// We remove this from a solid block to create the pipe, and union that with a
// real pipe for the outside connector.
//
//pipeCorder
// Build a pipe with a 90 degree corner
// @param cylR object radius
// @param bendR bend radius
// @param upperL length of upper pipe
// @param lowerL length of lower pipe
//
module pipeCorner(cylR,bendR,upperL,lowerL) {
translate([-(bendR+cylR),0,0])
union() {
// lower arm
translate([bendR+cylR, 0 /.02 */, 0])
rotate([90, 0, 0])
cylinder(r=cylR, h=lowerL+2);
// upper arm
rotate([0, 0, 90])
translate([bendR + cylR, -0 /
.02 */, 0])
rotate([-90, 0, 0])
cylinder(r=cylR, h=upperL+2);
// bend
difference() {
// torus
rotate_extrude()
translate([bendR + cylR, 0, 0])
circle(r=cylR);
// lower cutout
translate([-50, -100, -50]) cube([100, 100, 100]);
// upper cutout
rotate([0, 0, 90]) translate([-50, 0, -50]) cube([100, 100, 100]);
}
}
}

// Cyclone takes several arguements:-
// supplyIR the internal radius of the inflow and outflow pipes
// underflowIR the internal radius of the underflow pipe
// pipeWall the thickness of the pipe walls
// pipeLen the length of the pipes outside the vessel, ie the length the pipe fits to
// vesselWall the thickness of the main vessel walls
//
// Everything else is calculated. The only two bits of this that are not from
// "the sizing and selection of hydrocyclones" by Richard Arterburn are the height
// of the chamber (which is set to its diameter) and and angle for the cone
// (which is set to 15 degrees, the doc says 10-20 degrees).
//
module cyclone(supplyIR,underflowIR,pipeWall,pipeLen,vesselWall) {
cylinderHeightMultiplier = 2;
coneAngle = 15;
// cylinder internal radius is such that the input pipe area is 0.05
// times the cyclone diameter
cylinderIR = sqrt(80 * supplyIR * supplyIR) / 2;
echo("cylinderIR=",cylinderIR);
// cylinder height is twice the cylinder internal radius
cylinderHeight = cylinderIR * cylinderHeightMultiplier;
echo("cylinderHeight=",cylinderHeight);
// the vortex finder depth (in the cylinder) is 0.7 times the cylinderIR
vortexLen = cylinderIR * 0.7;
echo("vortexLen=",vortexLen);
// cone height is such that the angle of the cone is coneAngle degrees (the
// book says between 10 and 20 degrees).
coneHeight = (cylinderIR - underflowIR) / tan(coneAngle);
echo("coneHeight=",coneHeight);
echo("total Height=",pipeLen + pipeLen + cylinderHeight + coneHeight);
removeOffset = cylinderIR + vesselWall;
pipeSeparation = cylinderIR * 2; // may change this if we add a screw fit connector
inletOffset = cylinderIR - supplyIR;
inletAngle = asin(inletOffset/pipeSeparation) + 180;
// Now build it.
// We build it upside down so that it does not need internal support
// First a plate so that it adheres to the build surface.
difference() {
union() {
difference() {
union() {
translate([-50-(removeOffset/2),-25,0]) cube(size=[100,50,2]);
translate([-(cylinderIR+vesselWall)_2.5,-cylinderIR-vesselWall,0])
cube(size=[(cylinderIR+vesselWall)_3.5,
2*(cylinderIR+vesselWall),
pipeLen],
center=false);
}

union() {

                translate([-(cylinderIR),0,0]) 
                    cube(size=[(cylinderIR*3)+vesselWall,
                              2*cylinderIR,
                              pipeLen-vesselWall],
                              center=true);
                cylinder(h=pipeLen,r=supplyIR);
                translate([-pipeSeparation,0,0]) 
                    cylinder(h=pipeLen,r=supplyIR);
                }
            } 
        // First the outlet pipe
        pipe(vortexLen + vesselWall + pipeLen,supplyIR,pipeWall);
        // and the end of the inlet pipe
        translate([-pipeSeparation,0,0]) 
            pipe(pipeLen+(vesselWall-pipeWall),supplyIR,pipeWall);
        // the bend of the inlet pipe

translate([-pipeSeparation,/1.5/ 0,pipeLen+pipeWall-(vesselWall-pipeWall)/2])

            rotate([90,0,inletAngle])
                pipeCorner(supplyIR,vesselWall-pipeWall,pipeLen+vesselWall,pipeLen);
        // end plate
        translate([0,0,pipeLen]) pipe(vesselWall,supplyIR,cylinderIR);
        // Now the chamber
        translate([0,0,pipeLen]) chamber(cylinderHeight,cylinderIR,vesselWall,
                                cylinderIR+vesselWall,supplyIR,pipeWall,
                                inletOffset,inletAngle);
        // now the cone
        translate([0,0,pipeLen + cylinderHeight]) 
            funnel(coneHeight,cylinderIR,underflowIR,vesselWall);
        // The underflow pipe is unnecessary, so ignore it
        // finally the underflow pipe

// translate([0,0,pipeLen + cylinderHeight + coneHeight])
// pipe(pipeLen,underflowIR,pipeWall);
}
// the bend of the inlet pipe

translate([-pipeSeparation,/1.5/ 0,pipeLen+pipeWall-(vesselWall-pipeWall)/2])

        rotate([90,0,inletAngle])
            pipeCorner(supplyIR,vesselWall-pipeWall,pipeLen+vesselWall,pipeLen);

    }
}

Exception

Hi,

as of today (30 Oct), I get the following exception, after I pulled the latest changes from git:

Exception traceback in getModuleWithDirectoryPath in archive:
Traceback (most recent call last):
File "/Users/markusklink/Documents/Printrun/skeinforge/fabmetheus_utilities/archive.py", line 201, in getModuleWithDirectoryPath
folderPluginsModule = import(fileName)
File "/Users/markusklink/Documents/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/export.py", line 271
fileNameSuffix += '.' + getFirstValue(gcodeText, '(')
^
IndentationError: expected an indented block

That error means; could not import a module with the fileName export
and an absolute directory name of /Users/markusklink/Documents/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins

I get this error after try to load a file from Printrun, but I guess it is due to SFact. Hope this helps. Markus

Raft Nozzle Lift seems wierd...

Hey,

Here's what I've got... my carve setting is 0.2mm layer height. my bed surface is 0.3mm above my endstop.

First layer should print at 0.4 if BASE Nozzle Lift over Layer Height is 0.5. also
shouldn't each subsequent slice be moved after moving the bottom layer? if you don't then you're shifting the location of the slice that's printed and messing up the spacing, I think.

I had to do the following to get the expected normal dimensions:
LAYER HEIGHT: 0.2

Extra Nozzle Lift over Layer Height: 1.0 < WHY? do I need this at all? and why is it 1.0, not 1.5 like interface and base?

Interface Nozzle Lift over Layer Height: 1.5 <this seems like it should be 0 since it should be 0 more than 1 layer height above base?

Base Nozzle Lift over Layer Height: 1.5 <OK this seems right

this results in the follow G-Code Z heights for layers
BASE: 0.4
INTERFACE: 0.6
OBJECT FIRST LAYER: 0.8
Layers after: 1.0,1.2... etc.

"Main flow rate" does not do anything

It doesn't matter what I put to "Main Flow Rate (scaler):", the result is always the same.
I have tried values from the default 1 to 0.1, and my reprap always extrudes a bit too much.

I did not have such issues with the original skeinforge

IndexError processing STL file

I downloaded the STL files for this pliers:
Pliers Left.STL
Pliers Right.STL
http://www.thingiverse.com/thing:11332

Both of them produced this error.

keinforge execution failed.
Traceback (most recent call last):
  File "./pronterface.py", line 956, in skein_func
    skeinforge_craft.writeOutput(self.filename,False)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py", line 134, in writeOutput
    return pluginModule.writeOutput(fileName, shouldAnalyze)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/export.py", line 190, in writeOutput
    gcodeText = skeinforge_craft.getChainTextFromProcedures(fileName, procedures[ : - 1 ], gcodeText)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_utilities/skeinforge_craft.py", line 44, in getChainTextFromProcedures
    text = craftModule.getCraftedText(fileName, text)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py", line 72, in getCraftedText
    return getCraftedTextFromText(archive.getTextIfEmpty(fileName, text), repository)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py", line 82, in getCraftedTextFromText
    return SkirtSkein().getCraftedGcode(gcodeText, repository)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py", line 212, in getCraftedGcode
    self.parseLine(line)
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py", line 286, in parseLine
    self.addSkirt(float(splitLine[1]))
  File "/Users/dshanaghy/Workspace/Others/Printrun/skeinforge/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py", line 173, in addSkirt
    closedLoop = outsetLoop + [outsetLoop[0]]
IndexError: list index out of range

Ignoring set Value

the "object first layer infill" speed doesn't work afaik... i think it used the main feedrate for that and not the value i set... (SFACT-5fbef98)

the dwells scattered throughout - G4 P100 -400 etc...

I ran a side-by-side comparison printing with the dwells, and then after commenting ALL G4's out... 88 minutes vs 69 minutes. That is a huge difference. I did notice a teensy bit more strings... very minor for the amount of speedup... it would scrifice less, I think, to just retract a little more. the dwells on a 69 minute print added up to almost 20 minutes (a 27% time increase)... and in the one test model I did, no appreciable difference.

perhaps it could be a check-box in the speed setting "use dwell for (maybe) some improved quality during retractions"

just a thought, but I'll be putting a find/replace in my find/replace.csv to remove them for now.

Scale module scales extrusion width, not just model width

not 100% sure if this is an error or not, but here's a hypothetical.

scale 1.0 on a 10mm part with 0.5mm extrusion width. SF will output a motion path of 9mm.

when the scale is doubled, rather than creating a 20mm geometry for a 0.5mm extrusion, it creates a 18mm extrusion, as though it were expecting a 1mm extrusion width

Bridge settings are applied to the entire layer, if there's a steep overhang.

Whenever a layer contains an overhang that is > 45 degrees, the entire layer is printed as though it were a bridge. If you are using a fairly low bridge flow rate, in order to create tight bridges (.4, for example), the entire layer is printed with .4 flow rate, resulting in a visible indentation at the surface of the object.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.