Merge branch 'master' into blender2.8
This commit is contained in:
@@ -2996,117 +2996,116 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, unsigned int cfra)
|
||||
|
||||
/* clear all files in the temp dir with the prefix of the ID and the ".bphys" suffix */
|
||||
switch (mode) {
|
||||
case PTCACHE_CLEAR_ALL:
|
||||
case PTCACHE_CLEAR_BEFORE:
|
||||
case PTCACHE_CLEAR_AFTER:
|
||||
if (pid->cache->flag & PTCACHE_DISK_CACHE) {
|
||||
ptcache_path(pid, path);
|
||||
case PTCACHE_CLEAR_ALL:
|
||||
case PTCACHE_CLEAR_BEFORE:
|
||||
case PTCACHE_CLEAR_AFTER:
|
||||
if (pid->cache->flag & PTCACHE_DISK_CACHE) {
|
||||
ptcache_path(pid, path);
|
||||
|
||||
dir = opendir(path);
|
||||
if (dir==NULL)
|
||||
return;
|
||||
dir = opendir(path);
|
||||
if (dir==NULL)
|
||||
return;
|
||||
|
||||
len = ptcache_filename(pid, filename, cfra, 0, 0); /* no path */
|
||||
/* append underscore terminator to ensure we don't match similar names
|
||||
* from objects whose names start with the same prefix
|
||||
*/
|
||||
if (len < sizeof(filename) - 2) {
|
||||
BLI_strncpy(filename + len, "_", sizeof(filename) - 2 - len);
|
||||
len += 1;
|
||||
}
|
||||
len = ptcache_filename(pid, filename, cfra, 0, 0); /* no path */
|
||||
/* append underscore terminator to ensure we don't match similar names
|
||||
* from objects whose names start with the same prefix
|
||||
*/
|
||||
if (len < sizeof(filename) - 2) {
|
||||
BLI_strncpy(filename + len, "_", sizeof(filename) - 2 - len);
|
||||
len += 1;
|
||||
}
|
||||
|
||||
BLI_snprintf(ext, sizeof(ext), "_%02u%s", pid->stack_index, fext);
|
||||
BLI_snprintf(ext, sizeof(ext), "_%02u%s", pid->stack_index, fext);
|
||||
|
||||
while ((de = readdir(dir)) != NULL) {
|
||||
if (strstr(de->d_name, ext)) { /* do we have the right extension?*/
|
||||
if (STREQLEN(filename, de->d_name, len)) { /* do we have the right prefix */
|
||||
if (mode == PTCACHE_CLEAR_ALL) {
|
||||
pid->cache->last_exact = MIN2(pid->cache->startframe, 0);
|
||||
BLI_join_dirfile(path_full, sizeof(path_full), path, de->d_name);
|
||||
BLI_delete(path_full, false, false);
|
||||
}
|
||||
else {
|
||||
/* read the number of the file */
|
||||
const int frame = ptcache_frame_from_filename(de->d_name, ext);
|
||||
while ((de = readdir(dir)) != NULL) {
|
||||
if (strstr(de->d_name, ext)) { /* do we have the right extension?*/
|
||||
if (STREQLEN(filename, de->d_name, len)) { /* do we have the right prefix */
|
||||
if (mode == PTCACHE_CLEAR_ALL) {
|
||||
pid->cache->last_exact = MIN2(pid->cache->startframe, 0);
|
||||
BLI_join_dirfile(path_full, sizeof(path_full), path, de->d_name);
|
||||
BLI_delete(path_full, false, false);
|
||||
}
|
||||
else {
|
||||
/* read the number of the file */
|
||||
const int frame = ptcache_frame_from_filename(de->d_name, ext);
|
||||
|
||||
if (frame != -1) {
|
||||
if ((mode == PTCACHE_CLEAR_BEFORE && frame < cfra) ||
|
||||
(mode == PTCACHE_CLEAR_AFTER && frame > cfra))
|
||||
{
|
||||
|
||||
BLI_join_dirfile(path_full, sizeof(path_full), path, de->d_name);
|
||||
BLI_delete(path_full, false, false);
|
||||
if (pid->cache->cached_frames && frame >=sta && frame <= end)
|
||||
pid->cache->cached_frames[frame-sta] = 0;
|
||||
if (frame != -1) {
|
||||
if ((mode == PTCACHE_CLEAR_BEFORE && frame < cfra) ||
|
||||
(mode == PTCACHE_CLEAR_AFTER && frame > cfra))
|
||||
{
|
||||
BLI_join_dirfile(path_full, sizeof(path_full), path, de->d_name);
|
||||
BLI_delete(path_full, false, false);
|
||||
if (pid->cache->cached_frames && frame >=sta && frame <= end)
|
||||
pid->cache->cached_frames[frame-sta] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dir);
|
||||
closedir(dir);
|
||||
|
||||
if (mode == PTCACHE_CLEAR_ALL && pid->cache->cached_frames)
|
||||
memset(pid->cache->cached_frames, 0, MEM_allocN_len(pid->cache->cached_frames));
|
||||
}
|
||||
else {
|
||||
PTCacheMem *pm= pid->cache->mem_cache.first;
|
||||
PTCacheMem *link= NULL;
|
||||
|
||||
if (mode == PTCACHE_CLEAR_ALL) {
|
||||
/*we want startframe if the cache starts before zero*/
|
||||
pid->cache->last_exact = MIN2(pid->cache->startframe, 0);
|
||||
for (; pm; pm=pm->next) {
|
||||
ptcache_data_free(pm);
|
||||
ptcache_extra_free(pm);
|
||||
}
|
||||
BLI_freelistN(&pid->cache->mem_cache);
|
||||
|
||||
if (pid->cache->cached_frames)
|
||||
if (mode == PTCACHE_CLEAR_ALL && pid->cache->cached_frames)
|
||||
memset(pid->cache->cached_frames, 0, MEM_allocN_len(pid->cache->cached_frames));
|
||||
}
|
||||
else {
|
||||
while (pm) {
|
||||
if ((mode == PTCACHE_CLEAR_BEFORE && pm->frame < cfra) ||
|
||||
(mode == PTCACHE_CLEAR_AFTER && pm->frame > cfra))
|
||||
{
|
||||
link = pm;
|
||||
if (pid->cache->cached_frames && pm->frame >=sta && pm->frame <= end)
|
||||
pid->cache->cached_frames[pm->frame-sta] = 0;
|
||||
PTCacheMem *pm= pid->cache->mem_cache.first;
|
||||
PTCacheMem *link= NULL;
|
||||
|
||||
if (mode == PTCACHE_CLEAR_ALL) {
|
||||
/*we want startframe if the cache starts before zero*/
|
||||
pid->cache->last_exact = MIN2(pid->cache->startframe, 0);
|
||||
for (; pm; pm=pm->next) {
|
||||
ptcache_data_free(pm);
|
||||
ptcache_extra_free(pm);
|
||||
pm = pm->next;
|
||||
BLI_freelinkN(&pid->cache->mem_cache, link);
|
||||
}
|
||||
else
|
||||
pm = pm->next;
|
||||
BLI_freelistN(&pid->cache->mem_cache);
|
||||
|
||||
if (pid->cache->cached_frames)
|
||||
memset(pid->cache->cached_frames, 0, MEM_allocN_len(pid->cache->cached_frames));
|
||||
}
|
||||
else {
|
||||
while (pm) {
|
||||
if ((mode == PTCACHE_CLEAR_BEFORE && pm->frame < cfra) ||
|
||||
(mode == PTCACHE_CLEAR_AFTER && pm->frame > cfra))
|
||||
{
|
||||
link = pm;
|
||||
if (pid->cache->cached_frames && pm->frame >=sta && pm->frame <= end)
|
||||
pid->cache->cached_frames[pm->frame-sta] = 0;
|
||||
ptcache_data_free(pm);
|
||||
ptcache_extra_free(pm);
|
||||
pm = pm->next;
|
||||
BLI_freelinkN(&pid->cache->mem_cache, link);
|
||||
}
|
||||
else
|
||||
pm = pm->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case PTCACHE_CLEAR_FRAME:
|
||||
if (pid->cache->flag & PTCACHE_DISK_CACHE) {
|
||||
if (BKE_ptcache_id_exist(pid, cfra)) {
|
||||
ptcache_filename(pid, filename, cfra, 1, 1); /* no path */
|
||||
BLI_delete(filename, false, false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
PTCacheMem *pm = pid->cache->mem_cache.first;
|
||||
|
||||
for (; pm; pm=pm->next) {
|
||||
if (pm->frame == cfra) {
|
||||
ptcache_data_free(pm);
|
||||
ptcache_extra_free(pm);
|
||||
BLI_freelinkN(&pid->cache->mem_cache, pm);
|
||||
break;
|
||||
case PTCACHE_CLEAR_FRAME:
|
||||
if (pid->cache->flag & PTCACHE_DISK_CACHE) {
|
||||
if (BKE_ptcache_id_exist(pid, cfra)) {
|
||||
ptcache_filename(pid, filename, cfra, 1, 1); /* no path */
|
||||
BLI_delete(filename, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pid->cache->cached_frames && cfra >= sta && cfra <= end)
|
||||
pid->cache->cached_frames[cfra-sta] = 0;
|
||||
break;
|
||||
else {
|
||||
PTCacheMem *pm = pid->cache->mem_cache.first;
|
||||
|
||||
for (; pm; pm=pm->next) {
|
||||
if (pm->frame == cfra) {
|
||||
ptcache_data_free(pm);
|
||||
ptcache_extra_free(pm);
|
||||
BLI_freelinkN(&pid->cache->mem_cache, pm);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pid->cache->cached_frames && cfra >= sta && cfra <= end)
|
||||
pid->cache->cached_frames[cfra-sta] = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
BKE_ptcache_update_info(pid);
|
||||
|
||||
@@ -8125,32 +8125,32 @@ static void lib_link_linestyle(FileData *fd, Main *main)
|
||||
|
||||
for (m = linestyle->color_modifiers.first; m; m = m->next) {
|
||||
switch (m->type) {
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromObject *cm = (LineStyleColorModifier_DistanceFromObject *)m;
|
||||
cm->target = newlibadr(fd, linestyle->id.lib, cm->target);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromObject *cm = (LineStyleColorModifier_DistanceFromObject *)m;
|
||||
cm->target = newlibadr(fd, linestyle->id.lib, cm->target);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (m = linestyle->alpha_modifiers.first; m; m = m->next) {
|
||||
switch (m->type) {
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromObject *am = (LineStyleAlphaModifier_DistanceFromObject *)m;
|
||||
am->target = newlibadr(fd, linestyle->id.lib, am->target);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromObject *am = (LineStyleAlphaModifier_DistanceFromObject *)m;
|
||||
am->target = newlibadr(fd, linestyle->id.lib, am->target);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (m = linestyle->thickness_modifiers.first; m; m = m->next) {
|
||||
switch (m->type) {
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromObject *tm = (LineStyleThicknessModifier_DistanceFromObject *)m;
|
||||
tm->target = newlibadr(fd, linestyle->id.lib, tm->target);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromObject *tm = (LineStyleThicknessModifier_DistanceFromObject *)m;
|
||||
tm->target = newlibadr(fd, linestyle->id.lib, tm->target);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int a = 0; a < MAX_MTEX; a++) {
|
||||
@@ -8173,171 +8173,171 @@ static void lib_link_linestyle(FileData *fd, Main *main)
|
||||
static void direct_link_linestyle_color_modifier(FileData *fd, LineStyleModifier *modifier)
|
||||
{
|
||||
switch (modifier->type) {
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleColorModifier_AlongStroke *m = (LineStyleColorModifier_AlongStroke *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromCamera *m = (LineStyleColorModifier_DistanceFromCamera *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromObject *m = (LineStyleColorModifier_DistanceFromObject *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleColorModifier_Material *m = (LineStyleColorModifier_Material *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleColorModifier_Tangent *m = (LineStyleColorModifier_Tangent *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_NOISE:
|
||||
{
|
||||
LineStyleColorModifier_Noise *m = (LineStyleColorModifier_Noise *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleColorModifier_CreaseAngle *m = (LineStyleColorModifier_CreaseAngle *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleColorModifier_Curvature_3D *m = (LineStyleColorModifier_Curvature_3D *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleColorModifier_AlongStroke *m = (LineStyleColorModifier_AlongStroke *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromCamera *m = (LineStyleColorModifier_DistanceFromCamera *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleColorModifier_DistanceFromObject *m = (LineStyleColorModifier_DistanceFromObject *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleColorModifier_Material *m = (LineStyleColorModifier_Material *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleColorModifier_Tangent *m = (LineStyleColorModifier_Tangent *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_NOISE:
|
||||
{
|
||||
LineStyleColorModifier_Noise *m = (LineStyleColorModifier_Noise *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleColorModifier_CreaseAngle *m = (LineStyleColorModifier_CreaseAngle *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleColorModifier_Curvature_3D *m = (LineStyleColorModifier_Curvature_3D *)modifier;
|
||||
m->color_ramp = newdataadr(fd, m->color_ramp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_linestyle_alpha_modifier(FileData *fd, LineStyleModifier *modifier)
|
||||
{
|
||||
switch (modifier->type) {
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleAlphaModifier_AlongStroke *m = (LineStyleAlphaModifier_AlongStroke *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromCamera *m = (LineStyleAlphaModifier_DistanceFromCamera *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromObject *m = (LineStyleAlphaModifier_DistanceFromObject *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleAlphaModifier_Material *m = (LineStyleAlphaModifier_Material *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleAlphaModifier_Tangent *m = (LineStyleAlphaModifier_Tangent *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_NOISE:
|
||||
{
|
||||
LineStyleAlphaModifier_Noise *m = (LineStyleAlphaModifier_Noise *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleAlphaModifier_CreaseAngle *m = (LineStyleAlphaModifier_CreaseAngle *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleAlphaModifier_Curvature_3D *m = (LineStyleAlphaModifier_Curvature_3D *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleAlphaModifier_AlongStroke *m = (LineStyleAlphaModifier_AlongStroke *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromCamera *m = (LineStyleAlphaModifier_DistanceFromCamera *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleAlphaModifier_DistanceFromObject *m = (LineStyleAlphaModifier_DistanceFromObject *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleAlphaModifier_Material *m = (LineStyleAlphaModifier_Material *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleAlphaModifier_Tangent *m = (LineStyleAlphaModifier_Tangent *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_NOISE:
|
||||
{
|
||||
LineStyleAlphaModifier_Noise *m = (LineStyleAlphaModifier_Noise *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleAlphaModifier_CreaseAngle *m = (LineStyleAlphaModifier_CreaseAngle *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleAlphaModifier_Curvature_3D *m = (LineStyleAlphaModifier_Curvature_3D *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void direct_link_linestyle_thickness_modifier(FileData *fd, LineStyleModifier *modifier)
|
||||
{
|
||||
switch (modifier->type) {
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleThicknessModifier_AlongStroke *m = (LineStyleThicknessModifier_AlongStroke *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromCamera *m = (LineStyleThicknessModifier_DistanceFromCamera *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromObject *m = (LineStyleThicknessModifier_DistanceFromObject *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleThicknessModifier_Material *m = (LineStyleThicknessModifier_Material *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleThicknessModifier_Tangent *m = (LineStyleThicknessModifier_Tangent *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleThicknessModifier_CreaseAngle *m = (LineStyleThicknessModifier_CreaseAngle *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleThicknessModifier_Curvature_3D *m = (LineStyleThicknessModifier_Curvature_3D *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_ALONG_STROKE:
|
||||
{
|
||||
LineStyleThicknessModifier_AlongStroke *m = (LineStyleThicknessModifier_AlongStroke *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromCamera *m = (LineStyleThicknessModifier_DistanceFromCamera *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
|
||||
{
|
||||
LineStyleThicknessModifier_DistanceFromObject *m = (LineStyleThicknessModifier_DistanceFromObject *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_MATERIAL:
|
||||
{
|
||||
LineStyleThicknessModifier_Material *m = (LineStyleThicknessModifier_Material *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_TANGENT:
|
||||
{
|
||||
LineStyleThicknessModifier_Tangent *m = (LineStyleThicknessModifier_Tangent *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CREASE_ANGLE:
|
||||
{
|
||||
LineStyleThicknessModifier_CreaseAngle *m = (LineStyleThicknessModifier_CreaseAngle *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
case LS_MODIFIER_CURVATURE_3D:
|
||||
{
|
||||
LineStyleThicknessModifier_Curvature_3D *m = (LineStyleThicknessModifier_Curvature_3D *)modifier;
|
||||
m->curve = newdataadr(fd, m->curve);
|
||||
direct_link_curvemapping(fd, m->curve);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8991,49 +8991,49 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
|
||||
|
||||
while (bhead) {
|
||||
switch (bhead->code) {
|
||||
case DATA:
|
||||
case DNA1:
|
||||
case TEST: /* used as preview since 2.5x */
|
||||
case REND:
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
break;
|
||||
case GLOB:
|
||||
bhead = read_global(bfd, fd, bhead);
|
||||
break;
|
||||
case USER:
|
||||
if (fd->skip_flags & BLO_READ_SKIP_USERDEF) {
|
||||
case DATA:
|
||||
case DNA1:
|
||||
case TEST: /* used as preview since 2.5x */
|
||||
case REND:
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_userdef(bfd, fd, bhead);
|
||||
}
|
||||
break;
|
||||
case ENDB:
|
||||
bhead = NULL;
|
||||
break;
|
||||
break;
|
||||
case GLOB:
|
||||
bhead = read_global(bfd, fd, bhead);
|
||||
break;
|
||||
case USER:
|
||||
if (fd->skip_flags & BLO_READ_SKIP_USERDEF) {
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_userdef(bfd, fd, bhead);
|
||||
}
|
||||
break;
|
||||
case ENDB:
|
||||
bhead = NULL;
|
||||
break;
|
||||
|
||||
case ID_ID:
|
||||
/* Always adds to the most recently loaded ID_LI block, see direct_link_library.
|
||||
* This is part of the file format definition. */
|
||||
if (fd->skip_flags & BLO_READ_SKIP_DATA) {
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_libblock(fd, mainlist.last, bhead, LIB_TAG_READ | LIB_TAG_EXTERN, NULL);
|
||||
}
|
||||
break;
|
||||
/* in 2.50+ files, the file identifier for screens is patched, forward compatibility */
|
||||
case ID_SCRN:
|
||||
bhead->code = ID_SCR;
|
||||
/* pass on to default */
|
||||
ATTR_FALLTHROUGH;
|
||||
default:
|
||||
if (fd->skip_flags & BLO_READ_SKIP_DATA) {
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_libblock(fd, bfd->main, bhead, LIB_TAG_LOCAL, NULL);
|
||||
}
|
||||
case ID_ID:
|
||||
/* Always adds to the most recently loaded ID_LI block, see direct_link_library.
|
||||
* This is part of the file format definition. */
|
||||
if (fd->skip_flags & BLO_READ_SKIP_DATA) {
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_libblock(fd, mainlist.last, bhead, LIB_TAG_READ | LIB_TAG_EXTERN, NULL);
|
||||
}
|
||||
break;
|
||||
/* in 2.50+ files, the file identifier for screens is patched, forward compatibility */
|
||||
case ID_SCRN:
|
||||
bhead->code = ID_SCR;
|
||||
/* pass on to default */
|
||||
ATTR_FALLTHROUGH;
|
||||
default:
|
||||
if (fd->skip_flags & BLO_READ_SKIP_DATA) {
|
||||
bhead = blo_nextbhead(fd, bhead);
|
||||
}
|
||||
else {
|
||||
bhead = read_libblock(fd, bfd->main, bhead, LIB_TAG_LOCAL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10138,91 +10138,91 @@ void BLO_expand_main(void *fdhandle, Main *mainvar)
|
||||
expand_idprops(fd, mainvar, id->properties);
|
||||
|
||||
switch (GS(id->name)) {
|
||||
case ID_OB:
|
||||
expand_object(fd, mainvar, (Object *)id);
|
||||
break;
|
||||
case ID_ME:
|
||||
expand_mesh(fd, mainvar, (Mesh *)id);
|
||||
break;
|
||||
case ID_CU:
|
||||
expand_curve(fd, mainvar, (Curve *)id);
|
||||
break;
|
||||
case ID_MB:
|
||||
expand_mball(fd, mainvar, (MetaBall *)id);
|
||||
break;
|
||||
case ID_SCE:
|
||||
expand_scene(fd, mainvar, (Scene *)id);
|
||||
break;
|
||||
case ID_MA:
|
||||
expand_material(fd, mainvar, (Material *)id);
|
||||
break;
|
||||
case ID_TE:
|
||||
expand_texture(fd, mainvar, (Tex *)id);
|
||||
break;
|
||||
case ID_WO:
|
||||
expand_world(fd, mainvar, (World *)id);
|
||||
break;
|
||||
case ID_LT:
|
||||
expand_lattice(fd, mainvar, (Lattice *)id);
|
||||
break;
|
||||
case ID_LA:
|
||||
expand_lamp(fd, mainvar, (Lamp *)id);
|
||||
break;
|
||||
case ID_KE:
|
||||
expand_key(fd, mainvar, (Key *)id);
|
||||
break;
|
||||
case ID_CA:
|
||||
expand_camera(fd, mainvar, (Camera *)id);
|
||||
break;
|
||||
case ID_SPK:
|
||||
expand_speaker(fd, mainvar, (Speaker *)id);
|
||||
break;
|
||||
case ID_SO:
|
||||
expand_sound(fd, mainvar, (bSound *)id);
|
||||
break;
|
||||
case ID_LP:
|
||||
expand_lightprobe(fd, mainvar, (LightProbe *)id);
|
||||
break;
|
||||
case ID_AR:
|
||||
expand_armature(fd, mainvar, (bArmature *)id);
|
||||
break;
|
||||
case ID_AC:
|
||||
expand_action(fd, mainvar, (bAction *)id); // XXX deprecated - old animation system
|
||||
break;
|
||||
case ID_GR:
|
||||
expand_collection(fd, mainvar, (Collection *)id);
|
||||
break;
|
||||
case ID_NT:
|
||||
expand_nodetree(fd, mainvar, (bNodeTree *)id);
|
||||
break;
|
||||
case ID_BR:
|
||||
expand_brush(fd, mainvar, (Brush *)id);
|
||||
break;
|
||||
case ID_IP:
|
||||
expand_ipo(fd, mainvar, (Ipo *)id); // XXX deprecated - old animation system
|
||||
break;
|
||||
case ID_PA:
|
||||
expand_particlesettings(fd, mainvar, (ParticleSettings *)id);
|
||||
break;
|
||||
case ID_MC:
|
||||
expand_movieclip(fd, mainvar, (MovieClip *)id);
|
||||
break;
|
||||
case ID_MSK:
|
||||
expand_mask(fd, mainvar, (Mask *)id);
|
||||
break;
|
||||
case ID_LS:
|
||||
expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id);
|
||||
break;
|
||||
case ID_GD:
|
||||
expand_gpencil(fd, mainvar, (bGPdata *)id);
|
||||
break;
|
||||
case ID_CF:
|
||||
expand_cachefile(fd, mainvar, (CacheFile *)id);
|
||||
break;
|
||||
case ID_WS:
|
||||
expand_workspace(fd, mainvar, (WorkSpace *)id);
|
||||
default:
|
||||
break;
|
||||
case ID_OB:
|
||||
expand_object(fd, mainvar, (Object *)id);
|
||||
break;
|
||||
case ID_ME:
|
||||
expand_mesh(fd, mainvar, (Mesh *)id);
|
||||
break;
|
||||
case ID_CU:
|
||||
expand_curve(fd, mainvar, (Curve *)id);
|
||||
break;
|
||||
case ID_MB:
|
||||
expand_mball(fd, mainvar, (MetaBall *)id);
|
||||
break;
|
||||
case ID_SCE:
|
||||
expand_scene(fd, mainvar, (Scene *)id);
|
||||
break;
|
||||
case ID_MA:
|
||||
expand_material(fd, mainvar, (Material *)id);
|
||||
break;
|
||||
case ID_TE:
|
||||
expand_texture(fd, mainvar, (Tex *)id);
|
||||
break;
|
||||
case ID_WO:
|
||||
expand_world(fd, mainvar, (World *)id);
|
||||
break;
|
||||
case ID_LT:
|
||||
expand_lattice(fd, mainvar, (Lattice *)id);
|
||||
break;
|
||||
case ID_LA:
|
||||
expand_lamp(fd, mainvar, (Lamp *)id);
|
||||
break;
|
||||
case ID_KE:
|
||||
expand_key(fd, mainvar, (Key *)id);
|
||||
break;
|
||||
case ID_CA:
|
||||
expand_camera(fd, mainvar, (Camera *)id);
|
||||
break;
|
||||
case ID_SPK:
|
||||
expand_speaker(fd, mainvar, (Speaker *)id);
|
||||
break;
|
||||
case ID_SO:
|
||||
expand_sound(fd, mainvar, (bSound *)id);
|
||||
break;
|
||||
case ID_LP:
|
||||
expand_lightprobe(fd, mainvar, (LightProbe *)id);
|
||||
break;
|
||||
case ID_AR:
|
||||
expand_armature(fd, mainvar, (bArmature *)id);
|
||||
break;
|
||||
case ID_AC:
|
||||
expand_action(fd, mainvar, (bAction *)id); // XXX deprecated - old animation system
|
||||
break;
|
||||
case ID_GR:
|
||||
expand_collection(fd, mainvar, (Collection *)id);
|
||||
break;
|
||||
case ID_NT:
|
||||
expand_nodetree(fd, mainvar, (bNodeTree *)id);
|
||||
break;
|
||||
case ID_BR:
|
||||
expand_brush(fd, mainvar, (Brush *)id);
|
||||
break;
|
||||
case ID_IP:
|
||||
expand_ipo(fd, mainvar, (Ipo *)id); // XXX deprecated - old animation system
|
||||
break;
|
||||
case ID_PA:
|
||||
expand_particlesettings(fd, mainvar, (ParticleSettings *)id);
|
||||
break;
|
||||
case ID_MC:
|
||||
expand_movieclip(fd, mainvar, (MovieClip *)id);
|
||||
break;
|
||||
case ID_MSK:
|
||||
expand_mask(fd, mainvar, (Mask *)id);
|
||||
break;
|
||||
case ID_LS:
|
||||
expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id);
|
||||
break;
|
||||
case ID_GD:
|
||||
expand_gpencil(fd, mainvar, (bGPdata *)id);
|
||||
break;
|
||||
case ID_CF:
|
||||
expand_cachefile(fd, mainvar, (CacheFile *)id);
|
||||
break;
|
||||
case ID_WS:
|
||||
expand_workspace(fd, mainvar, (WorkSpace *)id);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
do_it = true;
|
||||
|
||||
@@ -274,7 +274,8 @@ bool DebugInfo::graphviz_system(const ExecutionSystem *system, char *str, int ma
|
||||
|
||||
#if 0
|
||||
for (ExecutionSystem::Operations::const_iterator it = system->m_operations.begin();
|
||||
it != system->m_operations.end(); ++it) {
|
||||
it != system->m_operations.end(); ++it)
|
||||
{
|
||||
NodeOperation *op = *it;
|
||||
len += snprintf(str + len, maxlen > len ? maxlen - len : 0, "// OPERATION: %s\r\n", node->getbNode()->typeinfo->ui_name);
|
||||
}
|
||||
|
||||
@@ -143,12 +143,12 @@ static void GPENCIL_render_cache(
|
||||
static void GPENCIL_render_update_viewvecs(float invproj[4][4], float winmat[4][4], float(*r_viewvecs)[4])
|
||||
{
|
||||
/* view vectors for the corners of the view frustum.
|
||||
* Can be used to recreate the world space position easily */
|
||||
* Can be used to recreate the world space position easily */
|
||||
float view_vecs[4][4] = {
|
||||
{ -1.0f, -1.0f, -1.0f, 1.0f },
|
||||
{ 1.0f, -1.0f, -1.0f, 1.0f },
|
||||
{ -1.0f, 1.0f, -1.0f, 1.0f },
|
||||
{ -1.0f, -1.0f, 1.0f, 1.0f }
|
||||
{-1.0f, -1.0f, -1.0f, 1.0f},
|
||||
{1.0f, -1.0f, -1.0f, 1.0f},
|
||||
{-1.0f, 1.0f, -1.0f, 1.0f},
|
||||
{-1.0f, -1.0f, 1.0f, 1.0f}
|
||||
};
|
||||
|
||||
/* convert the view vectors to view space */
|
||||
|
||||
@@ -683,9 +683,9 @@ static int gp_frame_clean_fill_exec(bContext *C, wmOperator *op)
|
||||
void GPENCIL_OT_frame_clean_fill(wmOperatorType *ot)
|
||||
{
|
||||
static const EnumPropertyItem duplicate_mode[] = {
|
||||
{ GP_FRAME_CLEAN_FILL_ACTIVE, "ACTIVE", 0, "Active Frame Only", "Clean active frame only" },
|
||||
{ GP_FRAME_CLEAN_FILL_ALL, "ALL", 0, "All Frames", "Clean all frames in all layers" },
|
||||
{ 0, NULL, 0, NULL, NULL }
|
||||
{GP_FRAME_CLEAN_FILL_ACTIVE, "ACTIVE", 0, "Active Frame Only", "Clean active frame only"},
|
||||
{GP_FRAME_CLEAN_FILL_ALL, "ALL", 0, "All Frames", "Clean all frames in all layers"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
/* identifiers */
|
||||
|
||||
@@ -3330,10 +3330,10 @@ static int gp_stroke_separate_exec(bContext *C, wmOperator *op)
|
||||
void GPENCIL_OT_stroke_separate(wmOperatorType *ot)
|
||||
{
|
||||
static const EnumPropertyItem separate_type[] = {
|
||||
{GP_SEPARATE_POINT, "POINT", 0, "Selected Points", "Separate the selected points" },
|
||||
{GP_SEPARATE_STROKE, "STROKE", 0, "Selected Strokes", "Separate the selected strokes"},
|
||||
{GP_SEPARATE_LAYER, "LAYER", 0, "Active Layer", "Separate the strokes of the current layer" },
|
||||
{ 0, NULL, 0, NULL, NULL }
|
||||
{GP_SEPARATE_POINT, "POINT", 0, "Selected Points", "Separate the selected points"},
|
||||
{GP_SEPARATE_STROKE, "STROKE", 0, "Selected Strokes", "Separate the selected strokes"},
|
||||
{GP_SEPARATE_LAYER, "LAYER", 0, "Active Layer", "Separate the strokes of the current layer"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
/* identifiers */
|
||||
|
||||
@@ -3764,7 +3764,8 @@ static void brush_add_count_iter(
|
||||
&min_d,
|
||||
&add_pars[iter].num_dmcache,
|
||||
add_pars[iter].fuv,
|
||||
0, 0, 0, 0)) {
|
||||
0, 0, 0, 0))
|
||||
{
|
||||
if (psys->part->use_modifier_stack && !psmd_eval->mesh_final->runtime.deformed_only) {
|
||||
add_pars[iter].num = add_pars[iter].num_dmcache;
|
||||
add_pars[iter].num_dmcache = DMCACHE_ISCHILD;
|
||||
@@ -4645,7 +4646,8 @@ int PE_minmax(Scene *scene, ViewLayer *view_layer, float min[3], float max[3])
|
||||
static struct ParticleSystem *psys_eval_get(
|
||||
Depsgraph *depsgraph,
|
||||
Object *object,
|
||||
ParticleSystem *psys){
|
||||
ParticleSystem *psys)
|
||||
{
|
||||
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
|
||||
if (object_eval == object) {
|
||||
return psys;
|
||||
|
||||
@@ -164,24 +164,24 @@ int BlenderFileLoader::countClippedFaces(float v1[3], float v2[3], float v3[3],
|
||||
sum += clip[i];
|
||||
}
|
||||
switch (numClipped) {
|
||||
case 0:
|
||||
numTris = 1; // triangle
|
||||
break;
|
||||
case 1:
|
||||
numTris = 2; // tetragon
|
||||
break;
|
||||
case 2:
|
||||
if (sum == 0)
|
||||
numTris = 3; // pentagon
|
||||
else
|
||||
case 0:
|
||||
numTris = 1; // triangle
|
||||
break;
|
||||
case 3:
|
||||
if (sum == 3 || sum == -3)
|
||||
numTris = 0;
|
||||
else
|
||||
break;
|
||||
case 1:
|
||||
numTris = 2; // tetragon
|
||||
break;
|
||||
break;
|
||||
case 2:
|
||||
if (sum == 0)
|
||||
numTris = 3; // pentagon
|
||||
else
|
||||
numTris = 1; // triangle
|
||||
break;
|
||||
case 3:
|
||||
if (sum == 3 || sum == -3)
|
||||
numTris = 0;
|
||||
else
|
||||
numTris = 2; // tetragon
|
||||
break;
|
||||
}
|
||||
return numTris;
|
||||
}
|
||||
|
||||
@@ -193,17 +193,17 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer()
|
||||
}
|
||||
#endif
|
||||
switch (ob->type) {
|
||||
case OB_MESH:
|
||||
BKE_libblock_free(freestyle_bmain, ob);
|
||||
BKE_libblock_free(freestyle_bmain, data);
|
||||
break;
|
||||
case OB_CAMERA:
|
||||
BKE_libblock_free(freestyle_bmain, ob);
|
||||
BKE_libblock_free(freestyle_bmain, data);
|
||||
freestyle_scene->camera = NULL;
|
||||
break;
|
||||
default:
|
||||
cerr << "Warning: unexpected object in the scene: " << name[0] << name[1] << ":" << (name + 2) << endl;
|
||||
case OB_MESH:
|
||||
BKE_libblock_free(freestyle_bmain, ob);
|
||||
BKE_libblock_free(freestyle_bmain, data);
|
||||
break;
|
||||
case OB_CAMERA:
|
||||
BKE_libblock_free(freestyle_bmain, ob);
|
||||
BKE_libblock_free(freestyle_bmain, data);
|
||||
freestyle_scene->camera = NULL;
|
||||
break;
|
||||
default:
|
||||
cerr << "Warning: unexpected object in the scene: " << name[0] << name[1] << ":" << (name + 2) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -147,12 +147,12 @@ static void init_view(Render *re)
|
||||
|
||||
float thickness = 1.0f;
|
||||
switch (re->r.line_thickness_mode) {
|
||||
case R_LINE_THICKNESS_ABSOLUTE:
|
||||
thickness = re->r.unit_line_thickness * (re->r.size / 100.f);
|
||||
break;
|
||||
case R_LINE_THICKNESS_RELATIVE:
|
||||
thickness = height / 480.f;
|
||||
break;
|
||||
case R_LINE_THICKNESS_ABSOLUTE:
|
||||
thickness = re->r.unit_line_thickness * (re->r.size / 100.f);
|
||||
break;
|
||||
case R_LINE_THICKNESS_RELATIVE:
|
||||
thickness = height / 480.f;
|
||||
break;
|
||||
}
|
||||
|
||||
g_freestyle.viewport[0] = g_freestyle.viewport[1] = 0;
|
||||
@@ -303,25 +303,9 @@ static void prepare(Render *re, ViewLayer *view_layer)
|
||||
int layer_count = 0;
|
||||
|
||||
switch (config->mode) {
|
||||
case FREESTYLE_CONTROL_SCRIPT_MODE:
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Modules :" << endl;
|
||||
}
|
||||
for (FreestyleModuleConfig *module_conf = (FreestyleModuleConfig *)config->modules.first;
|
||||
module_conf;
|
||||
module_conf = module_conf->next)
|
||||
{
|
||||
if (module_conf->script && module_conf->is_displayed) {
|
||||
const char *id_name = module_conf->script->id.name + 2;
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " " << layer_count + 1 << ": " << id_name;
|
||||
if (module_conf->script->name)
|
||||
cout << " (" << module_conf->script->name << ")";
|
||||
cout << endl;
|
||||
}
|
||||
controller->InsertStyleModule(layer_count, id_name, module_conf->script);
|
||||
controller->toggleLayer(layer_count, true);
|
||||
layer_count++;
|
||||
case FREESTYLE_CONTROL_SCRIPT_MODE:
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Modules :" << endl;
|
||||
}
|
||||
}
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
@@ -378,40 +362,99 @@ static void prepare(Render *re, ViewLayer *view_layer)
|
||||
else
|
||||
conditions[i].value = -1; // condition: NOT X
|
||||
}
|
||||
// logical operator for the selection conditions
|
||||
bool logical_and = ((lineset->flags & FREESTYLE_LINESET_FE_AND) != 0);
|
||||
// negation operator
|
||||
if (lineset->flags & FREESTYLE_LINESET_FE_NOT) {
|
||||
// convert an Exclusive condition into an Inclusive equivalent using De Morgan's laws:
|
||||
// NOT (X OR Y) --> (NOT X) AND (NOT Y)
|
||||
// NOT (X AND Y) --> (NOT X) OR (NOT Y)
|
||||
for (int i = 0; i < num_edge_types; i++)
|
||||
conditions[i].value *= -1;
|
||||
logical_and = !logical_and;
|
||||
controller->InsertStyleModule(layer_count, id_name, module_conf->script);
|
||||
controller->toggleLayer(layer_count, true);
|
||||
layer_count++;
|
||||
}
|
||||
}
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << endl;
|
||||
}
|
||||
controller->setComputeRidgesAndValleysFlag((config->flags & FREESTYLE_RIDGES_AND_VALLEYS_FLAG) ? true : false);
|
||||
controller->setComputeSuggestiveContoursFlag((config->flags & FREESTYLE_SUGGESTIVE_CONTOURS_FLAG) ? true : false);
|
||||
controller->setComputeMaterialBoundariesFlag((config->flags & FREESTYLE_MATERIAL_BOUNDARIES_FLAG) ? true : false);
|
||||
break;
|
||||
case FREESTYLE_CONTROL_EDITOR_MODE:
|
||||
int use_ridges_and_valleys = 0;
|
||||
int use_suggestive_contours = 0;
|
||||
int use_material_boundaries = 0;
|
||||
struct edge_type_condition conditions[] = {
|
||||
{FREESTYLE_FE_SILHOUETTE, 0},
|
||||
{FREESTYLE_FE_BORDER, 0},
|
||||
{FREESTYLE_FE_CREASE, 0},
|
||||
{FREESTYLE_FE_RIDGE_VALLEY, 0},
|
||||
{FREESTYLE_FE_SUGGESTIVE_CONTOUR, 0},
|
||||
{FREESTYLE_FE_MATERIAL_BOUNDARY, 0},
|
||||
{FREESTYLE_FE_CONTOUR, 0},
|
||||
{FREESTYLE_FE_EXTERNAL_CONTOUR, 0},
|
||||
{FREESTYLE_FE_EDGE_MARK, 0}
|
||||
};
|
||||
int num_edge_types = sizeof(conditions) / sizeof(struct edge_type_condition);
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << "Linesets:" << endl;
|
||||
}
|
||||
for (FreestyleLineSet *lineset = (FreestyleLineSet *)config->linesets.first;
|
||||
lineset;
|
||||
lineset = lineset->next)
|
||||
{
|
||||
if (lineset->flags & FREESTYLE_LINESET_ENABLED) {
|
||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||
cout << " " << layer_count+1 << ": " << lineset->name << " - " <<
|
||||
(lineset->linestyle ? (lineset->linestyle->id.name + 2) : "<NULL>") << endl;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_RIDGE_VALLEY, true))
|
||||
{
|
||||
char *buffer = create_lineset_handler(srl->name, lineset->name);
|
||||
controller->InsertStyleModule(layer_count, lineset->name, buffer);
|
||||
controller->toggleLayer(layer_count, true);
|
||||
MEM_freeN(buffer);
|
||||
if (!(lineset->selection & FREESTYLE_SEL_EDGE_TYPES) || !lineset->edge_types) {
|
||||
++use_ridges_and_valleys;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_SUGGESTIVE_CONTOUR, true))
|
||||
{
|
||||
++use_suggestive_contours;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_MATERIAL_BOUNDARY, true))
|
||||
{
|
||||
++use_material_boundaries;
|
||||
}
|
||||
else {
|
||||
// conditions for feature edge selection by edge types
|
||||
for (int i = 0; i < num_edge_types; i++) {
|
||||
if (!(lineset->edge_types & conditions[i].edge_type))
|
||||
conditions[i].value = 0; // no condition specified
|
||||
else if (!(lineset->exclude_edge_types & conditions[i].edge_type))
|
||||
conditions[i].value = 1; // condition: X
|
||||
else
|
||||
conditions[i].value = -1; // condition: NOT X
|
||||
}
|
||||
// logical operator for the selection conditions
|
||||
bool logical_and = ((lineset->flags & FREESTYLE_LINESET_FE_AND) != 0);
|
||||
// negation operator
|
||||
if (lineset->flags & FREESTYLE_LINESET_FE_NOT) {
|
||||
// convert an Exclusive condition into an Inclusive equivalent using De Morgan's laws:
|
||||
// NOT (X OR Y) --> (NOT X) AND (NOT Y)
|
||||
// NOT (X AND Y) --> (NOT X) OR (NOT Y)
|
||||
for (int i = 0; i < num_edge_types; i++)
|
||||
conditions[i].value *= -1;
|
||||
logical_and = !logical_and;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_RIDGE_VALLEY, true))
|
||||
{
|
||||
++use_ridges_and_valleys;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_SUGGESTIVE_CONTOUR, true))
|
||||
{
|
||||
++use_suggestive_contours;
|
||||
}
|
||||
if (test_edge_type_conditions(conditions, num_edge_types, logical_and,
|
||||
FREESTYLE_FE_MATERIAL_BOUNDARY, true))
|
||||
{
|
||||
++use_material_boundaries;
|
||||
}
|
||||
}
|
||||
layer_count++;
|
||||
}
|
||||
layer_count++;
|
||||
}
|
||||
}
|
||||
controller->setComputeRidgesAndValleysFlag(use_ridges_and_valleys > 0);
|
||||
controller->setComputeSuggestiveContoursFlag(use_suggestive_contours > 0);
|
||||
controller->setComputeMaterialBoundariesFlag(use_material_boundaries > 0);
|
||||
break;
|
||||
controller->setComputeRidgesAndValleysFlag(use_ridges_and_valleys > 0);
|
||||
controller->setComputeSuggestiveContoursFlag(use_suggestive_contours > 0);
|
||||
controller->setComputeMaterialBoundariesFlag(use_material_boundaries > 0);
|
||||
break;
|
||||
}
|
||||
|
||||
// set parameters
|
||||
@@ -541,24 +584,24 @@ static int displayed_layer_count(ViewLayer *view_layer)
|
||||
int count = 0;
|
||||
|
||||
switch (view_layer->freestyle_config.mode) {
|
||||
case FREESTYLE_CONTROL_SCRIPT_MODE:
|
||||
for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first;
|
||||
module;
|
||||
module = module->next)
|
||||
{
|
||||
if (module->script && module->is_displayed)
|
||||
count++;
|
||||
}
|
||||
break;
|
||||
case FREESTYLE_CONTROL_EDITOR_MODE:
|
||||
for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first;
|
||||
lineset;
|
||||
lineset = lineset->next)
|
||||
{
|
||||
if (lineset->flags & FREESTYLE_LINESET_ENABLED)
|
||||
count++;
|
||||
}
|
||||
break;
|
||||
case FREESTYLE_CONTROL_SCRIPT_MODE:
|
||||
for (FreestyleModuleConfig *module = (FreestyleModuleConfig *)view_layer->freestyle_config.modules.first;
|
||||
module;
|
||||
module = module->next)
|
||||
{
|
||||
if (module->script && module->is_displayed)
|
||||
count++;
|
||||
}
|
||||
break;
|
||||
case FREESTYLE_CONTROL_EDITOR_MODE:
|
||||
for (FreestyleLineSet *lineset = (FreestyleLineSet *)view_layer->freestyle_config.linesets.first;
|
||||
lineset;
|
||||
lineset = lineset->next)
|
||||
{
|
||||
if (lineset->flags & FREESTYLE_LINESET_ENABLED)
|
||||
count++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -157,38 +157,38 @@ static int FrsMaterial_mathutils_get(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_FrsMaterial *self = (BPy_FrsMaterial *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
bmo->data[0] = self->m->lineR();
|
||||
bmo->data[1] = self->m->lineG();
|
||||
bmo->data[2] = self->m->lineB();
|
||||
bmo->data[3] = self->m->lineA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
bmo->data[0] = self->m->diffuseR();
|
||||
bmo->data[1] = self->m->diffuseG();
|
||||
bmo->data[2] = self->m->diffuseB();
|
||||
bmo->data[3] = self->m->diffuseA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
bmo->data[0] = self->m->specularR();
|
||||
bmo->data[1] = self->m->specularG();
|
||||
bmo->data[2] = self->m->specularB();
|
||||
bmo->data[3] = self->m->specularA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
bmo->data[0] = self->m->ambientR();
|
||||
bmo->data[1] = self->m->ambientG();
|
||||
bmo->data[2] = self->m->ambientB();
|
||||
bmo->data[3] = self->m->ambientA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
bmo->data[0] = self->m->emissionR();
|
||||
bmo->data[1] = self->m->emissionG();
|
||||
bmo->data[2] = self->m->emissionB();
|
||||
bmo->data[3] = self->m->emissionA();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
bmo->data[0] = self->m->lineR();
|
||||
bmo->data[1] = self->m->lineG();
|
||||
bmo->data[2] = self->m->lineB();
|
||||
bmo->data[3] = self->m->lineA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
bmo->data[0] = self->m->diffuseR();
|
||||
bmo->data[1] = self->m->diffuseG();
|
||||
bmo->data[2] = self->m->diffuseB();
|
||||
bmo->data[3] = self->m->diffuseA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
bmo->data[0] = self->m->specularR();
|
||||
bmo->data[1] = self->m->specularG();
|
||||
bmo->data[2] = self->m->specularB();
|
||||
bmo->data[3] = self->m->specularA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
bmo->data[0] = self->m->ambientR();
|
||||
bmo->data[1] = self->m->ambientG();
|
||||
bmo->data[2] = self->m->ambientB();
|
||||
bmo->data[3] = self->m->ambientA();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
bmo->data[0] = self->m->emissionR();
|
||||
bmo->data[1] = self->m->emissionG();
|
||||
bmo->data[2] = self->m->emissionB();
|
||||
bmo->data[3] = self->m->emissionA();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -197,23 +197,23 @@ static int FrsMaterial_mathutils_set(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_FrsMaterial *self = (BPy_FrsMaterial *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
self->m->setLine(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
self->m->setDiffuse(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
self->m->setSpecular(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
self->m->setAmbient(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
self->m->setEmission(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
self->m->setLine(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
self->m->setDiffuse(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
self->m->setSpecular(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
self->m->setAmbient(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
self->m->setEmission(bmo->data[0], bmo->data[1], bmo->data[2], bmo->data[3]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -222,38 +222,38 @@ static int FrsMaterial_mathutils_get_index(BaseMathObject *bmo, int subtype, int
|
||||
{
|
||||
BPy_FrsMaterial *self = (BPy_FrsMaterial *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
{
|
||||
const float *color = self->m->line();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
{
|
||||
const float *color = self->m->diffuse();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
{
|
||||
const float *color = self->m->specular();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
{
|
||||
const float *color = self->m->ambient();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
{
|
||||
const float *color = self->m->emission();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
{
|
||||
const float *color = self->m->line();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
{
|
||||
const float *color = self->m->diffuse();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
{
|
||||
const float *color = self->m->specular();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
{
|
||||
const float *color = self->m->ambient();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
{
|
||||
const float *color = self->m->emission();
|
||||
bmo->data[index] = color[index];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -263,33 +263,33 @@ static int FrsMaterial_mathutils_set_index(BaseMathObject *bmo, int subtype, int
|
||||
BPy_FrsMaterial *self = (BPy_FrsMaterial *)bmo->cb_user;
|
||||
float color[4];
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
copy_v4_v4(color, self->m->line());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setLine(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
copy_v4_v4(color, self->m->diffuse());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setDiffuse(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
copy_v4_v4(color, self->m->specular());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setSpecular(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
copy_v4_v4(color, self->m->ambient());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setAmbient(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
copy_v4_v4(color, self->m->emission());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setEmission(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_LINE:
|
||||
copy_v4_v4(color, self->m->line());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setLine(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_DIFFUSE:
|
||||
copy_v4_v4(color, self->m->diffuse());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setDiffuse(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_SPECULAR:
|
||||
copy_v4_v4(color, self->m->specular());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setSpecular(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_AMBIENT:
|
||||
copy_v4_v4(color, self->m->ambient());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setAmbient(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_EMISSION:
|
||||
copy_v4_v4(color, self->m->emission());
|
||||
color[index] = bmo->data[index];
|
||||
self->m->setEmission(color[0], color[1], color[2], color[3]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -391,17 +391,17 @@ static int StrokeAttribute_mathutils_get(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_StrokeAttribute *self = (BPy_StrokeAttribute *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
bmo->data[0] = self->sa->getColorR();
|
||||
bmo->data[1] = self->sa->getColorG();
|
||||
bmo->data[2] = self->sa->getColorB();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
bmo->data[0] = self->sa->getThicknessR();
|
||||
bmo->data[1] = self->sa->getThicknessL();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
bmo->data[0] = self->sa->getColorR();
|
||||
bmo->data[1] = self->sa->getColorG();
|
||||
bmo->data[2] = self->sa->getColorB();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
bmo->data[0] = self->sa->getThicknessR();
|
||||
bmo->data[1] = self->sa->getThicknessL();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -410,14 +410,14 @@ static int StrokeAttribute_mathutils_set(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_StrokeAttribute *self = (BPy_StrokeAttribute *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
self->sa->setColor(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
self->sa->setThickness(bmo->data[0], bmo->data[1]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
self->sa->setColor(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
self->sa->setThickness(bmo->data[0], bmo->data[1]);
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -426,25 +426,25 @@ static int StrokeAttribute_mathutils_get_index(BaseMathObject *bmo, int subtype,
|
||||
{
|
||||
BPy_StrokeAttribute *self = (BPy_StrokeAttribute *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sa->getColorR(); break;
|
||||
case 1: bmo->data[1] = self->sa->getColorG(); break;
|
||||
case 2: bmo->data[2] = self->sa->getColorB(); break;
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sa->getColorR(); break;
|
||||
case 1: bmo->data[1] = self->sa->getColorG(); break;
|
||||
case 2: bmo->data[2] = self->sa->getColorB(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sa->getThicknessR(); break;
|
||||
case 1: bmo->data[1] = self->sa->getThicknessL(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sa->getThicknessR(); break;
|
||||
case 1: bmo->data[1] = self->sa->getThicknessL(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -453,23 +453,23 @@ static int StrokeAttribute_mathutils_set_index(BaseMathObject *bmo, int subtype,
|
||||
{
|
||||
BPy_StrokeAttribute *self = (BPy_StrokeAttribute *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
{
|
||||
float r = (index == 0) ? bmo->data[0] : self->sa->getColorR();
|
||||
float g = (index == 1) ? bmo->data[1] : self->sa->getColorG();
|
||||
float b = (index == 2) ? bmo->data[2] : self->sa->getColorB();
|
||||
self->sa->setColor(r, g, b);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
{
|
||||
float tr = (index == 0) ? bmo->data[0] : self->sa->getThicknessR();
|
||||
float tl = (index == 1) ? bmo->data[1] : self->sa->getThicknessL();
|
||||
self->sa->setThickness(tr, tl);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_COLOR:
|
||||
{
|
||||
float r = (index == 0) ? bmo->data[0] : self->sa->getColorR();
|
||||
float g = (index == 1) ? bmo->data[1] : self->sa->getColorG();
|
||||
float b = (index == 2) ? bmo->data[2] : self->sa->getColorB();
|
||||
self->sa->setColor(r, g, b);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_THICKNESS:
|
||||
{
|
||||
float tr = (index == 0) ? bmo->data[0] : self->sa->getThicknessR();
|
||||
float tl = (index == 1) ? bmo->data[1] : self->sa->getThicknessL();
|
||||
self->sa->setThickness(tr, tl);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -158,18 +158,18 @@ static int SVertex_mathutils_get(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_SVertex *self = (BPy_SVertex *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
bmo->data[0] = self->sv->getX();
|
||||
bmo->data[1] = self->sv->getY();
|
||||
bmo->data[2] = self->sv->getZ();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
bmo->data[0] = self->sv->getProjectedX();
|
||||
bmo->data[1] = self->sv->getProjectedY();
|
||||
bmo->data[2] = self->sv->getProjectedZ();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
bmo->data[0] = self->sv->getX();
|
||||
bmo->data[1] = self->sv->getY();
|
||||
bmo->data[2] = self->sv->getZ();
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
bmo->data[0] = self->sv->getProjectedX();
|
||||
bmo->data[1] = self->sv->getProjectedY();
|
||||
bmo->data[2] = self->sv->getProjectedZ();
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -178,20 +178,20 @@ static int SVertex_mathutils_set(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_SVertex *self = (BPy_SVertex *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->sv->setPoint3D(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->sv->setPoint2D(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->sv->setPoint3D(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->sv->setPoint2D(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -200,26 +200,26 @@ static int SVertex_mathutils_get_index(BaseMathObject *bmo, int subtype, int ind
|
||||
{
|
||||
BPy_SVertex *self = (BPy_SVertex *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sv->getX(); break;
|
||||
case 1: bmo->data[1] = self->sv->getY(); break;
|
||||
case 2: bmo->data[2] = self->sv->getZ(); break;
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sv->getX(); break;
|
||||
case 1: bmo->data[1] = self->sv->getY(); break;
|
||||
case 2: bmo->data[2] = self->sv->getZ(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sv->getProjectedX(); break;
|
||||
case 1: bmo->data[1] = self->sv->getProjectedY(); break;
|
||||
case 2: bmo->data[2] = self->sv->getProjectedZ(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = self->sv->getProjectedX(); break;
|
||||
case 1: bmo->data[1] = self->sv->getProjectedY(); break;
|
||||
case 2: bmo->data[2] = self->sv->getProjectedZ(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -228,22 +228,22 @@ static int SVertex_mathutils_set_index(BaseMathObject *bmo, int subtype, int ind
|
||||
{
|
||||
BPy_SVertex *self = (BPy_SVertex *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
{
|
||||
Vec3r p(self->sv->point3D());
|
||||
p[index] = bmo->data[index];
|
||||
self->sv->setPoint3D(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
{
|
||||
Vec3r p(self->sv->point2D());
|
||||
p[index] = bmo->data[index];
|
||||
self->sv->setPoint2D(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_POINT3D:
|
||||
{
|
||||
Vec3r p(self->sv->point3D());
|
||||
p[index] = bmo->data[index];
|
||||
self->sv->setPoint3D(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_POINT2D:
|
||||
{
|
||||
Vec3r p(self->sv->point2D());
|
||||
p[index] = bmo->data[index];
|
||||
self->sv->setPoint2D(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -186,10 +186,10 @@ static int StrokeVertex_mathutils_get_index(BaseMathObject *bmo, int /*subtype*/
|
||||
{
|
||||
BPy_StrokeVertex *self = (BPy_StrokeVertex *)bmo->cb_user;
|
||||
switch (index) {
|
||||
case 0: bmo->data[0] = (float)self->sv->x(); break;
|
||||
case 1: bmo->data[1] = (float)self->sv->y(); break;
|
||||
default:
|
||||
return -1;
|
||||
case 0: bmo->data[0] = (float)self->sv->x(); break;
|
||||
case 1: bmo->data[1] = (float)self->sv->y(); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -198,10 +198,10 @@ static int StrokeVertex_mathutils_set_index(BaseMathObject *bmo, int /*subtype*/
|
||||
{
|
||||
BPy_StrokeVertex *self = (BPy_StrokeVertex *)bmo->cb_user;
|
||||
switch (index) {
|
||||
case 0: self->sv->setX((real)bmo->data[0]); break;
|
||||
case 1: self->sv->setY((real)bmo->data[1]); break;
|
||||
default:
|
||||
return -1;
|
||||
case 0: self->sv->setX((real)bmo->data[0]); break;
|
||||
case 1: self->sv->setY((real)bmo->data[1]); break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -110,24 +110,24 @@ static int FEdgeSharp_mathutils_get(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_FEdgeSharp *self = (BPy_FEdgeSharp *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
bmo->data[0] = p[0];
|
||||
bmo->data[1] = p[1];
|
||||
bmo->data[2] = p[2];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
bmo->data[0] = p[0];
|
||||
bmo->data[1] = p[1];
|
||||
bmo->data[2] = p[2];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
bmo->data[0] = p[0];
|
||||
bmo->data[1] = p[1];
|
||||
bmo->data[2] = p[2];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
bmo->data[0] = p[0];
|
||||
bmo->data[1] = p[1];
|
||||
bmo->data[2] = p[2];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -136,20 +136,20 @@ static int FEdgeSharp_mathutils_set(BaseMathObject *bmo, int subtype)
|
||||
{
|
||||
BPy_FEdgeSharp *self = (BPy_FEdgeSharp *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->fes->setNormalA(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->fes->setNormalB(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->fes->setNormalA(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(bmo->data[0], bmo->data[1], bmo->data[2]);
|
||||
self->fes->setNormalB(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -158,20 +158,20 @@ static int FEdgeSharp_mathutils_get_index(BaseMathObject *bmo, int subtype, int
|
||||
{
|
||||
BPy_FEdgeSharp *self = (BPy_FEdgeSharp *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
bmo->data[index] = p[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
bmo->data[index] = p[index];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
bmo->data[index] = p[index];
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
bmo->data[index] = p[index];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -180,22 +180,22 @@ static int FEdgeSharp_mathutils_set_index(BaseMathObject *bmo, int subtype, int
|
||||
{
|
||||
BPy_FEdgeSharp *self = (BPy_FEdgeSharp *)bmo->cb_user;
|
||||
switch (subtype) {
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
p[index] = bmo->data[index];
|
||||
self->fes->setNormalA(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
p[index] = bmo->data[index];
|
||||
self->fes->setNormalB(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_A:
|
||||
{
|
||||
Vec3r p(self->fes->normalA());
|
||||
p[index] = bmo->data[index];
|
||||
self->fes->setNormalA(p);
|
||||
}
|
||||
break;
|
||||
case MATHUTILS_SUBTYPE_NORMAL_B:
|
||||
{
|
||||
Vec3r p(self->fes->normalB());
|
||||
p[index] = bmo->data[index];
|
||||
self->fes->setNormalB(p);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -573,7 +573,8 @@ void FEdgeXDetector::ProcessSuggestiveContourFace(WXFace *iFace)
|
||||
real threshold = _meanKr;
|
||||
if (faceLayer->nPosDotP()!=numVertices) {
|
||||
if ((fabs(faceLayer->dotP(0)) < threshold) && (fabs(faceLayer->dotP(1)) < threshold) &&
|
||||
(fabs(faceLayer->dotP(2)) < threshold)) {
|
||||
(fabs(faceLayer->dotP(2)) < threshold))
|
||||
{
|
||||
faceLayer->ReplaceDotP(0, 0);
|
||||
faceLayer->ReplaceDotP(1, 0);
|
||||
faceLayer->ReplaceDotP(2, 0);
|
||||
|
||||
@@ -1660,7 +1660,7 @@ void ViewShape::SplitEdge(FEdge *fe, const vector<TVertex*>& iViewVertices, vect
|
||||
sv = sv2;
|
||||
}
|
||||
else {
|
||||
// if the shape is the same we can safely differ the two vertices using their ids:
|
||||
// if the shape is the same we can safely differ the two vertices using their ids:
|
||||
if (sv->getId() != fe->vertexA()->getId())
|
||||
sv = sv2;
|
||||
}
|
||||
|
||||
@@ -1947,7 +1947,8 @@ int ViewMapBuilder::ComputeRayCastingVisibility(FEdge *fe, Grid *iGrid, real eps
|
||||
int viewport[4];
|
||||
SilhouetteGeomEngine::retrieveViewport(viewport);
|
||||
if ((A.x() < viewport[0]) || (A.x() > viewport[2]) || (A.y() < viewport[1]) || (A.y() > viewport[3]) ||
|
||||
(B.x() < viewport[0]) || (B.x() > viewport[2]) || (B.y() < viewport[1]) || (B.y() > viewport[3])) {
|
||||
(B.x() < viewport[0]) || (B.x() > viewport[2]) || (B.y() < viewport[1]) || (B.y() > viewport[3]))
|
||||
{
|
||||
cerr << "Warning: point is out of the grid for fedge " << fe->getId() << endl;
|
||||
//return 0;
|
||||
}
|
||||
|
||||
@@ -961,8 +961,8 @@ static void rna_def_gpencil_options(BlenderRNA *brna)
|
||||
|
||||
/* Grease Pencil Drawing - generated dynamically */
|
||||
static const EnumPropertyItem prop_dynamic_gpencil_type[] = {
|
||||
{ 1, "DRAW", 0, "Draw", "" },
|
||||
{ 0, NULL, 0, NULL, NULL }
|
||||
{1, "DRAW", 0, "Draw", ""},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
srna = RNA_def_struct(brna, "BrushGpencilSettings", NULL);
|
||||
|
||||
@@ -283,8 +283,8 @@ static void bevel_fix_normal_shading_continuity(BevelModifierData *bmd, BMesh *b
|
||||
if (f_b)
|
||||
has_f_b = BLI_ghash_haskey(faceHash, f_b);
|
||||
if (has_f_a ^ has_f_b) {
|
||||
/* If one of both faces is present in faceHash then we are at a border
|
||||
* between new vmesh created and reconstructed face */
|
||||
/* If one of both faces is present in faceHash then we are at a border
|
||||
* between new vmesh created and reconstructed face */
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
BMVert *v = (i == 0) ? e->v1 : e->v2;
|
||||
@@ -316,8 +316,8 @@ static void bevel_fix_normal_shading_continuity(BevelModifierData *bmd, BMesh *b
|
||||
}
|
||||
}
|
||||
else if (has_f_a == true && has_f_b == true) {
|
||||
/* Else if both faces are present we assign clnor corresponding
|
||||
* to vert normal and face normal */
|
||||
/* Else if both faces are present we assign clnor corresponding
|
||||
* to vert normal and face normal */
|
||||
for (int i = 0; i < 2; i++) {
|
||||
BMVert *v = (i == 0) ? e->v1 : e->v2;
|
||||
BM_ITER_ELEM(l, &liter, v, BM_LOOPS_OF_VERT) {
|
||||
|
||||
@@ -590,7 +590,8 @@ bool RE_bake_pixels_populate_from_objects(
|
||||
/* cast ray */
|
||||
if (!cast_ray_highpoly(treeData, tri_low, tris_high,
|
||||
pixel_array_from, pixel_array_to, mat_low,
|
||||
highpoly, co, dir, i, tot_highpoly)) {
|
||||
highpoly, co, dir, i, tot_highpoly))
|
||||
{
|
||||
/* if it fails mask out the original pixel array */
|
||||
pixel_array_from[i].primitive_id = -1;
|
||||
}
|
||||
|
||||
@@ -882,7 +882,8 @@ bool RE_WriteRenderResult(ReportList *reports, RenderResult *rr, const char *fil
|
||||
/* Skip non-RGBA and Z passes if not using multi layer. */
|
||||
if (!multi_layer && !(STREQ(rp->name, RE_PASSNAME_COMBINED) ||
|
||||
STREQ(rp->name, "") ||
|
||||
(STREQ(rp->name, RE_PASSNAME_Z) && write_z))) {
|
||||
(STREQ(rp->name, RE_PASSNAME_Z) && write_z)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1246,127 +1246,127 @@ void texture_rgb_blend(float in[3], const float tex[3], const float out[3], floa
|
||||
float facm;
|
||||
|
||||
switch (blendtype) {
|
||||
case MTEX_BLEND:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
case MTEX_BLEND:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
|
||||
in[0]= (fact*tex[0] + facm*out[0]);
|
||||
in[1]= (fact*tex[1] + facm*out[1]);
|
||||
in[2]= (fact*tex[2] + facm*out[2]);
|
||||
break;
|
||||
in[0]= (fact*tex[0] + facm*out[0]);
|
||||
in[1]= (fact*tex[1] + facm*out[1]);
|
||||
in[2]= (fact*tex[2] + facm*out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_MUL:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= (facm+fact*tex[0])*out[0];
|
||||
in[1]= (facm+fact*tex[1])*out[1];
|
||||
in[2]= (facm+fact*tex[2])*out[2];
|
||||
break;
|
||||
case MTEX_MUL:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= (facm+fact*tex[0])*out[0];
|
||||
in[1]= (facm+fact*tex[1])*out[1];
|
||||
in[2]= (facm+fact*tex[2])*out[2];
|
||||
break;
|
||||
|
||||
case MTEX_SCREEN:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= 1.0f - (facm+fact*(1.0f-tex[0])) * (1.0f-out[0]);
|
||||
in[1]= 1.0f - (facm+fact*(1.0f-tex[1])) * (1.0f-out[1]);
|
||||
in[2]= 1.0f - (facm+fact*(1.0f-tex[2])) * (1.0f-out[2]);
|
||||
break;
|
||||
case MTEX_SCREEN:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= 1.0f - (facm+fact*(1.0f-tex[0])) * (1.0f-out[0]);
|
||||
in[1]= 1.0f - (facm+fact*(1.0f-tex[1])) * (1.0f-out[1]);
|
||||
in[2]= 1.0f - (facm+fact*(1.0f-tex[2])) * (1.0f-out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_OVERLAY:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
case MTEX_OVERLAY:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
|
||||
if (out[0] < 0.5f)
|
||||
in[0] = out[0] * (facm + 2.0f*fact*tex[0]);
|
||||
else
|
||||
in[0] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[0])) * (1.0f - out[0]);
|
||||
if (out[1] < 0.5f)
|
||||
in[1] = out[1] * (facm + 2.0f*fact*tex[1]);
|
||||
else
|
||||
in[1] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[1])) * (1.0f - out[1]);
|
||||
if (out[2] < 0.5f)
|
||||
in[2] = out[2] * (facm + 2.0f*fact*tex[2]);
|
||||
else
|
||||
in[2] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[2])) * (1.0f - out[2]);
|
||||
break;
|
||||
if (out[0] < 0.5f)
|
||||
in[0] = out[0] * (facm + 2.0f*fact*tex[0]);
|
||||
else
|
||||
in[0] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[0])) * (1.0f - out[0]);
|
||||
if (out[1] < 0.5f)
|
||||
in[1] = out[1] * (facm + 2.0f*fact*tex[1]);
|
||||
else
|
||||
in[1] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[1])) * (1.0f - out[1]);
|
||||
if (out[2] < 0.5f)
|
||||
in[2] = out[2] * (facm + 2.0f*fact*tex[2]);
|
||||
else
|
||||
in[2] = 1.0f - (facm + 2.0f*fact*(1.0f - tex[2])) * (1.0f - out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_SUB:
|
||||
fact= -fact;
|
||||
ATTR_FALLTHROUGH;
|
||||
case MTEX_ADD:
|
||||
fact*= facg;
|
||||
in[0]= (fact*tex[0] + out[0]);
|
||||
in[1]= (fact*tex[1] + out[1]);
|
||||
in[2]= (fact*tex[2] + out[2]);
|
||||
break;
|
||||
case MTEX_SUB:
|
||||
fact= -fact;
|
||||
ATTR_FALLTHROUGH;
|
||||
case MTEX_ADD:
|
||||
fact*= facg;
|
||||
in[0]= (fact*tex[0] + out[0]);
|
||||
in[1]= (fact*tex[1] + out[1]);
|
||||
in[2]= (fact*tex[2] + out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_DIV:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
case MTEX_DIV:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
|
||||
if (tex[0]!=0.0f)
|
||||
in[0]= facm*out[0] + fact*out[0]/tex[0];
|
||||
if (tex[1]!=0.0f)
|
||||
in[1]= facm*out[1] + fact*out[1]/tex[1];
|
||||
if (tex[2]!=0.0f)
|
||||
in[2]= facm*out[2] + fact*out[2]/tex[2];
|
||||
if (tex[0]!=0.0f)
|
||||
in[0]= facm*out[0] + fact*out[0]/tex[0];
|
||||
if (tex[1]!=0.0f)
|
||||
in[1]= facm*out[1] + fact*out[1]/tex[1];
|
||||
if (tex[2]!=0.0f)
|
||||
in[2]= facm*out[2] + fact*out[2]/tex[2];
|
||||
|
||||
break;
|
||||
break;
|
||||
|
||||
case MTEX_DIFF:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= facm*out[0] + fact*fabsf(tex[0]-out[0]);
|
||||
in[1]= facm*out[1] + fact*fabsf(tex[1]-out[1]);
|
||||
in[2]= facm*out[2] + fact*fabsf(tex[2]-out[2]);
|
||||
break;
|
||||
case MTEX_DIFF:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
in[0]= facm*out[0] + fact*fabsf(tex[0]-out[0]);
|
||||
in[1]= facm*out[1] + fact*fabsf(tex[1]-out[1]);
|
||||
in[2]= facm*out[2] + fact*fabsf(tex[2]-out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_DARK:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
case MTEX_DARK:
|
||||
fact*= facg;
|
||||
facm= 1.0f-fact;
|
||||
|
||||
in[0] = min_ff(out[0], tex[0])*fact + out[0]*facm;
|
||||
in[1] = min_ff(out[1], tex[1])*fact + out[1]*facm;
|
||||
in[2] = min_ff(out[2], tex[2])*fact + out[2]*facm;
|
||||
break;
|
||||
in[0] = min_ff(out[0], tex[0])*fact + out[0]*facm;
|
||||
in[1] = min_ff(out[1], tex[1])*fact + out[1]*facm;
|
||||
in[2] = min_ff(out[2], tex[2])*fact + out[2]*facm;
|
||||
break;
|
||||
|
||||
case MTEX_LIGHT:
|
||||
fact*= facg;
|
||||
case MTEX_LIGHT:
|
||||
fact*= facg;
|
||||
|
||||
in[0] = max_ff(fact * tex[0], out[0]);
|
||||
in[1] = max_ff(fact * tex[1], out[1]);
|
||||
in[2] = max_ff(fact * tex[2], out[2]);
|
||||
break;
|
||||
in[0] = max_ff(fact * tex[0], out[0]);
|
||||
in[1] = max_ff(fact * tex[1], out[1]);
|
||||
in[2] = max_ff(fact * tex[2], out[2]);
|
||||
break;
|
||||
|
||||
case MTEX_BLEND_HUE:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_HUE, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_SAT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_SAT, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_VAL:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_VAL, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_COLOR:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_COLOR, in, fact, tex);
|
||||
break;
|
||||
case MTEX_SOFT_LIGHT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_SOFT, in, fact, tex);
|
||||
break;
|
||||
case MTEX_LIN_LIGHT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_LINEAR, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_HUE:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_HUE, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_SAT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_SAT, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_VAL:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_VAL, in, fact, tex);
|
||||
break;
|
||||
case MTEX_BLEND_COLOR:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_COLOR, in, fact, tex);
|
||||
break;
|
||||
case MTEX_SOFT_LIGHT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_SOFT, in, fact, tex);
|
||||
break;
|
||||
case MTEX_LIN_LIGHT:
|
||||
fact*= facg;
|
||||
copy_v3_v3(in, out);
|
||||
ramp_blend(MA_RAMP_LINEAR, in, fact, tex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1382,64 +1382,64 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen
|
||||
if (flip) SWAP(float, fact, facm);
|
||||
|
||||
switch (blendtype) {
|
||||
case MTEX_BLEND:
|
||||
in= fact*tex + facm*out;
|
||||
break;
|
||||
case MTEX_BLEND:
|
||||
in= fact*tex + facm*out;
|
||||
break;
|
||||
|
||||
case MTEX_MUL:
|
||||
facm= 1.0f-facg;
|
||||
in= (facm+fact*tex)*out;
|
||||
break;
|
||||
case MTEX_MUL:
|
||||
facm= 1.0f-facg;
|
||||
in= (facm+fact*tex)*out;
|
||||
break;
|
||||
|
||||
case MTEX_SCREEN:
|
||||
facm= 1.0f-facg;
|
||||
in= 1.0f-(facm+fact*(1.0f-tex))*(1.0f-out);
|
||||
break;
|
||||
case MTEX_SCREEN:
|
||||
facm= 1.0f-facg;
|
||||
in= 1.0f-(facm+fact*(1.0f-tex))*(1.0f-out);
|
||||
break;
|
||||
|
||||
case MTEX_OVERLAY:
|
||||
facm= 1.0f-facg;
|
||||
if (out < 0.5f)
|
||||
in = out * (facm + 2.0f*fact*tex);
|
||||
else
|
||||
in = 1.0f - (facm + 2.0f*fact*(1.0f - tex)) * (1.0f - out);
|
||||
break;
|
||||
case MTEX_OVERLAY:
|
||||
facm= 1.0f-facg;
|
||||
if (out < 0.5f)
|
||||
in = out * (facm + 2.0f*fact*tex);
|
||||
else
|
||||
in = 1.0f - (facm + 2.0f*fact*(1.0f - tex)) * (1.0f - out);
|
||||
break;
|
||||
|
||||
case MTEX_SUB:
|
||||
fact= -fact;
|
||||
ATTR_FALLTHROUGH;
|
||||
case MTEX_ADD:
|
||||
in= fact*tex + out;
|
||||
break;
|
||||
case MTEX_SUB:
|
||||
fact= -fact;
|
||||
ATTR_FALLTHROUGH;
|
||||
case MTEX_ADD:
|
||||
in= fact*tex + out;
|
||||
break;
|
||||
|
||||
case MTEX_DIV:
|
||||
if (tex!=0.0f)
|
||||
in= facm*out + fact*out/tex;
|
||||
break;
|
||||
case MTEX_DIV:
|
||||
if (tex!=0.0f)
|
||||
in= facm*out + fact*out/tex;
|
||||
break;
|
||||
|
||||
case MTEX_DIFF:
|
||||
in= facm*out + fact*fabsf(tex-out);
|
||||
break;
|
||||
case MTEX_DIFF:
|
||||
in= facm*out + fact*fabsf(tex-out);
|
||||
break;
|
||||
|
||||
case MTEX_DARK:
|
||||
in = min_ff(out, tex)*fact + out*facm;
|
||||
break;
|
||||
case MTEX_DARK:
|
||||
in = min_ff(out, tex)*fact + out*facm;
|
||||
break;
|
||||
|
||||
case MTEX_LIGHT:
|
||||
col= fact*tex;
|
||||
if (col > out) in= col; else in= out;
|
||||
break;
|
||||
case MTEX_LIGHT:
|
||||
col= fact*tex;
|
||||
if (col > out) in= col; else in= out;
|
||||
break;
|
||||
|
||||
case MTEX_SOFT_LIGHT:
|
||||
scf=1.0f - (1.0f - tex) * (1.0f - out);
|
||||
in= facm*out + fact * ((1.0f - out) * tex * out) + (out * scf);
|
||||
break;
|
||||
case MTEX_SOFT_LIGHT:
|
||||
scf=1.0f - (1.0f - tex) * (1.0f - out);
|
||||
in= facm*out + fact * ((1.0f - out) * tex * out) + (out * scf);
|
||||
break;
|
||||
|
||||
case MTEX_LIN_LIGHT:
|
||||
if (tex > 0.5f)
|
||||
in = out + fact*(2.0f*(tex - 0.5f));
|
||||
else
|
||||
in = out + fact*(2.0f*tex - 1.0f);
|
||||
break;
|
||||
case MTEX_LIN_LIGHT:
|
||||
if (tex > 0.5f)
|
||||
in = out + fact*(2.0f*(tex - 0.5f));
|
||||
else
|
||||
in = out + fact*(2.0f*tex - 1.0f);
|
||||
break;
|
||||
}
|
||||
|
||||
return in;
|
||||
|
||||
Reference in New Issue
Block a user