Commit: 54172dcab5e8dc3864ebf74758088dcefd4590fa
Author: Nick Wu
Date:   Tue Jul 3 16:28:39 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB54172dcab5e8dc3864ebf74758088dcefd4590fa

Line selection from object and collection is ok, material pending.

===================================================================

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/draw/engines/lanpr/lanpr_ops.c
M       source/blender/editors/render/render_intern.h
M       source/blender/editors/render/render_ops.c
M       source/blender/makesdna/DNA_lanpr_types.h
M       source/blender/makesrna/intern/rna_lanpr.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_scene.py 
b/release/scripts/startup/bl_ui/properties_scene.py
index 4c2a95c600a..0c59f470664 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -586,7 +586,7 @@ class SCENE_PT_lanpr_line_types(SceneButtonsPanel, Panel):
         col.prop(active_layer, "enable_intersection", text="Intersection", 
toggle=True)
         col = split.column()
         row = col.row(align = True)
-        row.enabled = active_layer.enable_contour
+        #row.enabled = active_layer.enable_contour this is always enabled now
         row.prop(active_layer, "color", text="")
         row.prop(active_layer, "thickness", text="")
         row = col.row(align = True)
@@ -615,6 +615,43 @@ class SCENE_PT_lanpr_line_types(SceneButtonsPanel, Panel):
             row.prop(active_layer, "qi_begin")
             row.prop(active_layer, "qi_end")
 
+class SCENE_PT_lanpr_line_components(SceneButtonsPanel, Panel):
+    bl_label = "Including"
+    bl_parent_id = "SCENE_PT_lanpr"
+    COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        lanpr = scene.lanpr
+        active_layer = lanpr.layers.active_layer
+        return active_layer and lanpr.master_mode == "SOFTWARE"
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        lanpr = scene.lanpr
+        active_layer = lanpr.layers.active_layer
+
+        layout.operator("scene.lanpr_add_line_component", icon = "ZOOMIN")
+
+        for c in active_layer.components:
+            split = layout.split(percentage=0.85)
+            col = split.column()
+            sp2 = col.split(percentage=0.4)
+            cl = sp2.column()
+            cl.prop(c,"component_mode", text = "")
+            cl = sp2.column()
+            if c.component_mode == "OBJECT":
+                cl.prop(c,"object_select", text = "")
+            elif c.component_mode == "MATERIAL":
+                cl.prop(c,"material_select", text = "")
+            elif c.component_mode == "COLLECTION":
+                cl.prop(c,"collection_select", text = "")
+            col = split.column()
+            col.label(text = "X")
+
+
 class SCENE_PT_lanpr_line_effects(SceneButtonsPanel, Panel):
     bl_label = "Effects"
     bl_parent_id = "SCENE_PT_lanpr"
@@ -768,6 +805,7 @@ classes = (
 
     SCENE_PT_lanpr,
     SCENE_PT_lanpr_line_types,
+    SCENE_PT_lanpr_line_components,
     SCENE_PT_lanpr_line_effects,
     SCENE_PT_lanpr_snake_sobel_parameters,
     SCENE_PT_lanpr_snake_settings,
diff --git a/source/blender/draw/engines/lanpr/lanpr_ops.c 
b/source/blender/draw/engines/lanpr/lanpr_ops.c
index 4dc5199b44b..0ffa4c092f8 100644
--- a/source/blender/draw/engines/lanpr/lanpr_ops.c
+++ b/source/blender/draw/engines/lanpr/lanpr_ops.c
@@ -2700,8 +2700,26 @@ static char MessageFailed[] = "No saving action 
performed.";
 //}
 
 
-
-long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, int qi_begin, 
int qi_end) {
+int lanpr_CountThisLine(LANPR_RenderLine* rl, LANPR_LineLayer* ll) {
+       LANPR_LineLayerComponent* llc = ll->components.first;
+       int AndResult = 1, OrResult = 0;
+       if (!llc) return 1;
+       for (llc; llc; llc = llc->next) {
+               if (llc->component_mode == LANPR_COMPONENT_MODE_ALL) { OrResult 
= 1; }
+               elif(llc->component_mode == LANPR_COMPONENT_MODE_OBJECT) {
+                       if (rl->ObjectRef->id.orig_id == 
&llc->object_select->id) { OrResult = 1;}
+                       else { AndResult = 0; }
+               }elif(llc->component_mode == LANPR_COMPONENT_MODE_MATERIAL) {
+                       OrResult = 1;
+               }elif(llc->component_mode == LANPR_COMPONENT_MODE_COLLECTION) {
+                       if(BKE_collection_has_object(llc->collection_select, 
(Object*)rl->ObjectRef->id.orig_id)) { OrResult = 1; }
+                       else { AndResult = 0; }
+               }
+       }
+       if (ll->logic_mode == LANPR_COMPONENT_LOGIG_OR) return OrResult;
+       else return AndResult;
+}
+long lanpr_CountLeveledEdgeSegmentCount(nListHandle *LineList, 
LANPR_LineLayer* ll) {
        nListItemPointer *lip;
        LANPR_RenderLine *rl;
        LANPR_RenderLineSegment *rls;
@@ -2710,13 +2728,11 @@ long lanpr_CountLeveledEdgeSegmentCount(nListHandle 
*LineList, int qi_begin, int
        long Count = 0;
        for (lip = LineList->pFirst; lip; lip = lip->pNext) {
                rl = lip->p;
-               o = rl->ObjectRef;
+               if (!lanpr_CountThisLine(rl, ll)) continue;
+
                for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
-                       //if (OverrideGroup) {
-                       //      if (Exclusive && 
BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
-                       //      if (!Exclusive && 
!BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
-                       //}
-                       if (rls->OccludeLevel >= qi_begin && 
rls->OccludeLevel<= qi_end) Count++;
+
+                       if (rls->OccludeLevel >= ll->qi_begin && 
rls->OccludeLevel<= ll->qi_end) Count++;
                }
        }
        return Count;
@@ -2730,7 +2746,7 @@ long 
lanpr_CountIntersectionSegmentCount(LANPR_RenderBuffer *rb) {
        }
        return Count;
 }
-void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle 
*LineList, float *VertexArray, int qi_begin, int qi_end,float componet_id) {
+void *lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle 
*LineList, float *VertexArray, LANPR_LineLayer* ll, float componet_id) {
        nListItemPointer *lip;
        LANPR_RenderLine *rl;
        LANPR_RenderLineSegment *rls, *irls;
@@ -2740,14 +2756,10 @@ void 
*lanpr_MakeLeveledEdgeVertexArray(LANPR_RenderBuffer *rb, nListHandle *Line
        float *V = VertexArray;
        for (lip = LineList->pFirst; lip; lip = lip->pNext) {
                rl = lip->p;
-               o = rl->ObjectRef;
-               //if (OverrideGroup) {
-               //      if (Exclusive && 
BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
-               //      if (!Exclusive && 
!BKE_collection_has_object(OverrideGroup, rl->ObjectRef)) continue;
-               //}
+               if (!lanpr_CountThisLine(rl, ll)) continue;
 
                for (rls = rl->Segments.pFirst; rls; rls = rls->Item.pNext) {
-                       if (rls->OccludeLevel >= qi_begin && 
rls->OccludeLevel<= qi_end) {
+                       if (rls->OccludeLevel >= ll->qi_begin && 
rls->OccludeLevel<= ll->qi_end) {
                                *V = tnsLinearItp(rl->L->FrameBufferCoord[0], 
rl->R->FrameBufferCoord[0], rls->at);
                                V++;
                                *V = tnsLinearItp(rl->L->FrameBufferCoord[1], 
rl->R->FrameBufferCoord[1], rls->at);
@@ -2784,11 +2796,11 @@ void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer 
*rb, LANPR_LineLayer *ll)
 
                Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format(&format);
 
-               if (ll->enable_contour)           Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->Contours, ll->qi_begin, ll->qi_end);
-               if (ll->enable_crease)            Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->CreaseLines, ll->qi_begin, ll->qi_end);
-               if (ll->enable_intersection)      Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->IntersectionLines, ll->qi_begin, 
ll->qi_end);
-               if (ll->enable_edge_mark)         Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->EdgeMarks, ll->qi_begin, ll->qi_end);
-               if (ll->enable_material_seperate) Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->MaterialLines, ll->qi_begin, 
ll->qi_end);
+               if (ll->enable_contour)           Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->Contours, ll);
+               if (ll->enable_crease)            Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->CreaseLines, ll);
+               if (ll->enable_intersection)      Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->IntersectionLines, ll);
+               if (ll->enable_edge_mark)         Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->EdgeMarks, ll);
+               if (ll->enable_material_seperate) Count += 
lanpr_CountLeveledEdgeSegmentCount(&rb->MaterialLines, ll);
 
                ll->VertCount = Count * 2;
 
@@ -2796,11 +2808,11 @@ void lanpr_RebuildRenderDrawCommand(LANPR_RenderBuffer 
*rb, LANPR_LineLayer *ll)
 
                tv = V = CreateNewBuffer(float, 6 * Count);
 
-               if (ll->enable_contour)           tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->Contours, tv, ll->qi_begin, 
ll->qi_end, 1.0f);
-               if (ll->enable_crease)            tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->CreaseLines, tv, ll->qi_begin, 
ll->qi_end, 2.0f);
-               if (ll->enable_material_seperate) tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->MaterialLines, tv, ll->qi_begin, 
ll->qi_end, 3.0f);
-               if (ll->enable_edge_mark)         tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->EdgeMarks, tv, ll->qi_begin, 
ll->qi_end, 4.0f);
-               if (ll->enable_intersection)      tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->IntersectionLines, tv, ll->qi_begin, 
ll->qi_end, 5.0f);
+               if (ll->enable_contour)           tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->Contours, tv, ll, 1.0f);
+               if (ll->enable_crease)            tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->CreaseLines, tv, ll, 2.0f);
+               if (ll->enable_material_seperate) tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->MaterialLines, tv, ll, 3.0f);
+               if (ll->enable_edge_mark)         tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->EdgeMarks, tv, ll, 4.0f);
+               if (ll->enable_intersection)      tv = 
lanpr_MakeLeveledEdgeVertexArray(rb, &rb->IntersectionLines, tv, ll, 5.0f);
 
 
                for (i = 0; i < ll->VertCount; i++) {
@@ -2939,8 +2951,17 @@ LANPR_LineLayer *lanpr_new_line_layer(SceneLANPR *lanpr){
        lanpr->active_layer = ll;
        return ll;
 }
+LANPR_LineLayerComponent *lanpr_new_line_component(SceneLANPR *lanpr) {
+       if (!lanpr->active_layer) return 0;
+       LANPR_LineLayer* ll = lanpr->active_layer;
+
+       LANPR_LineLayerComponent *llc = 
MEM_callocN(sizeof(LANPR_LineLayerComponent), "Line Component");
+       BLI_addtail(&ll->components, llc);
+
+       return llc;
+}
 
-static int lanpr_add_line_layer_exec(struct bContext *C, struct wmOperator 
*op){
+int lanpr_add_line_layer_exec(struct bContext *C, struct wmOperator *op){
        Scene *scene = CTX_data_scene(C);
        SceneLANPR *lanpr = &scene->lanpr;
 
@@ -2984,6 +3005,22 @@ int lanpr_move_line_layer_exec(struct bContext *C, 
struct wmOperator *op) {
 
        return OPERATOR_FINISHED;
 }
+int lanpr_add_line_component_exec(struct bContext *C, struct wmOperator *op) {
+       Scene *scene = CTX_data_scene(C);
+       SceneLANPR *lanpr = &scene->lanpr;
+
+       lanpr_new_line_component(lanpr);
+
+       return OPERATOR_FINISHED;
+}
+int lanpr_delete_line_component_exec(struct bContext *C, struct wmOperator 
*op) {
+       Scene *scene = CTX_data_scene(C);
+       SceneLANPR *lanpr = &scene->lanpr;
+
+       // need property access
+

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to