OPENSCAD := openscad-nightly PYTHON := python3 IMGSIZE := 1024,768 THUMBSIZE := 256,192 .PHONY: all clean all: # --- XTEInk X4 Stand (weighted remix) --- # Licensed source from MakerWorld — override with `make XTEINK_STAND_SOURCE=...` XTEINK_STAND_SOURCE ?= $(HOME)/Downloads/XTEInk_X4_Stand_+_Watch_holder_(ver.1).3mf XTEINK_STAND_DIR := xteink-x4-stand-weighted XTEINK_STAND_NAME := $(XTEINK_STAND_DIR) XTEINK_STAND_SCAD := $(XTEINK_STAND_DIR)/$(XTEINK_STAND_NAME).scad XTEINK_STAND_3MF := $(XTEINK_STAND_DIR)/$(XTEINK_STAND_NAME).3mf XTEINK_STAND_PNG := $(XTEINK_STAND_DIR)/$(XTEINK_STAND_NAME).png XTEINK_STAND_INPUT_STL := $(XTEINK_STAND_DIR)/stand.stl XTEINK_STAND_BUILD_STL := $(XTEINK_STAND_DIR)/stand_weighted.stl $(XTEINK_STAND_INPUT_STL): $(XTEINK_STAND_SOURCE) scripts/3mf-extract-object.py $(PYTHON) scripts/3mf-extract-object.py --object-id 1 -o $@ "$<" $(XTEINK_STAND_BUILD_STL): $(XTEINK_STAND_SCAD) $(XTEINK_STAND_INPUT_STL) $(OPENSCAD) -o $@ $< $(XTEINK_STAND_3MF): $(XTEINK_STAND_BUILD_STL) $(XTEINK_STAND_SOURCE) scripts/3mf-replace-object.py $(PYTHON) scripts/3mf-replace-object.py \ --source "$(XTEINK_STAND_SOURCE)" \ --object-id 1 \ --replacement $(XTEINK_STAND_BUILD_STL) \ -o $@ $(XTEINK_STAND_PNG): $(XTEINK_STAND_SCAD) $(XTEINK_STAND_INPUT_STL) $(OPENSCAD) -o $@ --imgsize $(THUMBSIZE) --render '' \ --camera=0,0,-10,110,0,25,240 $< # --- Top-level targets --- ALL_OUTPUTS := \ $(XTEINK_STAND_3MF) $(XTEINK_STAND_PNG) ALL_INTERMEDIATES := \ $(XTEINK_STAND_INPUT_STL) $(XTEINK_STAND_BUILD_STL) all: $(ALL_OUTPUTS) clean: rm -f $(ALL_OUTPUTS) $(ALL_INTERMEDIATES)