Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Deftware

340
Posts
10
Topics
63
Followers
11
Following
A member registered May 30, 2015 · View creator page →

Creator of

Recent community posts

Hi Chris, I was just working on a reply. I should have it sent pretty quick here :]

Hi Chris,

I just recently re-worked the cutpath sorting for the Parallel Carving operation and discovered a bug that could cause an undesirable link move between two cutpaths. I think that might be what you're seeing here but it's hard to be sure. If you can send a project file over to the support email address I can take a look and see.

Thanks!

 - Charlie

Hi Chris,

You can make a custom post that includes a feed command in its RapidBlock definition. This will result in outputting whatever feed rate is used by the operation the rapid is occurring for, or you can just hard-code a feed rate directly into your custom post.

So if you want the rapid to use the operation's feed rate, then  change the RapidBlock definition to:

RapidBlock "[CNC_SEQUENCE][CNC_GCODE][CNC_X][CNC_Y][CNC_Z][CNC_FEED][EndOfBlock]"

Or, if you want to hard-code a feed rate, you can just put it directly in the definition.

RapidBlock "[CNC_SEQUENCE][CNC_GCODE][CNC_X][CNC_Y][CNC_Z]F100[EndOfBlock]"

If you're already using a custom post, you can just make these changes to that post. If you are using an existing PixelCNC post then be sure to make these changes to a copy to make the changes to, and use the copy, otherwise your changes will be overwritten by an automatic update.

Let me know how it goes!

 - Charlie

Hi Chris,

I started working on a parametric wood grain system as a simulation appearance option for PixelCNC projects:











I plan to include a few presets that resemble some wood grains and colorations. Do you think this might do the job for you?

 - Charlie

Hi Chris,

Unfortunately there is not yet a means of setting any kind of texture on the canvas/simulation rendering, but I could add it to the todo list! I don't think it would be too difficult to add that functionality. Do you have any suggestions for default included textures? I imagine this would be something accessed via Canvas Appearance and Simulation Appearance where the colors/curves are.

 - Charlie

Thanks for the update Chris!

Hi Joe,

PixelCNC projects store the tools definitions in them, so any changes to your tool library won't affect them. This is so that users can share project files without requiring that they already have the tools defined in their library. The tool library is just a list of pre-defined tools so that users don't have to keep redefining the same tools for new projects, but the project doesn't rely on the library retaining those tools, they are effectively copied to the project.

Hope that helps!

 - Charlie

Thanks for sharing! I'll make sure there's a Snapmaker post in the next update that goes out that includes these changes. Let me know if there's anything else you find that could use changing in the post to improve it at all so it can be included with the post that goes out with the update. :)

 - Charlie

Hi cdibbs,

It looks like the Snapmaker controller is pretty much your basic vanilla Mach3 style G-code setup. I'd suggest trying the Mach3 or the GRBL post processors for milling stuff. Try a dry-run with the tool zeroed out above your actual cutting area and see if it looks like it's traversing toolpaths the way they should be. The Easel post is non-modal for coordinates, where it includes a value for X Y and Z with every command block, which some controllers prefer, so it might be worth testing that one out too if the Mach3/GRBL posts don't work out.

Make a small canvas with a thin Z size and then create a basic tool definition and then from the 3D Contouring operations category create a Parallel Carving operation. Generate a toolpath that cuts to the bottom of the canvas, and has a big cut stepover, and export G-code for that.

Here's a test project you can use to export G-code for to see what works for your controller: https://cdn.shopify.com/s/files/1/0308/9658/6890/files/3x3_Test_Project.pnc?v=17...

If the Mach3, GRBL, and Easel posts don't work properly you can reply to this thread or send us an email at support@deftware.org :]

https://itch.io/docs/buying/already-bought

Hi Pat,

No worries, helping people make stuff happen with PixelCNC is all part of the job! ;)

So the canvas Z size is just the maximum potential depth cuts can be generated down to, but if there is content in the canvas volume that is higher than the bottom of the canvas then cuts will only be able to go down to that content with the 3D and 2.5D operation types. So if you want to cut some shapes into the workpiece they will need to be as deep was you want to cut when using a 3D or 2.5D operation. The canvas' Z size is the depth limit you'll be able to have shapes go, and why it's the Max Depth limit (unless the tool's length limits it first, and Ignore Tool Lengths isn't enabled).

With the 2D milling operations the canvas is only used to generate a 2D contour to generate cuts from, regardless of how shallow/deep that contour is generated at, and cuts will always go down to Max Depth.


I believe the reason you're seeing the cuts being offset way into the digits with the 2D offset milling operation is because of your tool definition. It automatically offsets the contour that cuts will be generated inside of by half of the cutter's diameter, where the diameter is the widest part of the flutes (typically the shank diameter for most tapered cutters). We might change this so that it only offsets cuts by the diameter of the cutter at Max Depth, rather than the full width of the cutter.

The 2.5D milling operations properly accommodate for the cutter's geometry at each cutting depth, so with a tapered cutter you will see cuts progress more toward the middle of pockets the deeper it cuts, as it's not able to keep the tool inside the boundary of the shape without moving it away from the edges of the shape at each successive cutting plane, like this:



This is what happens when I generate a 2D offset toolpath with a big fat wide-angled tapered cutter, the cuts must be moved inward to accomodate the full diameter of the cutter:

So if it only cuts that top layer it will never reach the full diameter of the cutter, which is what you're seeing. You can fix this by creating a tool definition that only has a diameter for the depth you plan to cut, but I think I'll be changing it so that it automatically only uses the Max Depth the cutter will go to determine how far to offset the contour for a given tool.


I think the best way to go is make sure that your digits are actually 0.5mm deep and use the 2.5D milling operation instead, to ensure that the tool is always cutting out to the edges for each cutting depth. You can see the depth of your canvas at any point by putting your cursor over the bottom of one of the digits and looking at the XYZ cursor position on the status bar, it will give you a readout of the coordinate (relative to the canvas origin) of the point on the canvas surface that the cursor is pointing to, like this:


This is with the canvas Z size set to 1 inch and the machine origin is at the bottom of the canvas, so with my ampersand being 0.1" deep the canvas surface only varies between 0.9" and 1.0" (from the Z origin at the bottom).

You *might* need to make your digits slightly deeper than 0.5mm, as there can also be a bit of contouring depth precision variance that results in the very bottom of a pocket not getting contoured even though it appears to be down to the Max Depth specified, because numerically it will looks like it's 0.000001mm above -0.5mm, due to floating-point rounding errors that can occur. We did add a tiny Z offset to a few operations' toolpath generation algorithm to mitigate this so you might be fine just making sure your digits are actually 0.5mm deep from the top of the canvas and calculating a 2.5D Offset Milling toolpath with a 0.5mm max depth.

Hope that helps!

 - Charlie

Ah, the situation is that the canvas does not have any empty space to cut at -0.4 and -0.5. Only if a contouring at the canvas at a multiple of Cut Depth will result in an area that's empty will cuts be generated there. So your numbers will need to go down to -0.5mm from the top of the canvas if you want them to be cut that deep.

Alternatively, you can use the 2D Offset Milling which will let you specify where along the Z axis to generate a cutting contour, and then an arbitrary Max Depth that ignores the canvas contents. For example:


Here the ampersand only goes down 0.1" so I set my Contour Z on the 2D Offset Milling's parameters toward the top of the canvas where it intersects the contour of the ampersand at 0.95". Then I can set the Max Depth to reach the bottom of the canvas and have it generate cuts all the way down.

Hope that helps!

 - Charlie

Hi Pat,

Are you trying to cut down to 5mm or 0.5mm? If you want to cut down to 0.5mm then that's the deepest cut you will get if you set Max Depth to that. You will get cuts in "Cut Depth" increments down to "Max Depth" at the bottom.

 - Charlie

There is not at present but it should be possible to make one. If you can send some example G-code to us we can try to get one cooking for you that you can test out. :)

 - Charlie

Hi there,

The situation is that "Max Depth" must be the destination depth below the top of the canvas. Set this to 5mm and with a cut depth of 2mm you will get the -2, -4, and -5mm cuts you were hoping for :)

 - Charlie

Glad to help Doug! :)

I think I could word things a bit better: toolpaths are generated at the canvas' resolution, because that's the resolution that layers are composited at (i.e. the 'camera snapshot' analogy). A high resolution raster-layer is going to appear low resolution when the canvas resolution is low, and generate coarse toolpaths. Increasing the canvas resolution will allow more of the detail in a raster-layer's contents to come through, and be captured and represented when toolpathing. The raster-layer's contents and resolution are not changed by the canvas resolution though - they just might not be captured/represented if the canvas resolution is too low.

Another analogy: an old low-resolution webcam taking a photo of a painting doesn't change the contents of the painting, it just doesn't capture the details of the painting. Raster-layers are just paintings being placed around the canvas, and to generate a toolpath (and render it in the 3D view) the canvas is composited into a 'snapshot', at the canvas resolution.

The contents of a raster-layers does not change with canvas resolution changes, only the resolution that they're composited with the canvas at, which only affects rendering the canvas in the 3D view, and toolpaths generated from the canvas.

Ok, I hope my explanation wasn't annoying - I just felt like it was easy to interpret my previous reply the wrong way, almost diametrically opposite of what I was hoping it would convey :P

Let me know if you got what you needed :)

 - Charlie

Hi Doug,

The canvas resolution doesn't affect the loading of raster (pixel-based) images as raster-layers. They will retain their original pixel data when composited with the canvas. The canvas resolution only affects when an SVG vector image is loaded as a raster-layer, as it determines the number of pixels in the resulting raster-layer.

Basically, when you load an image as a raster-layer, it doesn't matter what the canvas resolution is. The canvas resolution only affects the resolution of the canvas as a whole but not the contents of layers that are being composited onto the canvas.

If you load a large high-resolution image it *might* get downscaled a bit just to keep things quick, but not usually in any noticeable way. It's just to avoid unnecessarily expensive compute. 

Toolpaths are generated from the canvas composition as a whole, where all of the layers (except paths-layers) are combined per their blending modes, origins, and dimensions, at the canvas' resolution. The contents of a raster-layer are not themselves affected by the canvas resolution. You can think about the canvas as a "camera" that's just capturing the state of the layers within it, and whatever that camera captures is what toolpaths are calculated from - but raster-layers themselves are independent of this camera with their own resolutions.

Text-layers and model-layers are rendered at the canvas resolution, so whenever it changes so do they. The only "permanent" effect that the canvas resolution has is when generating raster-layers from a paths-layer. That occurs at whatever the canvas resolution is at that time and increasing it after the fact will not re-calculate the raster-layers produced using functions like Shapes From Paths, Sweep Paths, Raster/Text Along Paths, Stroke Paths, etc... They are generated at the canvas resolution and don't change with the canvas resolution being changed after the fact.

I feel like I could probably explain it more clearly but hopefully you got the answers to your questions in there somewhere :)

 - Charlie

Hi Joe,

You can define your tools, add them to the tool library, and then re-arrange them so the ones you most commonly use occupy the first ten tool library slots. Then, when you're working on a new project, you can just click 'Load Library to List" while in the Project Tools mode, which will copy the first ten tool definitions from your tool library to the current project automatically.

For the project size and origin all that matters is that you define a canvas volume that fits the cutpaths you want to generate - it doesn't have to be the same size as your workpiece but some people like to treat the canvas volume and its dimensions as their workpiece. The machine origin is relative to this volume - which is to say that wherever you want to zero your machine, relative to the generated toolpaths, is restricted to the canvas volume and its extents.

Does this answer your question?

 - Charlie

No problem! Glad to help :)

 - Charlie

(1 edit)

Hi Joe,

With the Parallel Carving operation you can set the 'Cut Angle' parameter to 90 degrees to make the cuts go along the Y-axis.

Hope that helps :)

 - Charlie

(1 edit)

No problem! Glad to help :)

(1 edit)

Hi oslow1,

You can use the Min Depth parameter to prevent cutpaths from cutting everything above the depth value you set. i.e. for a 0.5" thick canvas if you set Min Depth to 0.25" then cutpaths will be restricted to the bottom half of the canvas volume, like this:


Hope that helps!

 - Charlie

Hi Joe,

The only thing you can do is re-create the project next to itself on the same canvas. Firing up two instances of PixelCNC will probably be the easier way to go, with the original older project in one window and the new modified one in the other.

Hit the PrintScreen button on your keyboard and you should have everything copied to the clipboard to paste into an image editor program! ;)

 - Charlie

Reminds me of "cultured marble", which I thought was a funny way to try and hide the fact that it's just plastic :P

So no ballnose on the V-bits, you're just using a relatively small stepover? Is there any kind of manual cleanup after cutting - sanding or anything? They look really good, and detailed!

- Charlie

Looks awesome Doug! Good work :)

I'd never heard of Corian before, how's it cut?

Embarrassing regressions are a fact of life as an indie dev. Keep up the good work!

Hi Doug,

The best way to use the Trace to Paths function on an individual layer is to hide everything else first and just have the layer by itself. The green/red Z-contouring plane that the function shows is only really true and accurate when tracing the canvas to paths as a whole. When tracing individual layers it can be a bit deceptive because it doesn't take into consideration how the layer is being composited with the canvas, per its blend mode, and the tracing plane may not accurately depict what will actually be traced.

To make a text-layer that subtracts a certain depth you only need to make it's height the depth you want it to be and then move it up beneath the top of the canvas by the same depth. i.e. for 0.1" deep text you would make your text-layer's Z size 0.1", and if your canvas' Z size is 0.5" inches then you would set your text-layer's Z origin to 0.4". Then set the text-layer's blend mode to subtractive. This applies regardless of what is below the text-layer and how high it is. So, each 'step' in your project would basically have the same layer Z origin and Z size with only different text and XY position. 

If the text-layers are subtractively blended with the canvas, and they are the only things in a group (with the canvas' Z-fill set to the bottom of the canvas) then you will not see anything when that layer group is active. In order for the text to show it will need a different blend mode, or the canvas Z-fill to be set to the top of the canvas (not the layer's Z-fill as shown on the layer's properties, but the Z-fill under Canvas Properties).

If you want the text to blend the way you were originally trying you can invert the text-layer and set its Z-fill to the top of the canvas, and set its blend mode to Minimum. This will allow you to set the Z origin of the text-layer to the exact Z coordinate you want the text to be cut down to. The top of the layer (i.e. Z origin + Z size) will need to be at least as high as the surrounding material the text will be cut into.

I think you should be able to get the text Trace to Paths to work and then can use the medial-axis carving operation using a Depth Offset down to the material depth you want to cut into. There's no way to directly convert text or anything else into single paths to use with the paths-carving operation, unfortunately. The closest thing would be a function that calculates a medial-axis path but that will leave all sorts of extraneous paths on there at corners and stuff. It won't directly generate 3 lines for the letter 'H', for instance.

If you switch your text-layers to use the minimum blend like I mentioned above, you should be able to toolpath Group 2 if it only contains text-layers that are set up that way, but you will still need to set your Canvas Properties' Z-fill to the top of the canvas first, then you will be left with the text as pockets that you can generate toolpaths from.

I will do up an example project you can look at and email it back to you later today :)

 - Charlie

Sounds good! Look out for it in the next update, v1.70b, which should be out in the next month or two :)

 - Charlie

Hi Doug,

You can offset lower where the medial-axis carving operation will cut with the Depth Offset parameter that shows under the Medial-Axis Carving Operations toward the bottom of the operation parameters. A positive value will offset downward, where zero represents the top of the canvas, so you might have to calculate what offset to use. When your mouse is in the 3D view you can put the cursor on the point of the canvas you want to get the Z coordinate of by looking at the coordinate readout on the status bar at the bottom of the PixelCNC window. Just subtract that value from whatever the Z coordinate is for the top-plane of the canvas. If your machine origin is set to the top of your canvas then you just use that number, except flipped positive (because all coordinates on the canvas surface, with the origin set to the top-plane of the canvas, will be less than zero). That will put your medial-axis carving cutpaths where you want them! Rapids will stay at the Rapid Height above the top of the canvas though, regardless of your Depth Offset.

Just as an FYI you can also composite your text onto your canvas subtractively to get a better visual representation of what you're trying to do. For actually generating cutpaths I would do like you already are and trace the text to paths to use as contour input for the operation, or just have the layer groups with each text-layer inverted and Z-Fill set to the top of the canvas, which seems a bit more roundabout though but it will do the same thing.

 - Charlie

Hi Doug! :)

Yes paths-layers are always visible as layer groups do not apply to them. Groups can be thought of as separate canvases that are sharing the same pool of layers.

I was just thinking this morning about maybe having paths-layers also be a part of the layer groups though. Do you think that would be better?

 - Charlie

Just keep in mind that all editing functions are limited to the resolution that you set for your project's canvas, in pixels/inch, or pixels/mm - depending on whether you're working with inches or millimeters for your projects. You can set what measure units to create projects with via the Config menu, under CNC/CAM Settings.

Increasing the canvas resolution will allow for finer details to be represented and toolpathed, but it will make everything slower - so you only want to use the absolute lowest possible resolution without sacrificing the level of detail or level of precision your project needs. A larger project like a sign can typically get away with a lower resolution ~100-150 pixels/inch, while a small engraving probably would need 300-400 pixels/inch.

 - Charlie

Hi TedHerman,

Yes, you can load images/models/vectors and create text and have them subtractively blended with the canvas to create a negative.

For example:


Here an STL model has been loaded, then the canvas Z-Fill is changed to the top of the canvas volume, and the layer's blend mode is changed to Subtractive, which results in:


Though what would be better than simply scaling up the model(s) is converting them to a raster-layer (a heightmap) by selecting the model and clicking "Copy to Raster-Layer", then hide/delete the original model layer, select the raster-layer, and click Edit Raster on the left. This will enable the mode for editing the content of the raster-layer that was produced from the 3D model layer. In the raster-editing mode you can then use the Expand/Contract function to properly add some more room for your items. This is the way to go if any of your items' shapes are not particularly round as it will account for all surfaces in all directions, instead of outward. i.e. if you had a ring and scaled up a negative of it the ring would not fit due to the empty inner-area also being scaled up to a larger size. Expand/Contract allows you to push the shape outward from its surface. Be sure that your project's canvas resolution is set high enough to accommodate the fine expansion you want to apply to a raster-layer - before creating the raster-layer from your loaded model.

Then you have several possible combinations of CNC operations that you could use to carve out the acrylic, depending on your machine, what cutters you have available, etc. A 2.5D trochoidal milling operation, with an acceptable Leave Stock value, would be great to rough out the negative. Then you could come back in with a 3D Contouring operation to finish it (Parallel Carving). Alternatively you could use 2.5D Offset Milling with Stepover set to zero so that it only generates surface-cuts, omitting the interior cuts that would only be cutting where trochoidal milling roughed the part out, along with a small Cut Depth for finishing - which would be best using a ballnose cutter of some kind. Or you could just cut the whole thing beginning-to-end using Parallel Carving and a ballnose cutter, possibly with a limited Cut Depth depending on your machine and available cutters, depending on how deep and steep your pockets are.

Feel free to ask further questions if you need help with anything else! Hope this helps :)

 - Charlie

Hi GDavid,

The whole purpose of a bitfile is so that custom games can be shared without being readily modifiable. Someone can reverse engineer them but it was intended to serve as a representation of the game that isn't in readable text form like the scripts.

Connecting to a server using a local bitfile would cause all kinds of issues because the client/server are assumed to be running the same game bitfile. That would be akin to joining a Counter-Strike server while running the Team Fortress client-side code in the Half-Life game engine(s), if that makes sense.

 - Charlie

Been following MM since v0.7, which I downloaded in January of 2020, and you've been able to add a variety of great and interesting features that I never imagined MM would have. Keep up the good work! 

Hi Joe,

The Position Offset allows you to move where along the entire path's length that it positions the raster or text layer. A circular path has a node that acts as both the beginning and end of the path, which means that wherever that node lies is sort of a boundary that an Along Paths won't be able to cross. I realized this a while ago and haven't thought about different solutions yet. For now you'll just have to rotate the paths-layer so that the boundary node is on the opposite side of it from where you want your raster/text to be mapped to.

I think the simplest thing to do is just make it so that the 0.0->1.0 value range goes farther with continuous/looping paths, so that the raster/text can be seamlessly mapped around the entire path. I'll have to take a look and see what needs to be done.

 - Charlie

Ah, yes the size is in the layer's space because it can be oriented at any arbitrary angle, not just 90 degree increments. It wouldn't make sense if it was rotated at say 45 degrees - then which axis would you scale it on? Keeping the scaling relative to the layer allows for these arbitrary rotations.

You could always create a new blank raster-layer below the rotated image's layer and merge down, so that the rotated image is merged with the unrotated blank layer. The new raster-layer will then have the rotated layer natively oriented in the default canvas space, where the canvas XY axes are the same as the layer's.

- Charlie

So PixelCNC automatically scales a loaded image to fill the canvas while retaining its aspect ratio. So if your image is square (width and height are the same) then the layer will be scaled to the smallest canvas dimension, either X or Y. In the case of a canvas that's 24"x48" that would mean that a square image would be scaled to 24"x24".

I'm not sure I follow what you mean about the orientation and resizing. :P

 - Charlie

Alright!