Commit: f555bb8c615760626de8b538d6f8967674a345c5
Author: Lukas Tönne
Date:   Thu Mar 5 16:28:12 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rBf555bb8c615760626de8b538d6f8967674a345c5

Archive Info operator for Cache Library archives.

This creates a string with information about all the objects and
properties contained within a (Alembic) archive, used by a cache
library.

The operator has 3 modes of presenting the info string:
- stdout, ie. printing to the terminal
- popup window (not very useful usually due to size limits and lack of
  scrolling)
- clipboard copy

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

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/editors/io/io_cache_library.c
M       source/blender/editors/io/io_cache_library.h
M       source/blender/editors/io/io_ops.c
M       source/blender/pointcache/PTC_api.cpp
M       source/blender/pointcache/PTC_api.h
M       source/blender/pointcache/alembic/CMakeLists.txt
A       source/blender/pointcache/alembic/abc_info.cpp
M       source/blender/pointcache/alembic/abc_reader.cpp
M       source/blender/pointcache/alembic/abc_reader.h
A       source/blender/pointcache/alembic/alembic.h
M       source/blender/pointcache/intern/reader.h

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

diff --git a/release/scripts/startup/bl_ui/properties_scene.py 
b/release/scripts/startup/bl_ui/properties_scene.py
index 0356981..5dd9c5b 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -490,11 +490,17 @@ class SCENE_PT_cache_manager(SceneButtonsPanel, Panel):
         row.template_ID(cachelib, "group")
 
         col = layout.column(align=True)
-        col.label("Archive:")
+        colrow = col.row(align=True)
+        colrow.label("Archive:")
+        props = colrow.operator("cachelibrary.archive_info", text="", 
icon='QUESTION')
+        props.use_stdout = True
+        props.use_popup = True
+        props.use_clipboard = True
         col.prop(cachelib, "filepath", text="")
-        row = col.row(align=True)
-        row.prop(cachelib, "read", text="Read", toggle=True)
-        row.operator("cachelibrary.bake")
+
+        colrow = col.row(align=True)
+        colrow.prop(cachelib, "read", text="Read", toggle=True)
+        colrow.operator("cachelibrary.bake")
         col.prop(cachelib, "eval_mode", expand=False)
 
         row = layout.row(align=True)
diff --git a/source/blender/editors/io/io_cache_library.c 
b/source/blender/editors/io/io_cache_library.c
index b422ba9..5eadb72 100644
--- a/source/blender/editors/io/io_cache_library.c
+++ b/source/blender/editors/io/io_cache_library.c
@@ -36,6 +36,7 @@
 #include "BLI_blenlib.h"
 #include "BLI_fileops.h"
 #include "BLI_listbase.h"
+#include "BLI_math.h"
 #include "BLI_path_util.h"
 #include "BLI_utildefines.h"
 
@@ -457,3 +458,118 @@ void CACHELIBRARY_OT_bake(wmOperatorType *ot)
        /* no undo for this operator, cannot restore old cache files anyway */
        ot->flag = OPTYPE_REGISTER;
 }
+
+/* ========================================================================= */
+
+static int cache_library_archive_info_poll(bContext *C)
+{
+       CacheLibrary *cachelib = CTX_data_pointer_get_type(C, "cache_library", 
&RNA_CacheLibrary).data;
+       
+       if (!cachelib)
+               return false;
+       
+       return true;
+}
+
+static void ui_item_nlabel(uiLayout *layout, const char *s, size_t len)
+{
+       char buf[256];
+       
+       BLI_strncpy(buf, s, sizeof(buf)-1);
+       buf[min_ii(len, sizeof(buf)-1)] = '\0';
+       
+       uiItemL(layout, buf, ICON_NONE);
+}
+
+static void archive_info_labels(uiLayout *layout, const char *info)
+{
+       const char delim[] = {'\n', '\0'};
+       const char *cur = info;
+       size_t linelen;
+       char *sep, *suf;
+       
+       linelen = BLI_str_partition(cur, delim, &sep, &suf);
+       while (sep) {
+               ui_item_nlabel(layout, cur, linelen);
+               cur = suf;
+               
+               linelen = BLI_str_partition(cur, delim, &sep, &suf);
+       }
+       ui_item_nlabel(layout, cur, linelen);
+}
+
+static uiBlock *archive_info_popup_create(bContext *C, ARegion *ar, void *arg)
+{
+       const char *info = arg;
+       uiBlock *block;
+       uiLayout *layout;
+       
+       block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
+       UI_block_flag_disable(block, UI_BLOCK_LOOP);
+       UI_block_flag_enable(block, UI_BLOCK_KEEP_OPEN | 
UI_BLOCK_MOVEMOUSE_QUIT);
+       
+       layout = UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 
0, UI_UNIT_X * 20, UI_UNIT_Y, 0, UI_style_get());
+       
+       archive_info_labels(layout, info);
+       
+       UI_block_bounds_set_centered(block, 0);
+       UI_block_direction_set(block, UI_DIR_DOWN);
+       
+       return block;
+}
+
+static int cache_library_archive_info_exec(bContext *C, wmOperator *op)
+{
+       CacheLibrary *cachelib = CTX_data_pointer_get_type(C, "cache_library", 
&RNA_CacheLibrary).data;
+       Scene *scene = CTX_data_scene(C);
+       
+       const bool use_stdout = RNA_boolean_get(op->ptr, "use_stdout");
+       const bool use_popup = RNA_boolean_get(op->ptr, "use_popup");
+       const bool use_clipboard = RNA_boolean_get(op->ptr, "use_clipboard");
+       
+       char filename[FILE_MAX];
+       struct PTCReaderArchive *archive;
+       char *info;
+       
+       BKE_cache_archive_path(cachelib->filepath, (ID *)cachelib, 
cachelib->id.lib, filename, sizeof(filename));
+       archive = PTC_open_reader_archive(scene, filename);
+       info = PTC_get_archive_info(archive);
+       PTC_close_reader_archive(archive);
+       
+       if (info) {
+               if (use_stdout) {
+                       printf("%s", info);
+               }
+               
+               if (use_popup) {
+                       UI_popup_block_invoke(C, archive_info_popup_create, 
info);
+               }
+               
+               if (use_clipboard) {
+                       WM_clipboard_text_set(info, false);
+               }
+               
+               MEM_freeN(info);
+       }
+       
+       return OPERATOR_FINISHED;
+}
+
+void CACHELIBRARY_OT_archive_info(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "Archive Info";
+       ot->description = "Get archive details from a cache library archive";
+       ot->idname = "CACHELIBRARY_OT_archive_info";
+       
+       /* api callbacks */
+       ot->exec = cache_library_archive_info_exec;
+       ot->poll = cache_library_archive_info_poll;
+       
+       /* flags */
+       ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+       
+       RNA_def_boolean(ot->srna, "use_stdout", false, "Use stdout", "Print 
info in standard output");
+       RNA_def_boolean(ot->srna, "use_popup", false, "Show Popup", "Display 
archive info in a popup");
+       RNA_def_boolean(ot->srna, "use_clipboard", false, "Copy to Clipboard", 
"Copy archive info to the clipboard");
+}
diff --git a/source/blender/editors/io/io_cache_library.h 
b/source/blender/editors/io/io_cache_library.h
index f08b9eb..29c2e68 100644
--- a/source/blender/editors/io/io_cache_library.h
+++ b/source/blender/editors/io/io_cache_library.h
@@ -39,4 +39,6 @@ void CACHELIBRARY_OT_item_enable(struct wmOperatorType *ot);
 
 void CACHELIBRARY_OT_bake(struct wmOperatorType *ot);
 
+void CACHELIBRARY_OT_archive_info(struct wmOperatorType *ot);
+
 #endif
diff --git a/source/blender/editors/io/io_ops.c 
b/source/blender/editors/io/io_ops.c
index 3e8ed53..4f4d3e7 100644
--- a/source/blender/editors/io/io_ops.c
+++ b/source/blender/editors/io/io_ops.c
@@ -43,6 +43,7 @@ void ED_operatortypes_io(void)
        WM_operatortype_append(CACHELIBRARY_OT_delete);
        WM_operatortype_append(CACHELIBRARY_OT_item_enable);
        WM_operatortype_append(CACHELIBRARY_OT_bake);
+       WM_operatortype_append(CACHELIBRARY_OT_archive_info);
 
 #ifdef WITH_COLLADA
        /* Collada operators: */
diff --git a/source/blender/pointcache/PTC_api.cpp 
b/source/blender/pointcache/PTC_api.cpp
index 5da5268..2c79495 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -186,6 +186,15 @@ PTCReadSampleResult PTC_test_sample(PTCReader *_reader, 
float frame)
        return reader->test_sample(frame);
 }
 
+char *PTC_get_archive_info(PTCReaderArchive *_archive)
+{
+       PTC::ReaderArchive *archive = (PTC::ReaderArchive *)_archive;
+       
+       std::string info = archive->get_info();
+       return BLI_sprintfN("%s", info.c_str());
+}
+
+
 /* get writer/reader from RNA type */
 PTCWriter *PTC_writer_from_rna(Scene *scene, PointerRNA *ptr)
 {
diff --git a/source/blender/pointcache/PTC_api.h 
b/source/blender/pointcache/PTC_api.h
index 5afa651..c875ecb 100644
--- a/source/blender/pointcache/PTC_api.h
+++ b/source/blender/pointcache/PTC_api.h
@@ -83,6 +83,8 @@ bool PTC_reader_get_frame_range(struct PTCReader *reader, int 
*start_frame, int
 PTCReadSampleResult PTC_read_sample(struct PTCReader *reader, float frame);
 PTCReadSampleResult PTC_test_sample(struct PTCReader *reader, float frame);
 
+char *PTC_get_archive_info(struct PTCReaderArchive *archive);
+
 /* get writer/reader from RNA type */
 struct PTCWriter *PTC_writer_from_rna(struct Scene *scene, struct PointerRNA 
*ptr);
 struct PTCReader *PTC_reader_from_rna(struct Scene *scene, struct PointerRNA 
*ptr);
diff --git a/source/blender/pointcache/alembic/CMakeLists.txt 
b/source/blender/pointcache/alembic/CMakeLists.txt
index 1eb5dec..becf845 100644
--- a/source/blender/pointcache/alembic/CMakeLists.txt
+++ b/source/blender/pointcache/alembic/CMakeLists.txt
@@ -41,9 +41,11 @@ set(INC_SYS
 
 set(SRC
        alembic.cpp
+       alembic.h
 
        abc_frame_mapper.cpp
        abc_frame_mapper.h
+       abc_info.cpp
        abc_reader.cpp
        abc_reader.h
        abc_schema.h
diff --git a/source/blender/pointcache/alembic/abc_info.cpp 
b/source/blender/pointcache/alembic/abc_info.cpp
new file mode 100644
index 0000000..3b4c97f
--- /dev/null
+++ b/source/blender/pointcache/alembic/abc_info.cpp
@@ -0,0 +1,246 @@
+//-*****************************************************************************
+//
+// Copyright (c) 2009-2013,
+//  Sony Pictures Imageworks, Inc. and
+//  Industrial Light & Magic, a division of Lucasfilm Entertainment Company 
Ltd.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+// *       Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// *       Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// *       Neither the name of Sony Pictures Imageworks, nor
+// Industrial Light & Magic nor the names of their contributors may be used
+// to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+//-*****************************************************************************
+
+/*
+ * Copyright 2015, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to