use mpolys instead and simplify checks for wire edges.
Also rename BKE_mesh_from_curve() --> BKE_mesh_to_curve() since this function converts a mesh into a curve.
* OBJECT_OT_make_links_scene did only trigger an 3D View update which was insufficient for Outliner (modifiers for example) and also some parts inside the Properties Editor (Mesh Data, Material Data).
This was from initial BMesh merge, but should not have been added in since face normals are calculated and stored in the DerivedMesh.
Toggling editmode would remove poly-normals so its unlikely anything relies on this custom-data.
- linking groups into a scene now uses the objects original layers (some users have the layers set to useful values, so overwriting isnt so nice).
- dropping objects into the 3d view would make them active but not selected, a valid but confusing state, since most tools activate and select now objects.
from Lawrence D'Oliveiro (ldo)
notes from tracker:
use bool for return type from BLI_remlink_safe, necessitating including BLI_utildefines.h in BLI_listbase.h
get rid of duplicate BLI_insertlink, use BLI_insertlinkafter instead.
A few places which were using BLI_insertlinkafter (actually BLI_insertlink), when it would be simpler to use BLI_insertlinkbefore instead.
besides performance in some cases.
* DAG_scene_sort is now removed and replaced by DAG_relations_tag_update in
most cases. This will clear the dependency graph, and only rebuild it right
before it's needed again when the scene is re-evaluated.
This is done because DAG_scene_sort is slow when called many times from
python operators. Further the scene argument is not needed because most
operations can potentially affect more than the current scene.
* DAG_scene_relations_update will now rebuild the dependency graph if it's not
there yet, and DAG_scene_relations_rebuild will force a rebuild for the rare
cases that need it.
* Remove various places where ob->recalc was set manually. This should go
through DAG_id_tag_update() in nearly all cases instead since this is now
a fast operation. Also removed DAG_ids_flush_update that goes along with
such manual tagging of ob->recalc.
This is a special case, tangent space normal maps should be cleared to
0.5, 0.5, 1.0. This is good practice but there's no reason why not to
automate this (for artists whose bump map fu may be a bit shallow).
Thanks to Morten Mikkelsen for reporting.
Tweak for new option for Relative Bone parenting
(which transforms child object based on rest pose, so you can change bones
in editmode to define pivot)
In the original commit it was made default, but that was too invisble for
users. Now it's an option in the Make Parent menu to choose. Communicates
a new feature better.
Sculpt mode requires mask customdata layer for multires and ensures it
exists on entering sculpt mode. However, sculpt mode only considers
multires to be active if the level of subdivision is not zero, so it
does not add mask for unsubdivided multires meshes. If the multires
mesh is subdivided while in sculpt mode, no mask was present leading
to weird drawing and crash on use of the mask brush.
Fixed by doing the same thing in multires_subdivide_exec() that is
done in ED_object_modifier_add(), which is to check if sculpt mode is
active and add mask layer if so.
Fixes [#34190] Viewport artifacts when using Multiresolution modifier
projects.blender.org/tracker/index.php?func=detail&aid=34190&group_id=9&atid=498
Issue was caused by couple of circumstances:
- Normal Map node requires tesselated faces to compute tangent space
- All temporary meshes needed for Cycles export were adding to G.main
- Undo pushes would temporary set meshes tessfaces to NULL
- Moving node will cause undo push and tree re-evaluate fr preview
All this leads to threading conflict between preview render and undo
system.
Solved it in way that all temporary meshes are adding to that exact
Main which was passed to Cycles via BlendData. This required couple
of mechanic changes like adding extra parameter to *_add() functions
and adding some *_ex() functions to make it possible RNA adds objects
to Main passed to new() RNA function.
This was tricky to pass Main to RNA function and IMO that's not so
nice to pass main to function, so ended up with such decision:
- Object.to_mesh() will add temp mesh to G.main
- Added Main.meshes.new_from_object() which does the same as to_mesh,
but adds temporary mesh to specified Main.
So now all temporary meshes needed for preview render would be added
to preview_main which does not conflict with undo pushes.
Viewport render shall not be an issue because object sync happens from
main thread in this case.
It could be some issues with final render, but that's not so much
likely to happen, so shall be fine.
Thanks to Brecht for review!
The operator names all show up in the Search button. As such is nicer if they
can all have the main words capitalized.
e.g. "Snap strips" should be "Snap Strips"
"Copy to clipboard" should be "Copy to Clipboard"
This was done with a mix of bash tools, regex, and manual work because I'm too rushed into regex :)
+ fix bge stereo eye separation tooltip
Was silly mistake from rigidbody merge, base was used after it's been
freed.
Now don't free base in BKE_scene_base_remove() and rename it to
BKE_scene_base_unlink().
Constraints connect two rigid bodies.
Depending on which constraint is used different degrees of freedom
are limited, e.g. a hinge constraint only allows the objects to rotate
around a common axis.
Constraints are implemented as individual objects and bahave similar to
rigid bodies in terms of adding/removing/validating.
The position and orientation of the constraint object is the pivot point
of the constraint.
Constraints have their own group in the rigid body world.
To make connecting rigid bodies easier, there is a "Connect" operator that
creates an empty objects with a rigid body constraint connecting the selected
objects to active.
Currently the following constraints are implemented:
* Fixed
* Point
* Hinge
* Slider
* Piston
* Generic
Note: constraint limits aren't animatable yet).