本文整理汇总了C++中GET_INT_FROM_POINTER函数的典型用法代码示例。如果您正苦于以下问题:C++ GET_INT_FROM_POINTER函数的具体用法?C++ GET_INT_FROM_POINTER怎么用?C++ GET_INT_FROM_POINTER使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GET_INT_FROM_POINTER函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: fmod_envelope_deletepoint_cb
// TODO: should we have a separate file for things like this?
static void fmod_envelope_deletepoint_cb(bContext *UNUSED(C), void *fcm_dv, void *ind_v)
{
FMod_Envelope *env = (FMod_Envelope *)fcm_dv;
FCM_EnvelopeData *fedn;
int index = GET_INT_FROM_POINTER(ind_v);
/* check that no data exists for the current frame... */
if (env->totvert > 1) {
/* allocate a new smaller array */
fedn = MEM_callocN(sizeof(FCM_EnvelopeData) * (env->totvert - 1), "FCM_EnvelopeData");
memcpy(fedn, env->data, sizeof(FCM_EnvelopeData) * (index));
memcpy(fedn + index, env->data + (index + 1), sizeof(FCM_EnvelopeData) * ((env->totvert - index) - 1));
/* free old array, and set the new */
MEM_freeN(env->data);
env->data = fedn;
env->totvert--;
}
else {
/* just free array, since the only vert was deleted */
if (env->data) {
MEM_freeN(env->data);
env->data = NULL;
}
env->totvert = 0;
}
}
开发者ID:Eibriel,项目名称:kiriblender,代码行数:29,代码来源:fmodifier_ui.c
示例2: Color_channel_hsv_set
static int Color_channel_hsv_set(ColorObject *self, PyObject *value, void *type)
{
float hsv[3];
int i = GET_INT_FROM_POINTER(type);
float f = PyFloat_AsDouble(value);
if (f == -1 && PyErr_Occurred()) {
PyErr_SetString(PyExc_TypeError,
"color.h/s/v = value: "
"assigned value not a number");
return -1;
}
if (BaseMath_ReadCallback(self) == -1)
return -1;
rgb_to_hsv_v(self->col, hsv);
CLAMP(f, 0.0f, 1.0f);
hsv[i] = f;
hsv_to_rgb_v(hsv, self->col);
if (BaseMath_WriteCallback(self) == -1)
return -1;
return 0;
}
开发者ID:SuriyaaKudoIsc,项目名称:blender-git,代码行数:26,代码来源:mathutils_Color.c
示例3: BPy_BMLayerCollection_CreatePyObject
static PyObject *bpy_bmlayeraccess_collection_get(BPy_BMLayerAccess *self, void *flag)
{
const int type = (int)GET_INT_FROM_POINTER(flag);
BPY_BM_CHECK_OBJ(self);
return BPy_BMLayerCollection_CreatePyObject(self->bm, self->htype, type);
}
开发者ID:wchargin,项目名称:blender,代码行数:8,代码来源:bmesh_py_types_customdata.c
示例4: BM_elem_cb_check_hflag_ex
bool BM_elem_cb_check_hflag_ex(BMElem *ele, void *user_data)
{
const uint hflag_pair = GET_INT_FROM_POINTER(user_data);
const char hflag_p = (hflag_pair & 0xff);
const char hflag_n = (hflag_pair >> 8);
return ((BM_elem_flag_test(ele, hflag_p) != 0) &&
(BM_elem_flag_test(ele, hflag_n) == 0));
}
开发者ID:mgschwan,项目名称:blensor,代码行数:9,代码来源:bmesh_callback_generic.c
示例5: node_add_menu
static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
SpaceNode *snode = CTX_wm_space_node(C);
bNodeTree *ntree;
int nodeclass = GET_INT_FROM_POINTER(arg_nodeclass);
int event, compatibility = 0;
ntree = snode->nodetree;
if (!ntree) {
uiItemS(layout);
return;
}
if (ntree->type == NTREE_SHADER) {
if (BKE_scene_use_new_shading_nodes(scene))
compatibility = NODE_NEW_SHADING;
else
compatibility = NODE_OLD_SHADING;
}
if (nodeclass == NODE_CLASS_GROUP) {
bNodeTree *ngroup;
uiLayoutSetFunc(layout, do_node_add_group, NULL);
/* XXX hack: negative numbers used for empty group types */
if (node_tree_has_type(ntree->type, NODE_GROUP))
uiItemV(layout, IFACE_("New Group"), 0, -NODE_GROUP);
uiItemS(layout);
for (ngroup = bmain->nodetree.first, event = 0; ngroup; ngroup = ngroup->id.next, ++event) {
/* only use group trees */
if (ngroup->type == ntree->type && ngroup->nodetype == NODE_GROUP) {
uiItemV(layout, ngroup->id.name + 2, 0, event);
}
}
}
else {
bNodeType *ntype;
uiLayoutSetFunc(layout, do_node_add_static, NULL);
for (ntype = ntreeGetType(ntree->type)->node_types.first; ntype; ntype = ntype->next) {
if (ntype->nclass == nodeclass && ntype->name) {
if (!compatibility || (ntype->compatibility & compatibility)) {
uiItemV(layout, IFACE_(ntype->name), 0, ntype->type);
}
}
}
}
}
开发者ID:danielmarg,项目名称:blender-main,代码行数:54,代码来源:node_header.c
示例6: GET_INT_FROM_POINTER
static PyObject *Color_channel_hsv_get(ColorObject *self, void *type)
{
float hsv[3];
int i = GET_INT_FROM_POINTER(type);
if (BaseMath_ReadCallback(self) == -1)
return NULL;
rgb_to_hsv(self->col[0], self->col[1], self->col[2], &(hsv[0]), &(hsv[1]), &(hsv[2]));
return PyFloat_FromDouble(hsv[i]);
}
开发者ID:SuriyaaKudoIsc,项目名称:blender-git,代码行数:12,代码来源:mathutils_Color.c
示例7: codegen_set_texid
/* assign only one texid per buffer to avoid sampling the same texture twice */
static void codegen_set_texid(GHash *bindhash, GPUInput *input, int *texid, void *key)
{
if (BLI_ghash_haskey(bindhash, key)) {
/* Reuse existing texid */
input->texid = GET_INT_FROM_POINTER(BLI_ghash_lookup(bindhash, key));
}
else {
/* Allocate new texid */
input->texid = *texid;
(*texid)++;
input->bindtex = true;
BLI_ghash_insert(bindhash, key, SET_INT_IN_POINTER(input->texid));
}
}
开发者ID:mcgrathd,项目名称:blender,代码行数:15,代码来源:gpu_codegen.c
示例8: node_add_menu
static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass)
{
Main *bmain= CTX_data_main(C);
SpaceNode *snode= CTX_wm_space_node(C);
bNodeTree *ntree;
int nodeclass= GET_INT_FROM_POINTER(arg_nodeclass);
int event;
ntree = snode->nodetree;
if(!ntree) {
uiItemS(layout);
return;
}
if (nodeclass==NODE_CLASS_GROUP) {
bNodeTree *ngroup;
uiLayoutSetFunc(layout, do_node_add_group, NULL);
/* XXX hack: negative numbers used for empty group types */
if (node_tree_has_type(ntree->type, NODE_GROUP))
uiItemV(layout, "New Group", 0, -NODE_GROUP);
if (node_tree_has_type(ntree->type, NODE_FORLOOP))
uiItemV(layout, "New For Loop", 0, -NODE_FORLOOP);
if (node_tree_has_type(ntree->type, NODE_WHILELOOP))
uiItemV(layout, "New While Loop", 0, -NODE_WHILELOOP);
uiItemS(layout);
for(ngroup=bmain->nodetree.first, event=0; ngroup; ngroup= ngroup->id.next, ++event) {
/* only use group trees */
if (ngroup->type==ntree->type && ELEM3(ngroup->nodetype, NODE_GROUP, NODE_FORLOOP, NODE_WHILELOOP)) {
uiItemV(layout, ngroup->id.name+2, 0, event);
}
}
}
else if (nodeclass==NODE_DYNAMIC) {
/* disabled */
}
else {
bNodeType *ntype;
uiLayoutSetFunc(layout, do_node_add_static, NULL);
for (ntype=ntreeGetType(ntree->type)->node_types.first; ntype; ntype=ntype->next) {
if(ntype->nclass==nodeclass && ntype->name)
uiItemV(layout, ntype->name, 0, ntype->type);
}
}
}
开发者ID:xinkang,项目名称:blendocv,代码行数:50,代码来源:node_header.c
示例9: bm_log_verts_unmake
static void bm_log_verts_unmake(BMesh *bm, BMLog *log, GHash *verts)
{
GHashIterator gh_iter;
GHASH_ITER (gh_iter, verts) {
void *key = BLI_ghashIterator_getKey(&gh_iter);
BMLogVert *lv = BLI_ghashIterator_getValue(&gh_iter);
unsigned int id = GET_INT_FROM_POINTER(key);
BMVert *v = bm_log_vert_from_id(log, id);
/* Ensure the log has the final values of the vertex before
* deleting it */
bm_log_vert_bmvert_copy(bm, lv, v);
BM_vert_kill(bm, v);
}
开发者ID:danielmarg,项目名称:blender-main,代码行数:15,代码来源:bmesh_log.c
示例10: bpy_bmvertskin_flag_set
static int bpy_bmvertskin_flag_set(BPy_BMVertSkin *self, PyObject *value, void *flag_p)
{
const int flag = GET_INT_FROM_POINTER(flag_p);
switch (PyC_Long_AsBool(value)) {
case true:
self->data->flag |= flag;
return 0;
case false:
self->data->flag &= ~flag;
return 0;
default:
/* error is set */
return -1;
}
}
开发者ID:wchargin,项目名称:blender,代码行数:16,代码来源:bmesh_py_types_meshdata.c
示例11: bpy_bmvertskin_flag_set
static int bpy_bmvertskin_flag_set(BPy_BMVertSkin *self, PyObject *value, void *flag_p)
{
const int flag = GET_INT_FROM_POINTER(flag_p);
switch (PyLong_AsLong(value)) {
case true:
self->data->flag |= flag;
return 0;
case false:
self->data->flag &= ~flag;
return 0;
default:
PyErr_SetString(PyExc_TypeError,
"expected a boolean type 0/1");
return -1;
}
}
开发者ID:Andrewson3D,项目名称:blender-for-vray,代码行数:17,代码来源:bmesh_py_types_meshdata.c
示例12: bpy_app_generic_callback
/* the actual callback - not necessarily called from py */
void bpy_app_generic_callback(struct Main *UNUSED(main), struct ID *id, void *arg)
{
PyObject *cb_list = py_cb_array[GET_INT_FROM_POINTER(arg)];
if (PyList_GET_SIZE(cb_list) > 0) {
PyGILState_STATE gilstate = PyGILState_Ensure();
PyObject *args = PyTuple_New(1); /* save python creating each call */
PyObject *func;
PyObject *ret;
Py_ssize_t pos;
/* setup arguments */
if (id) {
PointerRNA id_ptr;
RNA_id_pointer_create(id, &id_ptr);
PyTuple_SET_ITEM(args, 0, pyrna_struct_CreatePyObject(&id_ptr));
}
else {
PyTuple_SET_ITEM(args, 0, Py_INCREF_RET(Py_None));
}
/* Iterate the list and run the callbacks
* note: don't store the list size since the scripts may remove themselves */
for (pos = 0; pos < PyList_GET_SIZE(cb_list); pos++) {
func = PyList_GET_ITEM(cb_list, pos);
ret = PyObject_Call(func, args, NULL);
if (ret == NULL) {
/* Don't set last system variables because they might cause some
* dangling pointers to external render engines (when exception
* happens during rendering) which will break logic of render pipeline
* which expects to be the only user of render engine when rendering
* is finished.
*/
PyErr_PrintEx(0);
PyErr_Clear();
}
else {
Py_DECREF(ret);
}
}
Py_DECREF(args);
PyGILState_Release(gilstate);
}
}
开发者ID:diekev,项目名称:blender,代码行数:47,代码来源:bpy_app_handlers.c
示例13: setMPolyMaterial
static void setMPolyMaterial(ExportMeshData *export_data,
MPoly *mpoly,
int which_orig_mesh)
{
Object *orig_object;
GHash *material_hash;
Material *orig_mat;
if (which_orig_mesh == CARVE_MESH_LEFT) {
/* No need to change materian index for faces from left operand */
return;
}
material_hash = export_data->material_hash;
orig_object = which_object(export_data, which_orig_mesh);
/* Set material, based on lookup in hash table. */
orig_mat = give_current_material(orig_object, mpoly->mat_nr + 1);
if (orig_mat) {
/* For faces from right operand check if there's requested material
* in the left operand. And if it is, use index of that material,
* otherwise fallback to first material (material with index=0).
*/
if (!BLI_ghash_haskey(material_hash, orig_mat)) {
int a, mat_nr;
mat_nr = 0;
for (a = 0; a < export_data->ob_left->totcol; a++) {
if (give_current_material(export_data->ob_left, a + 1) == orig_mat) {
mat_nr = a;
break;
}
}
BLI_ghash_insert(material_hash, orig_mat, SET_INT_IN_POINTER(mat_nr));
mpoly->mat_nr = mat_nr;
}
else
mpoly->mat_nr = GET_INT_FROM_POINTER(BLI_ghash_lookup(material_hash, orig_mat));
}
else {
mpoly->mat_nr = 0;
}
}
开发者ID:Andrewson3D,项目名称:blender-for-vray,代码行数:46,代码来源:MOD_boolean_util.c
示例14: ui_node_link
static void ui_node_link(bContext *C, void *arg_p, void *event_p)
{
NodeLinkArg *arg = (NodeLinkArg *)arg_p;
Main *bmain = arg->bmain;
bNode *node_to = arg->node;
bNodeSocket *sock_to = arg->sock;
bNodeTree *ntree = arg->ntree;
int event = GET_INT_FROM_POINTER(event_p);
if (event == UI_NODE_LINK_DISCONNECT)
node_socket_disconnect(bmain, ntree, node_to, sock_to);
else if (event == UI_NODE_LINK_REMOVE)
node_socket_remove(bmain, ntree, node_to, sock_to);
else
node_socket_add_replace(C, ntree, node_to, sock_to, arg->node_type->type, &arg->item);
ED_undo_push(C, "Node input modify");
}
开发者ID:JasonWilkins,项目名称:blender-viewport_fx,代码行数:18,代码来源:node_templates.c
示例15: DNA_struct_find_nr_ex
/**
* Returns the index of the struct info for the struct with the specified name.
*/
int DNA_struct_find_nr_ex(const SDNA *sdna, const char *str, unsigned int *index_last)
{
const short *sp = NULL;
if (*index_last < sdna->nr_structs) {
sp = sdna->structs[*index_last];
if (strcmp(sdna->types[sp[0]], str) == 0) {
return *index_last;
}
}
#ifdef WITH_DNA_GHASH
{
void **index_p;
int a;
index_p = BLI_ghash_lookup_p(sdna->structs_map, str);
if (index_p) {
a = GET_INT_FROM_POINTER(*index_p);
*index_last = a;
}
else {
a = -1;
}
return a;
}
#else
{
int a;
for (a = 0; a < sdna->nr_structs; a++) {
sp = sdna->structs[a];
if (strcmp(sdna->types[sp[0]], str) == 0) {
*index_last = a;
return a;
}
}
}
return -1;
#endif
}
开发者ID:diekev,项目名称:blender,代码行数:47,代码来源:dna_genfile.c
示例16: GET_INT_FROM_POINTER
static PyObject *bpy_bmloopuv_flag_get(BPy_BMLoopUV *self, void *flag_p)
{
const int flag = GET_INT_FROM_POINTER(flag_p);
return PyBool_FromLong(self->data->flag & flag);
}
开发者ID:wchargin,项目名称:blender,代码行数:5,代码来源:bmesh_py_types_meshdata.c
示例17: BKE_scene_frame_get
static DerivedMesh *explodeMesh(ExplodeModifierData *emd,
ParticleSystemModifierData *psmd, Scene *scene, Object *ob,
DerivedMesh *to_explode)
{
DerivedMesh *explode, *dm = to_explode;
MFace *mf = NULL, *mface;
/* ParticleSettings *part=psmd->psys->part; */ /* UNUSED */
ParticleSimulationData sim = {NULL};
ParticleData *pa = NULL, *pars = psmd->psys->particles;
ParticleKey state, birth;
EdgeHash *vertpahash;
EdgeHashIterator *ehi;
float *vertco = NULL, imat[4][4];
float rot[4];
float cfra;
/* float timestep; */
const int *facepa = emd->facepa;
int totdup = 0, totvert = 0, totface = 0, totpart = 0, delface = 0;
int i, v, u;
unsigned int ed_v1, ed_v2, mindex = 0;
MTFace *mtface = NULL, *mtf;
totface = dm->getNumTessFaces(dm);
totvert = dm->getNumVerts(dm);
mface = dm->getTessFaceArray(dm);
totpart = psmd->psys->totpart;
sim.scene = scene;
sim.ob = ob;
sim.psys = psmd->psys;
sim.psmd = psmd;
/* timestep = psys_get_timestep(&sim); */
cfra = BKE_scene_frame_get(scene);
/* hash table for vertice <-> particle relations */
vertpahash = BLI_edgehash_new(__func__);
for (i = 0; i < totface; i++) {
if (facepa[i] != totpart) {
pa = pars + facepa[i];
if ((pa->alive == PARS_UNBORN && (emd->flag & eExplodeFlag_Unborn) == 0) ||
(pa->alive == PARS_ALIVE && (emd->flag & eExplodeFlag_Alive) == 0) ||
(pa->alive == PARS_DEAD && (emd->flag & eExplodeFlag_Dead) == 0))
{
delface++;
continue;
}
}
/* do mindex + totvert to ensure the vertex index to be the first
* with BLI_edgehashIterator_getKey */
if (facepa[i] == totpart || cfra < (pars + facepa[i])->time)
mindex = totvert + totpart;
else
mindex = totvert + facepa[i];
mf = &mface[i];
/* set face vertices to exist in particle group */
BLI_edgehash_reinsert(vertpahash, mf->v1, mindex, NULL);
BLI_edgehash_reinsert(vertpahash, mf->v2, mindex, NULL);
BLI_edgehash_reinsert(vertpahash, mf->v3, mindex, NULL);
if (mf->v4)
BLI_edgehash_reinsert(vertpahash, mf->v4, mindex, NULL);
}
/* make new vertice indexes & count total vertices after duplication */
ehi = BLI_edgehashIterator_new(vertpahash);
for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
BLI_edgehashIterator_setValue(ehi, SET_INT_IN_POINTER(totdup));
totdup++;
}
BLI_edgehashIterator_free(ehi);
/* the final duplicated vertices */
explode = CDDM_from_template_ex(dm, totdup, 0, totface - delface, 0, 0, CD_MASK_DERIVEDMESH | CD_MASK_FACECORNERS);
mtface = CustomData_get_layer_named(&explode->faceData, CD_MTFACE, emd->uvname);
/*dupvert = CDDM_get_verts(explode);*/
/* getting back to object space */
invert_m4_m4(imat, ob->obmat);
psmd->psys->lattice_deform_data = psys_create_lattice_deform_data(&sim);
/* duplicate & displace vertices */
ehi = BLI_edgehashIterator_new(vertpahash);
for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
MVert source;
MVert *dest;
/* get particle + vertex from hash */
BLI_edgehashIterator_getKey(ehi, &ed_v1, &ed_v2);
ed_v2 -= totvert;
v = GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
dm->getVert(dm, ed_v1, &source);
dest = CDDM_get_vert(explode, v);
//.........这里部分代码省略.........
开发者ID:flair2005,项目名称:mechanical-blender,代码行数:101,代码来源:MOD_explode.c
示例18: MEM_callocN
//.........这里部分代码省略.........
/* count new faces due to splitting */
for (i = 0, fs = facesplit; i < totface; i++, fs++)
totfsplit += add_faces[*fs];
splitdm = CDDM_from_template(dm, totesplit, 0, totface + totfsplit, 0, 0);
numlayer = CustomData_number_of_layers(&splitdm->faceData, CD_MTFACE);
/* copy new faces & verts (is it really this painful with custom data??) */
for (i = 0; i < totvert; i++) {
MVert source;
MVert *dest;
dm->getVert(dm, i, &source);
dest = CDDM_get_vert(splitdm, i);
DM_copy_vert_data(dm, splitdm, i, i, 1);
*dest = source;
}
/* override original facepa (original pointer is saved in caller function) */
/* BMESH_TODO, (totfsplit * 2) over allocation is used since the quads are
* later interpreted as tri's, for this to work right I think we probably
* have to stop using tessface - campbell */
facepa = MEM_callocN(sizeof(int) * (totface + (totfsplit * 2)), "explode_facepa");
//memcpy(facepa, emd->facepa, totface*sizeof(int));
emd->facepa = facepa;
/* create new verts */
ehi = BLI_edgehashIterator_new(edgehash);
for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
BLI_edgehashIterator_getKey(ehi, &ed_v1, &ed_v2);
esplit = GET_INT_FROM_POINTER(BLI_edgehashIterator_getValue(ehi));
mv = CDDM_get_vert(splitdm, ed_v2);
dupve = CDDM_get_vert(splitdm, esplit);
DM_copy_vert_data(splitdm, splitdm, ed_v2, esplit, 1);
*dupve = *mv;
mv = CDDM_get_vert(splitdm, ed_v1);
mid_v3_v3v3(dupve->co, dupve->co, mv->co);
}
BLI_edgehashIterator_free(ehi);
/* create new faces */
curdupface = 0; //=totface;
//curdupin=totesplit;
for (i = 0, fs = facesplit; i < totface; i++, fs++) {
mf = dm->getTessFaceData(dm, i, CD_MFACE);
switch (*fs) {
case 3:
case 10:
case 11:
case 15:
SET_VERTS(1, 2, 3, 4);
break;
case 5:
case 6:
case 7:
SET_VERTS(2, 3, 4, 1);
break;
case 9:
开发者ID:flair2005,项目名称:mechanical-blender,代码行数:67,代码来源:MOD_explode.c
示例19: edgecut_get
static int edgecut_get(EdgeHash *edgehash, unsigned int v1, unsigned int v2)
{
return GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, v1, v2));
}
开发者ID:flair2005,项目名称:mechanical-blender,代码行数:4,代码来源:MOD_explode.c
示例20: loop_sync
static void loop_sync(bNodeTree *ntree, int sync_in_out)
{
bNodeSocket *sock, *sync, *nsync, *mirror;
ListBase *sync_lb;
if (sync_in_out==SOCK_IN) {
sock = ntree->outputs.first;
sync = ntree->inputs.first;
sync_lb = &ntree->inputs;
}
else {
sock = ntree->inputs.first;
sync = ntree->outputs.first;
sync_lb = &ntree->outputs;
}
/* NB: the sock->storage pointer is used here directly to store the own_index int
* out the mirrored socket counterpart!
*/
while (sock) {
/* skip static and internal sockets on the sync side (preserves socket order!) */
while (sync && ((sync->flag & SOCK_INTERNAL) || !(sync->flag & SOCK_DYNAMIC)))
sync = sync->next;
if (sync && !(sync->flag & SOCK_INTERNAL) && (sync->flag & SOCK_DYNAMIC)) {
if (sock->storage==NULL) {
/* if mirror index is 0, the sockets is newly added and a new mirror must be created. */
mirror = node_group_expose_socket(ntree, sock, sync_in_out);
/* store the mirror index */
sock->storage = SET_INT_IN_POINTER(mirror->own_index);
mirror->storage = SET_INT_IN_POINTER(sock->own_index);
/* move mirror to the right place */
BLI_remlink(sync_lb, mirror);
if (sync)
BLI_insertlinkbefore(sync_lb, sync, mirror);
else
BLI_addtail(sync_lb, mirror);
}
else {
/* look up the mirror socket */
for (mirror=sync; mirror; mirror=mirror->next)
if (mirror->own_index == GET_INT_FROM_POINTER(sock->storage))
break;
/* make sure the name is the same (only for identification by user, no deeper meaning) */
BLI_strncpy(mirror->name, sock->name, sizeof(mirror->name));
/* fix the socket order if necessary */
if (mirror != sync) {
BLI_remlink(sync_lb, mirror);
BLI_insertlinkbefore(sync_lb, sync, mirror);
}
else
sync = sync->next;
}
}
sock = sock->next;
}
/* remaining sockets in sync_lb are leftovers from deleted sockets, remove them */
while (sync) {
nsync = sync->next;
if (!(sync->flag & SOCK_INTERNAL) && (sync->flag & SOCK_DYNAMIC))
node_group_remove_socket(ntree, sync, sync_in_out);
sync = nsync;
}
}
开发者ID:vanangamudi,项目名称:blender-main,代码行数:69,代码来源:node_common.c
注:本文中的GET_INT_FROM_POINTER函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论