[Bf-blender-cvs] [95b36321126] blender2.8: Merge branch 'master' into blender2.8

Bastien Montagne noreply at git.blender.org
Fri Apr 14 12:40:05 CEST 2017


Commit: 95b36321126fd6f9563b309930ac9ae6cf422a81
Author: Bastien Montagne
Date:   Fri Apr 14 12:36:56 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB95b36321126fd6f9563b309930ac9ae6cf422a81

Merge branch 'master' into blender2.8

Conflicts:
	source/blender/alembic/intern/abc_exporter.cc

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



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

diff --cc source/blender/alembic/intern/abc_exporter.cc
index 1b218b98f21,a8d1587abdb..ddbbf27392d
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@@ -124,19 -124,37 +124,37 @@@ static bool object_is_shape(Object *ob
  	}
  }
  
- static bool export_object(const ExportSettings * const settings, const Base * const ob_base)
+ 
+ /**
+  * Returns whether this object should be exported into the Alembic file.
+  *
+  * @param settings export settings, used for options like 'selected only'.
 - * @param ob the object in question.
++ * @param ob the object's base in question.
+  * @param is_duplicated normally false; true when the object is instanced
+  *                      into the scene by a dupli-object (e.g. part of a
+  *                      dupligroup). This ignores selection and layer
+  *                      visibility, and assumes that the dupli-object itself
+  *                      (e.g. the group-instantiating empty) is exported.
+  */
 -static bool export_object(const ExportSettings * const settings, Object *ob,
++static bool export_object(const ExportSettings * const settings, const Base * const ob_base,
+                           bool is_duplicated)
  {
- 	if (settings->selected_only && !object_selected(ob_base)) {
- 		return false;
- 	}
- 	// FIXME Sybren: handle these cleanly (maybe just remove code), now using active scene layer instead.
- 	if (settings->visible_layers_only && (ob_base->flag & BASE_VISIBLED) == 0) {
- 		return false;
+ 	if (!is_duplicated) {
+ 		/* These two tests only make sense when the object isn't being instanced
+ 		 * into the scene. When it is, its exportability is determined by
+ 		 * its dupli-object and the DupliObject::no_draw property. */
 -		if (settings->selected_only && !parent_selected(ob)) {
++		if (settings->selected_only && !object_selected(ob_base)) {
+ 			return false;
+ 		}
 -
 -		if (settings->visible_layers_only && !(settings->scene->lay & ob->lay)) {
++		// FIXME Sybren: handle these cleanly (maybe just remove code), now using active scene layer instead.
++		if (settings->visible_layers_only && (ob_base->flag & BASE_VISIBLED) == 0) {
+ 			return false;
+ 		}
  	}
  
 -	if (settings->renderable_only && (ob->restrictflag & OB_RESTRICT_RENDER)) {
 -		return false;
 -	}
 +	//	if (settings->renderable_only && (ob->restrictflag & OB_RESTRICT_RENDER)) {
 +	//		return false;
 +	//	}
  
  	return true;
  }
@@@ -344,31 -362,35 +362,31 @@@ void AbcExporter::operator()(Main *bmai
  
  void AbcExporter::createTransformWritersHierarchy(EvaluationContext *eval_ctx)
  {
 -	Base *base = static_cast<Base *>(m_scene->base.first);
 -
 -	while (base) {
 +	for (Base *base = static_cast<Base *>(m_settings.sl->object_bases.first); base; base = base->next) {
  		Object *ob = base->object;
  
- 		if (export_object(&m_settings, base)) {
 -		switch (ob->type) {
 -			case OB_LAMP:
 -			case OB_LATTICE:
 -			case OB_MBALL:
 -			case OB_SPEAKER:
 -				/* We do not export transforms for objects of these classes. */
 -				break;
 -
 -			default:
 -				exploreTransform(eval_ctx, ob, ob->parent);
++		if (export_object(&m_settings, base, false)) {
 +			switch (ob->type) {
 +				case OB_LAMP:
 +				case OB_LATTICE:
 +				case OB_MBALL:
 +				case OB_SPEAKER:
 +					/* We do not export transforms for objects of these classes. */
 +					break;
 +
 +				default:
 +					exploreTransform(eval_ctx, base, ob->parent, NULL);
 +			}
  		}
 -
 -		base = base->next;
  	}
  }
  
  void AbcExporter::createTransformWritersFlat()
  {
 -	Base *base = static_cast<Base *>(m_scene->base.first);
 -
 -	while (base) {
 +	for (Base *base = static_cast<Base *>(m_settings.sl->object_bases.first); base; base = base->next) {
  		Object *ob = base->object;
  
- 		if (!export_object(&m_settings, base)) {
 -		if (export_object(&m_settings, ob, false) && object_is_shape(ob)) {
++		if (export_object(&m_settings, base, false) && object_is_shape(ob)) {
  			std::string name = get_id_name(ob);
  			m_xforms[name] = new AbcTransformWriter(
  			                     ob, m_writer->archive().getTop(), NULL,
@@@ -377,23 -399,32 +395,35 @@@
  	}
  }
  
 -void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent)
 +void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Base *ob_base, Object *parent, Object *dupliObParent)
  {
 +	Object *ob = ob_base->object;
 +
- 	if (export_object(&m_settings, ob_base) && object_is_shape(ob)) {
+ 	/* If an object isn't exported itself, its duplilist shouldn't be
+ 	 * exported either. */
 -	if (!export_object(&m_settings, ob, dupliObParent != NULL)) {
++	if (!export_object(&m_settings, ob_base, dupliObParent != NULL)) {
+ 		return;
+ 	}
+ 
+ 	if (object_is_shape(ob)) {
  		createTransformWriter(ob, parent, dupliObParent);
  	}
  
  	ListBase *lb = object_duplilist(eval_ctx, m_scene, ob);
  
  	if (lb) {
 +		Base fake_base = *ob_base;  // copy flags (like selection state) from the real object.
 +		fake_base.next = fake_base.prev = NULL;
 +
- 		for (DupliObject *link = static_cast<DupliObject *>(lb->first); link; link = link->next) {
- 			Object *dupli_ob = NULL;
- 			Object *dupli_parent = NULL;
+ 		DupliObject *link = static_cast<DupliObject *>(lb->first);
+ 		Object *dupli_ob = NULL;
+ 		Object *dupli_parent = NULL;
+ 		
+ 		for (; link; link = link->next) {
+ 			/* This skips things like custom bone shapes. */
+ 			if (m_settings.renderable_only && link->no_draw) {
+ 				continue;
+ 			}
  
  			if (link->type == OB_DUPLIGROUP) {
  				dupli_ob = link->ob;
@@@ -467,21 -502,29 +497,33 @@@ void AbcExporter::createShapeWriters(Ev
  	}
  }
  
 -void AbcExporter::exploreObject(EvaluationContext *eval_ctx, Object *ob, Object *dupliObParent)
 +void AbcExporter::exploreObject(EvaluationContext *eval_ctx, Base *ob_base, Object *dupliObParent)
  {
- 	Object *ob = ob_base->object;
- 	ListBase *lb = object_duplilist(eval_ctx, m_scene, ob);
- 	
+ 	/* If an object isn't exported itself, its duplilist shouldn't be
+ 	 * exported either. */
 -	if (!export_object(&m_settings, ob, dupliObParent != NULL)) {
++	if (!export_object(&m_settings, ob_base, dupliObParent != NULL)) {
+ 		return;
+ 	}
+ 
 -	createShapeWriter(ob, dupliObParent);
 +	createShapeWriter(ob_base, dupliObParent);
  	
++	Object *ob = ob_base->object;
+ 	ListBase *lb = object_duplilist(eval_ctx, m_scene, ob);
+ 
  	if (lb) {
 +		Base fake_base = *ob_base;  // copy flags (like selection state) from the real object.
 +		fake_base.next = fake_base.prev = NULL;
 +
- 		for (DupliObject *dupliob = static_cast<DupliObject *>(lb->first); dupliob; dupliob = dupliob->next) {
- 			if (dupliob->type == OB_DUPLIGROUP) {
- 				fake_base.object = dupliob->ob;
+ 		DupliObject *link = static_cast<DupliObject *>(lb->first);
+ 
+ 		for (; link; link = link->next) {
+ 			/* This skips things like custom bone shapes. */
+ 			if (m_settings.renderable_only && link->no_draw) {
+ 				continue;
+ 			}
 -
+ 			if (link->type == OB_DUPLIGROUP) {
 -				exploreObject(eval_ctx, link->ob, ob);
++				fake_base.object = link->ob;
 +				exploreObject(eval_ctx, &fake_base, ob);
  			}
  		}
  	}




More information about the Bf-blender-cvs mailing list