summaryrefslogtreecommitdiff
path: root/src/debug.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/debug.c')
-rw-r--r--src/debug.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/debug.c b/src/debug.c
new file mode 100644
index 0000000..6027ed4
--- /dev/null
+++ b/src/debug.c
@@ -0,0 +1,43 @@
+#include "cad/debug.h"
+
+static const char *component_type_name[] = {
+ [COM_POINT] = "point",
+ [COM_LINE] = "line",
+};
+
+void print_subassemblies(struct constraints *c, struct subassembly *assemblies, size_t assemblies_num) {
+ fprintf(stderr, "=== Subassemblies: %zu ===\n", assemblies_num);
+ for(size_t i = 0; i < assemblies_num; i++) {
+ struct subassembly *a = &assemblies[i];
+ fprintf(stderr, "Assembly %zu: %zu steps, fix=%zu, fixed=%s\n",
+ i, a->steps_num, a->fix, a->fixed ? "yes" : "no");
+
+ if(a->articulation_num > 0) {
+ fprintf(stderr, " Articulations (%zu):\n", a->articulation_num);
+ for(size_t j = 0; j < a->articulation_num; j++) {
+ struct component *comp = a->articulation[j];
+ fprintf(stderr, " [%zu] %s %p\n", j, component_type_name[comp->type], (void*)comp);
+ }
+ }
+
+ fprintf(stderr, " Constraints used:\n");
+ for(size_t j = 0; j < c->length; j++) {
+ struct constraint *ct = &c->elements[j];
+ if(ct->used != i + 1) continue;
+ fprintf(stderr, " [%zu] %s v=%.2f (%s %p, %s %p)\n",
+ j, constraint_type_name[ct->type], ct->v,
+ component_type_name[ct->c1->type], (void*)ct->c1,
+ component_type_name[ct->c2->type], (void*)ct->c2);
+ }
+ }
+ fprintf(stderr, " Unused constraints:\n");
+ for(size_t j = 0; j < c->length; j++) {
+ struct constraint *ct = &c->elements[j];
+ if(ct->used != 0) continue;
+ fprintf(stderr, " [%zu] %s v=%.2f (%s %p, %s %p)\n",
+ j, constraint_type_name[ct->type], ct->v,
+ component_type_name[ct->c1->type], (void*)ct->c1,
+ component_type_name[ct->c2->type], (void*)ct->c2);
+ }
+ fprintf(stderr, "=========================\n");
+}