406
ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3])
405
static ReebNode *sk_pointToNode(SK_Point *pt, float imat[][4], float tmat[][3])
410
409
node = MEM_callocN(sizeof(ReebNode), "reeb node");
411
VECCOPY(node->p, pt->p);
410
copy_v3_v3(node->p, pt->p);
412
411
mul_m4_v3(imat, node->p);
414
VECCOPY(node->no, pt->no);
413
copy_v3_v3(node->no, pt->no);
415
414
mul_m3_v3(tmat, node->no);
420
ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3])
419
static ReebArc *sk_strokeToArc(SK_Stroke *stk, float imat[][4], float tmat[][3])
432
431
for (i = 0; i < arc->bcount; i++)
434
VECCOPY(arc->buckets[i].p, stk->points[i + 1].p);
433
copy_v3_v3(arc->buckets[i].p, stk->points[i + 1].p);
435
434
mul_m4_v3(imat, arc->buckets[i].p);
437
VECCOPY(arc->buckets[i].no, stk->points[i + 1].no);
436
copy_v3_v3(arc->buckets[i].no, stk->points[i + 1].no);
438
437
mul_m3_v3(tmat, arc->buckets[i].no);
444
void sk_retargetStroke(bContext *C, SK_Stroke *stk)
443
static void sk_retargetStroke(bContext *C, SK_Stroke *stk)
446
445
ToolSettings *ts = CTX_data_tool_settings(C);
447
446
Object *obedit = CTX_data_edit_object(C);
485
float sk_clampPointSize(SK_Point *pt, float size)
484
static float sk_clampPointSize(SK_Point *pt, float size)
487
486
return MAX2(size * pt->size, size / 2);
490
void sk_drawPoint(GLUquadric *quad, SK_Point *pt, float size)
489
static void sk_drawPoint(GLUquadric *quad, SK_Point *pt, float size)
492
491
glTranslatef(pt->p[0], pt->p[1], pt->p[2]);
493
492
gluSphere(quad, sk_clampPointSize(pt, size), 8, 8);
496
void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
495
static void sk_drawEdge(GLUquadric *quad, SK_Point *pt0, SK_Point *pt1, float size)
498
497
float vec1[3], vec2[3] = {0, 0, 1}, axis[3];
499
498
float angle, length;
510
509
angle = angle_normalized_v3v3(vec2, vec1);
512
glRotatef(angle * 180 / M_PI + 180, axis[0], axis[1], axis[2]);
511
glRotatef(angle * (float)(180.0/M_PI) + 180.0f, axis[0], axis[1], axis[2]);
514
513
gluCylinder(quad, sk_clampPointSize(pt1, size), sk_clampPointSize(pt0, size), length, 8, 8);
517
void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
516
static void sk_drawNormal(GLUquadric *quad, SK_Point *pt, float size, float height)
519
518
float vec2[3] = {0, 0, 1}, axis[3];
1004
1005
project_float(ar, stk->points[i].p, pval);
1005
viewray(ar, v3d, pval, ray_start, ray_normal);
1006
ED_view3d_win_to_ray(ar, v3d, pval, ray_start, ray_normal);
1007
1008
mul_v3_fl(ray_normal, distance * progress / length);
1008
1009
add_v3_v3(stk->points[i].p, ray_normal);
1014
void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData *dd)
1015
static void sk_projectDrawPoint(bContext *C, float vec[3], SK_Stroke *stk, SK_DrawData *dd)
1016
1017
ARegion *ar = CTX_wm_region(C);
1017
1018
/* copied from grease pencil, need fixing */
1020
1021
float fp[3] = {0, 0, 0};
1023
1025
if (last != NULL)
1025
VECCOPY(fp, last->p);
1027
copy_v3_v3(fp, last->p);
1028
1030
initgrabz(ar->regiondata, fp[0], fp[1], fp[2]);
1030
1032
/* method taken from editview.c - mouse_cursor() */
1031
1033
project_short_noclip(ar, fp, cval);
1032
window_to_3d_delta(ar, dvec, cval[0] - dd->mval[0], cval[1] - dd->mval[1]);
1034
VECSUB2D(mval_f, cval, dd->mval);
1035
ED_view3d_win_to_delta(ar, mval_f, dvec);
1033
1036
sub_v3_v3v3(vec, fp, dvec);
1036
int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
1039
static int sk_getStrokeDrawPoint(bContext *C, SK_Point *pt, SK_Sketch *UNUSED(sketch), SK_Stroke *stk, SK_DrawData *dd)
1038
1041
pt->type = dd->type;
1039
1042
pt->mode = PT_PROJECT;
1798
1801
pt.type = PT_EXACT;
1799
pt.mode = PT_PROJECT; /* take mode from neighbouring points */
1800
VECCOPY(pt.p, isect->p);
1801
VECCOPY(pt.no, isect->stroke->points[isect->before].no);
1802
pt.mode = PT_PROJECT; /* take mode from neighboring points */
1803
copy_v3_v3(pt.p, isect->p);
1804
copy_v3_v3(pt.no, isect->stroke->points[isect->before].no);
1803
1806
sk_insertStrokePoint(isect->stroke, &pt, isect->after);
1807
int sk_detectTrimGesture(bContext *C, SK_Gesture *gest, SK_Sketch *sketch)
1810
int sk_detectTrimGesture(bContext *UNUSED(C), SK_Gesture *gest, SK_Sketch *UNUSED(sketch))
1809
1812
if (gest->nb_segments == 2 && gest->nb_intersections == 1 && gest->nb_self_intersections == 0)
2833
2839
void SKETCH_OT_delete(wmOperatorType *ot)
2835
2841
/* identifiers */
2837
ot->idname= "SKETCH_OT_delete";
2842
ot->name = "Delete";
2843
ot->idname = "SKETCH_OT_delete";
2839
2845
/* api callbacks */
2840
ot->invoke= sketch_delete;
2846
ot->invoke = sketch_delete;
2842
ot->poll= ED_operator_sketch_full_mode;
2848
ot->poll = ED_operator_sketch_full_mode;
2845
// ot->flag= OPTYPE_UNDO;
2851
// ot->flag = OPTYPE_UNDO;
2848
2854
void SKETCH_OT_select(wmOperatorType *ot)
2850
2856
/* identifiers */
2852
ot->idname= "SKETCH_OT_select";
2857
ot->name = "Select";
2858
ot->idname = "SKETCH_OT_select";
2854
2860
/* api callbacks */
2855
ot->invoke= sketch_select;
2861
ot->invoke = sketch_select;
2857
ot->poll= ED_operator_sketch_full_mode;
2863
ot->poll = ED_operator_sketch_full_mode;
2860
// ot->flag= OPTYPE_UNDO;
2866
// ot->flag = OPTYPE_UNDO;
2863
2869
void SKETCH_OT_cancel_stroke(wmOperatorType *ot)
2865
2871
/* identifiers */
2866
ot->name= "cancel stroke";
2867
ot->idname= "SKETCH_OT_cancel_stroke";
2872
ot->name = "Cancel Stroke";
2873
ot->idname = "SKETCH_OT_cancel_stroke";
2869
2875
/* api callbacks */
2870
ot->invoke= sketch_cancel;
2876
ot->invoke = sketch_cancel;
2872
ot->poll= ED_operator_sketch_mode_active_stroke;
2878
ot->poll = ED_operator_sketch_mode_active_stroke;
2875
// ot->flag= OPTYPE_UNDO;
2881
// ot->flag = OPTYPE_UNDO;
2878
2884
void SKETCH_OT_convert(wmOperatorType *ot)
2880
2886
/* identifiers */
2881
ot->name= "convert";
2882
ot->idname= "SKETCH_OT_convert";
2887
ot->name = "Convert";
2888
ot->idname = "SKETCH_OT_convert";
2884
2890
/* api callbacks */
2885
ot->invoke= sketch_convert;
2891
ot->invoke = sketch_convert;
2887
ot->poll= ED_operator_sketch_full_mode;
2893
ot->poll = ED_operator_sketch_full_mode;
2890
ot->flag= OPTYPE_UNDO;
2896
ot->flag = OPTYPE_UNDO;
2893
2899
void SKETCH_OT_finish_stroke(wmOperatorType *ot)
2895
2901
/* identifiers */
2896
ot->name= "end stroke";
2897
ot->idname= "SKETCH_OT_finish_stroke";
2902
ot->name = "End Stroke";
2903
ot->idname = "SKETCH_OT_finish_stroke";
2899
2905
/* api callbacks */
2900
ot->invoke= sketch_finish;
2906
ot->invoke = sketch_finish;
2902
ot->poll= ED_operator_sketch_mode_active_stroke;
2908
ot->poll = ED_operator_sketch_mode_active_stroke;
2905
// ot->flag= OPTYPE_UNDO;
2911
// ot->flag = OPTYPE_UNDO;
2908
2914
void SKETCH_OT_draw_preview(wmOperatorType *ot)
2910
2916
/* identifiers */
2911
ot->name= "draw preview";
2912
ot->idname= "SKETCH_OT_draw_preview";
2917
ot->name = "Draw Preview";
2918
ot->idname = "SKETCH_OT_draw_preview";
2914
2920
/* api callbacks */
2915
ot->invoke= sketch_draw_preview;
2921
ot->invoke = sketch_draw_preview;
2917
ot->poll= ED_operator_sketch_mode_active_stroke;
2923
ot->poll = ED_operator_sketch_mode_active_stroke;
2919
2925
RNA_def_boolean(ot->srna, "snap", 0, "Snap", "");
2922
// ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
2928
// ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
2925
2931
void SKETCH_OT_draw_stroke(wmOperatorType *ot)
2927
2933
/* identifiers */
2928
ot->name= "draw stroke";
2929
ot->idname= "SKETCH_OT_draw_stroke";
2934
ot->name = "Draw Stroke";
2935
ot->idname = "SKETCH_OT_draw_stroke";
2931
2937
/* api callbacks */
2932
2938
ot->invoke = sketch_draw_stroke;
2933
2939
ot->modal = sketch_draw_stroke_modal;
2934
2940
ot->cancel = sketch_draw_stroke_cancel;
2936
ot->poll= (int (*)(bContext *))ED_operator_sketch_mode;
2942
ot->poll = (int (*)(bContext *))ED_operator_sketch_mode;
2938
2944
RNA_def_boolean(ot->srna, "snap", 0, "Snap", "");
2941
ot->flag= OPTYPE_BLOCKING; // OPTYPE_REGISTER|OPTYPE_UNDO
2947
ot->flag = OPTYPE_BLOCKING; // OPTYPE_REGISTER|OPTYPE_UNDO
2944
2950
void SKETCH_OT_gesture(wmOperatorType *ot)
2946
2952
/* identifiers */
2947
ot->name= "gesture";
2948
ot->idname= "SKETCH_OT_gesture";
2953
ot->name = "Gesture";
2954
ot->idname = "SKETCH_OT_gesture";
2950
2956
/* api callbacks */
2951
2957
ot->invoke = sketch_draw_gesture;
2952
2958
ot->modal = sketch_draw_gesture_modal;
2953
2959
ot->cancel = sketch_draw_gesture_cancel;
2955
ot->poll= ED_operator_sketch_mode_gesture;
2961
ot->poll = ED_operator_sketch_mode_gesture;
2957
2963
RNA_def_boolean(ot->srna, "snap", 0, "Snap", "");
2960
ot->flag= OPTYPE_BLOCKING; // OPTYPE_UNDO
2966
ot->flag = OPTYPE_BLOCKING; // OPTYPE_UNDO