Activity

2klxst

Hello!

Today came some minor improvements since I haven’t had a lot of time to work on the app. I fixed the cutout bug from yesterday with Claude (Side note: I think that Claude is the best AI for programming help). There is one bug that came up while fixing that - when you have 2 different cutouts, the second one wouldn’t be added until you delete the first one. But that got fixed right away! A small change - I have made the default state of the Auto Fit View viewer setting off. I still need to add screwposts for mounting the PCB in the enclosure.

Below is a short GIF showing the fixed cutout functionality.

That’s it for today!

Attachment
0
2klxst

Hey everyone!

Today I made the progress bar in the welcome screen dynamic and functional. There also came a big functional improvement in the main workspace window - I’ve added functional cutouts and ports. I have decided to cut the hardware library functionality as I think that the ratio of time spent coding and users using the function is too small. I’ve also decided to cut the port preset functionality for the same reason (you can just input the size accordingly for any port). On the bright side, you can add custom cutouts and ports with custom X and Y position and custom size. There weren’t many bugs standing in my way today. Also debugging the cutouts and ports system took a long time since I had to re-open the app every time. There is still one bug where the screwposts pillars move as much as the cutout offset is - that will get fixed tomorrow!

Below is a screenshot of the updated Cutouts & Ports page.

Getting close now!

More to see here soon…

Attachment
0
2klxst

Hello!

Today came a lot of smaller fixes. I’ve:

  • Implemented the functionality for the recent projects list on the welcome page and fixed a bug with it where the project would be unsaved after opening it
  • Changed the style of the welcome page to “Fusion” to match the main window.
  • Added exporting (STL/STEP).
  • Verified that the exported files are correct.
  • More small fixes/tweaks.

I don’t really see the point in listing the small fixes or tweaks like changing the print() calls in main.py to my own printing function, because that would just increase the reading time at no added value to the reader.

Now the project is like 85-90% done! Excited for v1.0.0!

In the screenshot below you can see the updated welcome screen.

That was it for today!

More updates on the way…

Attachment
0
2klxst

Hello!

I’m back with yet another update. This time I’ve implemented quite a lot of things in a short amount of time. Here they are:

  • Saving and loading .boxcad files system (supports keyboard shortcuts such as: CTRL + S to save the file, CTRL + SHIFT + S to save the file as, CTRL + O to open a .boxcad file)
  • Undo and redo system (also supports keyboard shortcuts such as: CTRL + Z to undo and CTRL + Y to redo)
  • Implemented the message box for Help > About BoxCAD sub-category
  • Linked the official docs page to the Help > Documentation sub-category
  • Working menubar (with File, Edit and Help categories)

I don’t think that I’ve ran into any bugs today thanks to the great base that I used to build the new features upon.

I have found the list approach today easier to use since today was eventful. There is still some things that need attention (mainly the Internal Hardware and Cutouts & Ports pages).

In the first screenshot below you can see the new categories at the top of the window and in the second screenshot you can see the Help > About BoxCAD message box.

Happy creating with BoxCAD

More soon…

Attachment
Attachment
0
2klxst

Hey all!

Today, after a short break, I connected the functionality of the two windows so now you can create an empty project. There was one bug that I’ve ran into while developing that - it turns out I just needed to import the QWebEngineView component as it is required by the main_window.py script. I’ve also made a simple docs page, which you can check out at https://sites.google.com/view/boxcad-docs/home, and connected it to the “Docs” button. There were some other small changes like: slightly changing the name of some categories in the parameter dock. I also though that I spotted a bug with the counterbore system but it wasn’t - if you set the counterbore diameter to 5 and the screwposts outer diameter to 5, the counterbore becomes just a hole and if you increase the counterbore diameter, the counterbore hole gets bigger as it should. I believe that this isn’t a bug because I’ve checked all parameters and the code and everything is in order. Well, that was mainly it for today. In the first screenshot below you can see the updated names of the categories and the counterbore (working) and in the second screenshot you can see the nice header of the docs page.

Thanks for reading!

See you soon!

Attachment
Attachment
0
2klxst

Hello!

I’m back with yet another devlog. Today I had to make a decision to remove the selection of different joint types as it was eating up too much of the development time and I think that not a lot of users will use the feature. For now, only the screwposts are available. I have also added the hole type selection to select None (No modifications), Counterbore or Countersink holes. On the bright side, the screwposts are customizable - counterbore, countersink, screwposts inset. I’ve tried to remove the 3D viewer wait to display the loading screen when you click the “Initialize Project” button, but as far as I’m concerned, it isn’t possible, therefore I’ve added an explainer label for that below the “Initialize Project” button. In the first screenshot you can see the updated “Bore & Countersink” page and in the second screenshot you can see the updated welcome screen.

Thanks for reading!

Attachment
Attachment
0
2klxst

Hey all!

After a short break I’m back. Today on the agenda, there were some small bug fixes and min/max value enhancements. I got around to implementing the different joint types. There is a bug where there are pillars growing out of the bottom of the enclosure which you can see below in the screenshot. Most likely, this will get fixed tomorrow. I know this isn’t a long devlog but I’m exhausted.

Thanks for reading the short devlog!

More to come…

Attachment
0
2klxst

Hey Coders!

Today was also a rather chill day as I mainly just fixed some bugs. I fixed the circle in hole issue (Before - screenshot 1, after - screenshot 2), then I fixed the initialize button logic as it wasn’t acting as it should and lastly I removed the support for italicized console messages to improve performance. Today I ran out of time, but tomorrow I have to connect the logic to the “Lid Height” parameter.

That’s it for today,

Thanks for reading!

Attachment
Attachment
0
2klxst

Today and yesterday I did some smaller but still meaningful improvements. I added threading so that the whole application feels a little bit faster. And I also added a “Rendering…” text in the top left of the viewer to tell the viewer that something is actually happening during the wait. The last thing that I did was update the old spinner during the initialization of the engine. You can see both the new “Rendering…” text and the new spinner loader below in the screenshots. The spinner is from the website https://cssloaders.github.io/. There is still one bug though - if the user presses the “Initialize Project” button too quick, the spinner is on the screen forever. That will get fixed tomorrow or the day after that. That’s it - thanks for reading!

Attachment
Attachment
0
2klxst

Today was finally the day that I implemented actual enclosures instead of a box. First I copied the example that CadQuery has on their website (https://cadquery.readthedocs.io/en/latest/examples.html#a-parametric-enclosure), changed some variable names and put the code into the rebuild_geometry function that runs everytime that a parameter in the parameter dock is changed. Of course, it’s not yet perfect, but it’s getting there! There was one annoying bug where the viewer wouldn’t want to update to the new logic and I was getting a BRep error. Turns out my minimum, maximum and default value settings were wrong in the build_ui.py script at first. Then I updated them and everything worked perfectly. The next needed step will be to implement threading since the application in this state is very slow and re-calculating everything and then updating the viewer every time a parameter is changed, is extremely slow for today’s standards. Thanks for following along - see you soon!

Attachment
Attachment
1

Comments

secretaditzu78
secretaditzu78 17 days ago

Wooow!~

2klxst

Hey coders!

Today I did something I have never done before. Yes that’s right - I did some optimization and removed a memory leak. There was a bug where the viewer would just be a black screen - I’ve attached a screenshot of the bug. This was fixed by re-disabling renderer.autoClear which disables automatically clearing the view before rendering the next frame. Then I just manually cleared the scene and the bug was fixed! I believe that now there’s a big difference in the viewer loading time. I have also added a splash screen which I’ve quickly made in Canva. I added it to make the opening process feel shorter and to show the user that the app is actually doing something. I attached it as a screenshot below. I just needed to call pyi_splash.close() in the program when the window loads and we’re good to go!

Thanks for reading!

Attachment
Attachment
0
2klxst

Shipped this project!

Hours: 50.25
Cookies: 🍪 1052
Multiplier: 24.63 cookies/hr

I built and shipped the first version of BoxCAD that is the first proof of concept of the app. BoxCAD is a lightweight, Python-powered desktop application for designing custom, 3D-printable project enclosures. Instead of manually modeling simple boxes in CAD software, you define dimensions and hardware presets, preview the result in real time, and export directly for manufacturing. There were some bugs that arose along the way which are documented in the devlogs - I encourage you to go read them! The longest and hardest part was definetly the 3D viewer. I’m extremely proud of my app so far!

2klxst

This is a devlog that shortly sums up my experience using PyInstaller for the first time. So, firstly I got Google Gemini to generate a base pyinstaller command to build the welcome screen first which I haven’t had many issues with. The main window was a whole different story. First I learned that I also need to include the /libs folder so that the Python script can access the qwebchannel.js and InfiniteGridHelper.js files. Then I had a bug where if the script couldn’t find the model.stl before it was generated, the grid wouldn’t appear so I made the grid generate independently of the STL file loader. And I just had to package the two executable files up into a .zip file, make a GitHub release and ship again to Hack Club! I didn’t really know what screenshots to include, so I just included a screenshot of the app, sorry!

Attachment
0
2klxst

Today I mostly prepared for the launch of version 0.0.2. I fixed some visual bugs/inconsistencies in the 3D viewer and footer (synced initial button state with theme-toggle logic and fixed the spacing in the footer of the Getting started page). Below you can see the updated footer and the synced menu button styles. I also recorded the main screen demo GIF which you can see in the README file. There weren’t many bugs in the hour and half that I did these tweaks, so this devlog is a bit shorter than others.

Attachment
Attachment
0
2klxst

Today I mostly implemented some quality-of-life fixes and did some small changes. For example, I fixed the invisible menu button, changed the color of the menu button to be more visible depending on the theme. Thanks to the dynamic background color of the menu button, I got educated on data attributes. Oh, I also now use the Z axis as up as opposed to Y. This change was simple for the THREE.JS camera, but not for the grid orientation, the cube’s position and the measurement arrows. Now, I’ll actually get to implementing more parameters. In the screenshots you can see the changing background color of the menu button. Thanks for reading! :)

Attachment
Attachment
0
2klxst

There we go! Now the entire Getting Started page and the loader is working as expected. I fixed it by scanning through the code and questioning Gemini. In the end the issue was because of a single space (the CSS selector “#loader-container .fade-out” was supposed to not have a space like “#loader-container.fade-out”). Don’t worry - I’ve gotten educated on the Now the app also has pre-loading! This is, in short terms, a big time-saver - it preloads the app in the background while waiting for the user to click the “Initialize Project” button. As a bonus, in the eyes of the user the viewer now loads faster because of the pre-loading. Before moving off the loader, I need to remember to add an error screen to the viewer in case something goes wrong. I’ve also just noticed an artifact on the second screenshot which appears to be showing the scene that is not properly initialized yet. That will maybe be fixed in a small bug-fix related release. Next on the list is of course adding more parameters. There is not much to see in the screenshots at this moment - but don’t worry there will be once I’ll get to adding more parameters. See you next time! :)

Attachment
Attachment
Attachment
0
2klxst

This time I got started by refining the loading system and I got somewhere but I’m not at the finish line yet. There is still some annoying logic gaps and smaller bugs and inconsistencies that I need to fix. This will be the final iteration of the whole initialization system.

It will work like this:

  • The user clicks on the “Initialize Project” button while the 3D viewer shows an “idle” text
  • The 3D viewer starts loading behind the scenes, displays the loading state and all normal toolbox categories appear
  • When the viewer finishes loading, it fades out to the starting view of the cube

In the screenshots you see the current work in progress of the whole system.

Attachment
Attachment
0
2klxst

Today I didn’t do much. I just updated the loading screen and added a message that the 3D viewer is ready to use. After that you can just click the “initialize project” button and use the program. Even though the viewer loading process is currently bug-free, there is some work to be done, so just bear with me. Most likely, the loading process will be updated little-by-little with every smaller update (x.x.1, x.x.2, etc.).

Attachment
Attachment
0
2klxst

First of all, I have excluded the model.stl file from the GitHub repo since it’s dynamic and always updating. I’ve decided to exclude the dynamic camera positioning and rotation to include the full enclosure into view. I need to balance out the time that it takes to implement one function and how many users will appreciate/use the function which is important when making apps. For the auto-positioning feature, I think the time-to-value ratio is too high. Next I tweaked a few parameters like the scaleFactor, coneHeight, etc. in the viewer.html and let me tell you - it took a looooong time. I also tuned the camera’s FOV, the starting cube size (changed it to 10x10mm), fixed the dead zone in the top right corner, added dynamic 3D viewer loading messages and disabled the initialize project button until the viewer is completely loaded. There weren’t many bugs that arose while tweaking little things so today there were many things changed. I also had to add a 200ms timer of wait time when a parameter is changed to improve performance and remove multiple updates in quick succession. I got educated on timers through Google’s Gemini which very much helped me. This is it for today, thanks for reading! :)

Attachment
Attachment
Attachment
0
2klxst

I’ve decided to just keep in the first “bug” I’ve talked about in the previous devlog since it points and tells the user that they can use the menu. I’ve fixed the other bug and now changing the parameters updates the display! Today I tried to tackle moving the camera in a position from which you can see the whole enclosure. With that I tried to implement smooth camera lerping but it wasn’t really working so I scrapped the idea. I’ve decided to implement that in a later version (v1.1 or so) - hopefully I remember :). I’ve also started working on auto-scaling measurement arrows but only the X dimension measurement is working and even that is working poorly. I guess I discovered a bug early that’s quite a big one. It’s going to get fixed later today or tomorrow. In the first and second screenshot you can see the dimension measurement bug I wrote about. In the third screenshot you can see that the viewer responds to the parameter change. Thanks for reading!

Attachment
Attachment
Attachment
0
2klxst

Today I implemented the initialization of the project and added a settings menu to the 3D viewer. I’ll admit it looks nice, but I’ve spent way too much time on it to make it perfect :). But good things take time! After I took care of the settings menu, I tacked the core functionality of the app. I made it so that when you click “Initialize project” all parameters appear and you can tweak things. And after all this time, I’ve implemented dynamic STL file generation. Well it may sound fancy at first, but this just means that instead of loading a file called “model.stl” which is a sample 20mm x 20mm x 20mm cube, the script now generates a cube with the starting dimsensions 30mm x 30mm x 30mm. Then two small bugs arose. One is where when you click the button to initialize the project, the app would focus on the settings menu button in the 3D viewer. You can see this bug in the second screenshot. The other bug is with the 3D viewer itself because it doesn’t display the correct dimensions. I’ll fix the two bugs tomorrow!

Attachment
Attachment
0
2klxst

Today I tacked some quality of life fixes (e.g. adding color coded messages to the terminal, …). The new color-coded terminal print function is universal and pretty efficient! It also has a suppressed type for errors that don’t have any meaningful effect on the app. After I made the new printing function, I needed to redirect the messages from the QtWebEngine to the terminal, which was done using a custom QuietHandler. Oh yeah, I also fixed the weird rectangle bug if you recall! Instead of loading every page into the toolbox dynamically, I reused the “Getting Started…” page from Qt Designer. Below I attached screenshots of the bug-free UI, colored terminal messages and the new color-coded terminal print function.

Attachment
Attachment
Attachment
0
2klxst

In the past hour and a half I implemented a Getting Started screen that shows instead of the usual parameters when the main window is opened. This was mainly done to hide the bug I talked about in a previous devlog I believe - the light gray rectangle around the category name in the toolbox. Honestly, this is one bug you can’t ignore and that’s why it’s annoying! It hasn’t been fixed entirely but it was a good step towards it. And I understand the PySide way of doing things even more now! For example I learned how to add/remove categories dynamically from Toolboxes and designing more complex labels with HTML using tags like for bold text and for a horizontal spacer below the text. Next up is fixing the bug once and for all!

Attachment
0
2klxst

Today I touched up and finished the 3D viewer loading screen and fix some small-scope bugs. I also finished the base set of parameters that will most likely stay for the v1.0 release of the app. Tomorrow will be a day of debugging and tweaking small things. One immediately-visible visual bug is a light-gray rectangle as you can see in the first screenshot around the first category. This will probably be easily fixed by adding a temporary category that sticks around until the first parameter is changed. But that’s for tomorrow! See you then! :)

Attachment
Attachment
0
2klxst

I have added a loader to the viewer.html file to spice up the waiting time! It’s not perfect yet as it’s a little broken at the moment, but I’m aiming to make it fit the vibe of the application well.

Attachment
0
2klxst

I have started working on the dynamic Build UI script that populates the parameters dock. So far I have added some parameters for categories: Dimensions, Lid & Joinery, Internal Hardware,… Later today I will finish the system and maybe make the UI more pleasing to look at.

Attachment
Attachment
Attachment
0
2klxst

I have refined the Viewer even more and added more parameters to adjust. Over the next few days, a lot of changes will mainly be UI changes. It’s coming together nicely!

Attachment
1

Comments

aloyak
aloyak about 2 months ago

this is really cool

2klxst

I refined the viewer.html to display an infinite grid and dynamically generate lines and arrows beside the models furthest edge.

Attachment
0
2klxst

I connected the HTML file which uses Three.js to load and display the 3D model. There is still a Three.js model positioning bug where the model will not spawn at coordinates 0, 0, 0. I plan to fix this bug tomorrow. Below in the screenshot you can see an example model rendering with the bug I described earlier.

Attachment
0
2klxst

I have started working on making the model viewer. I tried using an OpenGL approach, but when that failed, I switched to a HTML approach (the model viewer window is just displaying a HTML page which gets the model.stl and uses the HTML tag to display it). It’s obviously not perfect yet as I’m having trouble with the HTML, but we’ll get there. The next step is to display a 3D model. I’ll write a devlog when that happens :)

Attachment
0
2klxst

Started working on the main window’s UI. It’s not perefect yet but it’s getting there! At the moment, the UI is running from the “main_window_test” Python script.

Attachment
0
2klxst

Shipped this project!

Hours: 7.56
Cookies: 🍪 185
Multiplier: 24.5 cookies/hr

Let’s go! The first ship!

Currently the v0.0.1 is still a huge work in progress (don’t worry, I’m working on it!) but you can still try it out by following the instructions in the GitHub Readme file. If you don’t have time to set it up, you can watch the short GIF near the bottom of the readme.

Thanks for reading!

2klxst

Today I refined the code logic and made the welcome screen visually more pleasing. To the welcome screen I also added a working Exit button. I fixed some names of variables and typos and generally just refactored the code so that it’s better in every aspect. The next step would be to connect the main window UI and implement switching between the two windows. Below you can see the new look of the app. Hope you like it!

Attachment
Attachment
0
2klxst

Today I worked on improving the visual style of the app. I’ts not finished yet, but I hope it will be soon! I also implemented simple functionality to the buttons on the left (currently each prints a message into the terminal) and to the Recent projects list (supports loading projects from a local file recentFiles.json).

Attachment
0
2klxst

After refreshing my Python skills and getting the hang of PySide, I moved on to learning CadQuery. After a bit of a struggle, I managed to generate a simple enclosure with a cover with a lip, so the cover wouldn’t just slide off. In the screenshot and the GIF you can see the generated enclosure and the dynamic nature of the script. The learning part of the project is coming along nicely so far!

Attachment
0
2klxst

I got started on the project learning how to use PySide6 and remembereing how to use Python as I haven’t used it in a long time. I managed to learn a lot about PySide and it’s features. I finished the two hours with a simple project on my hands - a simple window with some text, a button that when clicked shows a message box, a vertical slider and some radio buttons. I also implemented functionality to use the program’s icon in the window’s top bar and in the Windows taskbar.

Attachment
Attachment
0