text:
Continuous Looping animation - Differing rotational speeds
Just trying to do my first animation and am struggling to make it loop seamlessly. I think the differing rotational speeds of the 2 objects are the thing to overcome but I'm not sure how.  I basically want the earth to do one revolution to the teapot's 2 orbits around the earth.
Can anyone have a look at this  and advise me?
Thanks in advance.

+1 For uploading a .blend to the right website and just having 5 rep, I haven't seen that before

I try to do my best ;)

To go somewhat in other direction, can you explain  what and how you want objects to loop without the need to download a 30Mb file.  Basically if you want 1 revolution  to loop  in N frames, make the object have same transform in frame N + 1 as in frame 1.  For two objects having differing revs, If one object does a full revolution in 7 frames and another in 5, use the lowest common multiple of frames, (in this case) 35.

Without opening your .blend (it would be good if you could update your question will some images), how are you animating the rotation? Are you just using keyframing for the rotation? Have you tried using Generate modifier in the graph editor? Generate would let you define an actual rotation speed rather than having to do them 'by eye' and you could then easily use mutipliers with a common factor (such as 0.15 and 0.2) which would naturally give you seamlessness.

Sorry, screenshot added. I'm new to this so just eyeballed it in keyframes. Haven't used the Generator modifier before. I basically want the earth to do one revolution to the teapot's 2 revs.

It appears from screenshot there are drivers in the file. See here

Not really sure about drivers (I've read your link) I clicked ignore and everything still works ok.

Driver Based approach.

For the planet I have added a driver to its z rotation.
 pi * frame / 40

where frame is known to the driver namespace as the current frame. The rotation is 0 degrees at frame 0 and 360 degrees (2pi radians) at frame 80.
A satellite object and an orbit circle is added. A follow path constraint, with follow curve and fixed position.
The driver is added to the offset.
(frame / 40) % 1.0

At frame 0 and frame 40 will be at 0 and 1 offset (same position) respectively.  The % is python modulus, ie the remainder when divided by one.  Related
Ok so now have a planet that revolves once in 80 frames and a satellite that orbits every 40 frames.
To loop the animation, set 1 and 80 as start and end frames.

In order to get a fixed and repeated rotation you can use the f-curve 'Generate' modifier. This allows you to define an equation (that you can precisely tune for the required rotation) for the f-curve rather than basing on keyframes.

To achieve this, once you have added a single keyframe, open the Graph Editor and select the relevant channel (eg, Z-rotation). In the Modifiers panel, select Add Modifier and select 'Generator'.
Set the polinomial to '1' since we want a straight line. The generator defines an equation as y = c + mx where c is a constant and m the multiplication factor for the x value (effectively the 'frame' of the animation).
The rotation is measured in radians - so 2xPi radians is a full rotation.
In order to have your object to make a complete rotation in, say, 50 frames you should enter the 'x' multipler ("coefficient for polynomial") to 2*pi/50 (just type that into the field and press Enter - Blender will calculate it for you and show the result (0.126 in this case)).
Repeat for the other object but choose a suitable number of frames (so there's a common factor). For example, 50 frames for one object and 100 for the other will result in them both getting back to their start rotation after 100 frames.
For your situation with an object orbiting the planet you could setup similar to the following :

In the scene there is a Cube (planet), Suzanne (moon) and Empty (to act as the centre of the moon's orbit). Suzanne is a child of the Empty (select Suzanne, hold Shift, select Empty, press Ctrl+P and choose 'Object' - so rotating the empty will move Suzanne around the orbit.
Now select each object in turn (Cube, Suzanne, Empty) and add a keyframe on the Z-rotation.
Select the Cube, open the Graph Editor (as detailed above), add a Generator modifier and set the X coefficient to 2*pi/100 (rotate once per 100 frames).
Repeat for the Empty but set the coefficient to 2*pi/50 (rotate once per 50 frames).
Repeat for Suzanne to set the rotation of the 'moon'.

Ah, I think I may have worded my question incorrectly. When I say rotation I meant The Earth rotating and the Teapot orbiting around it.

@RossingtonSteele No worries - same principle applies, just a different centre of rotation. Simplest option to have it orbit the planet would be to add an Empty at the same location as the planet and 'parent' it to the teapot (so the teapot is a child of the Empty). Rotating the Empty will then result in the teapot orbiting the Empty and can be at a different rate to the planet. You can then independently rotate the teapot. Use the above technique for each of the rotations and you can keep them 'in step' so that they get back to their starts at the relevant frame for the looping.

@RossingtonSteele Updated answer to include setting up the orbit.

Not adding her fcurve will put Suzanne in  a fixed orbit  to avoid seeing "The dark side of the Monkey"

Alternative Driver-based Solution
I used this question as an exercise to familiarize myself with drivers. The solution turned out well enough and different enough from the others that I figured I'd post it. I couldn't say whether it has any particular advantage or disadvantage compared to the other driver answer; it's just what I came up with. :)
This is a driver-based solution built on Script Expressions that uses only the primary objects (planet + satellite, no empties or curves).
In preparation use keyframes to animate the "planet" object so it does one rotation around the Z-axis over the course of the animation.
The drivers all target the satellite (Suzanne) and are all based on the planet's rotation.  We need at least two: one for the satellite's X location and one for its Y location. If we want the satellite to have a synchronized orbit such that the same side always faces the planet then a third driver targets the satellite's Z rotation.
I created each driver by hovering over the appropriate field in the Object tab in the Properties window, entered Ctrl+D, and selected Manually Create Later (Single). (In 2.8x this will pop a dialog. Just dismiss it by moving mouse away.)

Next, open the Graph Editor (1) (in 2.8x choose Drivers rather than Graph Editor), select one of the drivers from the left panel
(2), open the Properties drawer (N) and click the Drivers tab
(3).

Create a variable (4) with these attributes (5):
Type: Transform Channel
Name: planetZRot
Object: Planet
Type: Z Rotation
Space: World

Now copy this variable to the other drivers using the "arrow & clipboard" buttons (6).
Configure each driver to have type Scripted Expression (7). The expressions for each of the drivers are as follows.

X Location: 0 + (cos(planetZRot * m)) * r
Y Location: 0 + (sin(planetZRot * m)) * r
Z Rotation: planetZRot * m

Here m is Srot / Prot, the ratio of the satellite's rotation to the planet's rotation and r is the radius of the orbit.
Result with m=2 and r=3...


text:
rigify, sticky situation
I used default horse rig and deleted the rest, when I generate the rig it only generates a plate with confusing circles on it, can't use them in pose mode, here is the blend file, please ignore the trashy mesh i dont intend to use textures on this model.
I would like to know how to make the generated rig work, like being able to open the goat's mouth and rotate its head with the generated rig. I'd prefer a generated rig rather than a bone structure as the bone structure can be quite counter productive when applying movements to the model.

update:
the bones of the matarig

the bones inside the generated rig's folder

EDIT: all the tutorials I've watched don't have this type of problems, if you know what it's called or which part of the rigging should I look into that would be great.
sticky mouth

Hi! Consider that this site is no regular forum rather a Q&A site so what's your question? Please read: https://blender.stackexchange.com/help/how-to-ask

@brockmann fixed.

Apply rotation and scale (Ctrl A) to the metarig before generating. After generating the rig, hide the metarig and parent your meshes to the rig itself (that with the "confusing circles"). https://docs.blender.org/manual/it/dev/addons/rigging/rigify/basics.html

@joshsanfelici hi, thanks for the answer, but the rig is not in place where I placed the bones when I generate matarig after I apply the transform, should I manually adjust them again or is there anything else I did wrong that caused this problem? I will add pictures to the first post.

you need to give it some corrections in Weight Paint mode

Apply location tot the metarig also.

thanks for the answer, I've fixed the previous problem, but new question appeared, when I rigged them correctly, some part of the upper lip and the lower lip sticked together when moving, what is this called? and how can I fix it? tyvm

Please use a title on the question that describes the issue, not just a vague notion.

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
material not displaying on fresh install of 2.91 since upgrade
Blender was working fine for me a few weeks ago, recently had to replace my ssd, reinstalled blender2.91, and i cant get any materials to display, not in shading, not in uv edit, not in layout/edit mode.
If i open up the default starter scene, select the cube, go to material menu select base colour change it, got to material preview/rendered view, i get a weird grey void where the object should be, if i render it renders as a transparent object amid a black background, same thing if i change the base colour to be an image texture.
Tried 2.90, a few of the 2.8 builds, same issue, checked for updates to my graphics card, there were none.
if i go in to texture paint mode, the image texture is visible, but only in solid viewport rendering
short video of issue here
https://www.youtube.com/watch?v=lFJONchZPfg&feature=youtu.be

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/


text:
Camera motion tracking: "Unable to reconstruct" due to "POINT BEHIND CAMERA 1"
I am doing a very simple camera motion tracking, and I almost always get the errors:
E1227 07:10:20.242158  6528 intersect.cc:159] POINT BEHIND CAMERA 1: 01.12694e+07 00000-502884 -2.22473e+07
E1227 07:10:20.244158  6528 intersect.cc:159] POINT BEHIND CAMERA 1: 01.12479e+07 -1.40083e+06 -1.93429e+07
E1227 07:10:20.246158  6528 intersect.cc:159] POINT BEHIND CAMERA 1: 016253.3 -19688.9 -87439.6
Unable to reconstruct position for track #2 'Track.002'
Unable to reconstruct position for track #3 'Track.003'
Unable to reconstruct position for track #4 'Track.004'

like this:

The video is simple; little movement and all the tracking points are visible from start to end. Only 8 points so far, I wanted to keep it simple to understand the errors above somehow.
First frame:

Half way:

Last frame:

The blue/red lines all look good to me; none loose track, they keep on point.
If I check the "Tripod" on the Solve tab, it works, but I get a huge error (Solve error: 11.62 px), which also is very odd to me.
If I now change the "Sensor width" to 16.000 and "Focal length" to 17.00 (which is what I think that the Huawei P30 has), then the error just disappears, but I still get a solve error of 13.79.

Changing "Sensor width" and "focal length" resolves this error? But why? Im not even sure that the numbers I entered are correct.

The linked answer does not answer my question or in any other way resolve it. I have looked at that specific question before I posted here, like I have many others.


text:
Normal Map weirdness!
Newbie Blender artist here and I'm having some issue with a Normal Map. The Map seems smooth but when rendered it seems to show some weird topology rather than smooth surfaces. If anyone could help me with this I would be eternally grateful.

Blender file - https://we.tl/t-Of5E9bSkW2
Thanks in advance.

Can you post the viewport, render properties and node setup's screenshot for better understanding of your problem?

Could you round the weird topology that you are referring to. Do you mean the top right bump? Also please supply the blend file. I'll look into it.

.blend file added to question. It's not just the bump in the top right, if you zoom in you can see lots of lines like on a map. This should be smooth.

That's probably because of image compression happening after wrongly used node setup. Normal Map node should be plugged into blue Normal input sockets of shaders (Diffuse, Glossy, Principled etc), and image texture should be set to Non-Color.

@Mr Zak - Thanks that was the issue! Thanks to everyone else too.


text:
Simple Emboss - Add vertices to a face?
I want to add a simple 'pillow' emboss shape to a face. I want the shape to be square with rounded edges and lift off the face a couple of mm. It needs to be part of the face with seamless joins as if it were punched out of metal. I've attached my efforts so far but as you can see the subsurf is doing some funny things to the straight lines. Is there an easy way to add a square face within a face that I can then extrude?

do you have a picture or a drawing of what you want?

Added image of what I'm currently getting. The subsurface is making the emboss slightly circular. I would prefer it to follow the straight lines of the logo. It still needs to be smooth though.

I hope I understand what you need.
If you are doing square indentations you will usually need to use a grid topology to not get artefacts with the subdivision modifier. This will keep the edge flow align to the edges instead of creating a circular edge flow. Add at least one extra support edge to get flat surfaces around the indentation.
(You should also use smooth faces so you wont get small facetts.)

Thanks, have you just added edge loops to achieve that or subdivide?

Do you have the .blend you used to create the above?

I added new edge loops and adjusted them with the edge slide tool (GG) so that the UV automatically gets adjusted. I can upload a file when I get home to night.

It's ok, I've worked it out. Edge Slide was the issue. Thankyou for your help!


text:
How to make a shiny panel on a matt texture
I'm wondering how I can add a shiny panel to the back of this object. I have a mask uploaded but am unsure of how to link the nodes up without undoing the other finishes on the material.
Any help much appreciated
Blend here.
Thanks guys.

is your new mask called "High Voltage Matt Laquer-01.png", if so, you have to plug it in the Factor of a Mix Shader that will mix the rest of your image and your shiny node (probably a glossy one).

It is indeed. Do you think you could edit the nodes, I've tried that but to no avail. Sorry for the noob questions...

The problem is, I'm not sure exactly what area you need to be shiny, so I'm not sure I can tell if your mask is correct. If you mix 2 nodes in a mix shader, let say one Diffuse and on Glossy, the black and white picture that you'll plug in the Factor of the mix will determine what part will be displayed as diffuse, and what other part will be displayed as shiny. If your picture has grey area you will have some parts with mix of diffuse and glossy. If the result is the inverse of what you want, just inverse the plugging of Diffuse and Glossy into the mix.

Its the areas in the (now attached) screenshot. I think I grasp the principle but I can't seem to get it to work without affecting the silvery flash on the front created by the principled node.

if it doesn't work it's because your nodes (and mask) organization is not good, hard to say where it is not as I don't know what you want

mmm I thought you were using a black and white mask but it's actually a alpha mask, so you should use the Image Texture Alpha output, but in that case your grey areas have no meaning

Your node organization will depend on the result you want. For example where exactly do you want to see shininess?
Anyway, as your mask has a big rectangle, let's imagine that you simply want to display a silver rectangle. As this rectangle is transparent and your mask image seems to play with transparency, and not black & white, it is made to use the Alpha output of the Image Texture node.
By the way, there are also grey areas on your mask, grey areas won't be useful if you play with the alpha channel, it will only be useful if you play with black & white, and therefore if you use the Color output of the Image Texture, and not the Alpha. In that case, if you want to use a B&W mask, your rectangle needs to be white.
So let's come back to our case: Just plug the Alpha output of your Image Texture node to the Factor of a Mix Shader. This node will mix your previous nodes organization and a new one, a Glossy, and a glossy rectangle will appear.


text:
Material Offset / Rim not working when Backfacing Geometry node applied
I have an object (packaging box) which has a different material on each side with a solidify modifier to give the box some thickness. Normally it's easy to add a colour to the rim using material offset/rim options but it doesn't seem to work with the Backfacing geometry node applied to the material (which allows it to be double sided). Is there a way to give the rim a simple white colour?

Could you provide your Blender file using https://blend-exchange.com/ ? And add pictures of what you have and what you are expecting (or as default, what is wrong in the first picture).

Hard to tell without screenshots, but I'm not sure what you are doing with the Backfacing there... if you give the box a Solidify modifier, the backfaces are inside the "thickness", it only makes if your face has no thickness or when you flip faces to turn the inside out

Unfortunately you do not show your Materials tab where we could see how your materials are sorted etc., so here is a general overview how this works, first of all the backface material then the materials for the Solidify modifier.
Let's say I have this material where the frontface or outside is blue, the backface or inside is red:

If you now add a Solidify modifier, it generates thickness, but with the default setting Rim > Fill enabled, this is a closed mesh. All face normals are pointing outward, so you only see blue. Of course there is the Normals > Flip option, but this will flip all faces, not just the ones generated by the modifier and everything would be red. So this way you cannot show a different backface material.

If you disable the rim fill, you can see the red color inside on the backfaces:

What you show in your screenshot though is that you have enabled Only Rim, which would let you see the backface color, however it no longer looks as if the object has thickness to it, it is just like an infinitely thin sheet folded up.

So the correct way to set this up would be to use different materials for different parts of the solidified object. To do that, you can use the Materials settings in the modifier. It seems like you already tried that since the Rim value is 1 instead of the default 0.
Important to know now is that this is an offset, not the material slot index. It says Material Offset, which affects the newly generated faces, but the Rim value is also an offset even though it is not written there.
With this you can have the base material for the original faces, another material for the generated faces and a third material for the rim by setting the Material Offset for example to 1, and the Rim to 2. This way, the generated faces could get a material which you would otherwise have used for the Backfacing:

And here comes the important offset part. If I had some more materials and I gave the object different materials on different faces like this (modifier disabled and I have removed the backface red)

then the result of the Solidify modifier would look like that:

In this case, I have added some more materials to the object. Previously, the original faces were all blue - the material in slot 0. The generated faces were the material in slot 1 and the rim material slot 2.
But now some original faces are blue (0), one is purple (1) and one is white (2). Therefore the generated faces are purple (0 + 1 = 1), white (1 + 1 = 2) and green (2 + 1 = 3). The rim is white (0 + 2 = 2), green (1 + 2 = 3) and yellow (2 + 2 = 4). So the values you set in the modifier are not absolute slot indices, but get added (or subtracted if you enter negative values) to the original indices.
Depending on what you want to this can be helpful to change the rim and generated faces according to whatever color their original faces had. But now comes an issue: what can you do now when you want to have many different materials on the original faces, but always the same for the rim and generated faces.
So for example, if the original faces are blue, green, yellow and red but the generated faces should always be purple and the rim always white. Then the tedious method with offset values 1 and 2 could be to have multiple copies of purple and white to place the materials in this order: blue, purple, white, green, purple, white, yellow, purple, white, red, purple, white.
This is of course not very efficient and becomes very annoying if you often want to change colors. But the good news is: no matter how high the values are which you add or subtract as offset, every negative result will be clamped to the minimum of 0, and every high positive result will be clamped to the maximum slot index existing on the object.
Which means, you could for example set the Material Offset to -99, and the Rim offset to +99. With for example six materials this would mean, the Material Offset -99 will always become slot 0, and the Rim +99 will be 5, because with six material slots the maximum index is 5.
The only thing that is left then is to make sure the material for the generated faces is always in the first slot and the material for the rim is always in the last slot - then it does not matter how many materials you have inbetween to put on the original faces. Unless you have more than 99 materials or so, but this can easily be conquered by changing the offsets to -999 and +999 for example.


text:
Grease Pencil not drawing on a flat plane
I am animating over a mesh plane background with an image. I do the camera move first then draw the figure from the camera view or front view. when I do this the grease pencil plane has a 'curve' to it so by the time I get to the end of the camera move the pencil layer is curved all the way behind the mesh.
any ideas on why I am seeing this behaviour?
thanks!

I wonder if it is following the curve of the camera. Maybe as you are drawing in camera view, it is drawing a constant distance from the camera.

It’s interesting because the camera isn’t rotating it’s always pointing straight but there is a light curve to the move. I’ll check it out.


text:
Glass material isn't transparent when looked through another glass material?
I know that this question has been asked a LOT of times before, but none of the answers suited me, so...

This is a mesh  with glass material applied. And everything is perfect. I can see everything through clearly (just a UV Sphere behind mesh).

But when I add "liquid" inside, with the same glass material applied, it is not transparent.It is on the other hand transparent when i hide the cup, but when it is looked through the cup, it is not.

I use cycles, and I tried to tweak everything, but with no luck.
I would not like to reset blender to default, because I have startup file finely tweaked.

How is the liquid added to the cup? Is it a separate manifold mesh, or just a circle on top with altered materials for the glass on the underwater part?

Well, I literally selected the inner part of the cup, and made a separate mesh. I also inverted normals so that is not the problem.

Fluid in a glass and liquid glass interface ior and normals and http://blog.gregzaal.com/2013/10/19/fluid-in-a-glass/

Why are you connecting a mix shader that has no input on the second socket? What were you trying to do?

This material setup isn't done by me. I downloaded it from this website: http://blendermada.com/materials/detail/43-glass/

This appears to be because of overlapping faces. That is, two faces being in the same position. I cannot guarantee this is the case, but two transmission materials overtop of eachother sounds fragile.
I recommend either scaling the liquid block down slightly, or doing the following to change the liquid setup:
Make the separate liquid object just the surface.
Change the underwater part of the glass to a liquid-colored material that has a refraction index so as to match light going from glass into water as opposed to leaving air. You could probably get away with subtracting the IOR of glass from that of water, then adding 1. For a more accurate result, I'd have to think about the math, here's the law: https://en.wikipedia.org/wiki/Snell%27s_law If you aren't sure what to do, I might could look into it.
Hope this helps :D


text:
How to remove animation from duplicated object?
I duplicated an object and then added an animation to one of them, the animation appears in both objects in the outliner, also in the dope sheet and graphic editor and I can't remove the animation from one of them without removing it from the other.
So, I removed all the key frames and the animation from the dope sheet and graph editor, also unlinked the animation in the outliner but the animation is still showing in the outliner and every time I try to ad a new one, it becomes shared by both objects again.

That's because you didn't duplicate the object, you instanced it.

@someonewithpc How can I male the two objects independent?

That's because you didn't duplicate the object (which is done by pressing Shift + D), you instanced it (done by pressing Alt + D).
The difference is that, when using the second method, all of the object's properties get linked to another's, so, editting one will result in all being modified.
To unlink a object, you use Make Single User, by pressing U, in Object Mode, which will give you a list of possible data to unlink. As you seem to only want independent animations, then choose Object Animation on the list that shows up

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
How to replace mesh data in linked object by another object's linked data?
I have two sets of linked objects in the scene and want to "move" some objects from one set to the other without losing the object's potition, orientation and scale.
I other words, I want to replace just the linked mesh data in an object of the second set of linked objects, by the mesh data in one object from the first set of linked objects.
The image below depicts what I'm trying to do.

Select the object whose mesh you want to replace, then go to the "Object Data" tab in the properties panel (the one with the triangle standing on one of its vertices). The topmost dropdown menu lets you select the mesh linked to your object. Just select MeshData1 here.

The little number on the right also tells you how many users your mesh has (to how many objects it is linked).

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Change pivot or local origin of an object
How can I change the local origin of an object, without changing the object location in the world space.
This is the object located at position (0,0,0) in the world space

This is the same object located at position (0,1,0) in the world space, but with its local origin offset so that the object is in the same place

Is there a way to do this in a single step?

One way to do this is by entering Edit mode and placing the 3D cursor where you want the new origin. (When doing this, you can be very precise by selecting vertices, edges or faces and using them as guides. If you pick several points and snap the cursor to them using Shift+S → Cursor to Selected, Blender will use the average of the selected points to determine the new location of the cursor).

You then go back to Object mode and use Ctrl+Alt+Shift + C → Origin to 3D Cursor to update or change the object origin to the location of the 3D cursor.
For 2.9+ you need to go to Object Menu, and select Set Origin > Origin to 3D Cursor.

With all the attention this has gotten, this seems to be a good idea, https://rightclickselect.com/p/modeling/vqbbbc/interactive-pivot. Maybe someone with a little time on their hands could tackle it. :)

For properly center object from blender for unity I was needed to place 3D cursor to the zero coordinates (0, 0, 0) and then place the center of mesh object using Origin to 3D Cursor.

My pivot point has become rotated, how do I restore the rotation to be non rotated with respect to the rotation in world coordinates?

@rien333 Best to ask a new question, not sure what you mean by "pivot point has become rotated".

Okay, I will. Its pretty obscure, some old threads show up on Google but people in general just act confused.

Here is the question if anyone is interested (I guess it also pretty related to this one):
http://blender.stackexchange.com/questions/77224/change-object-pivot-point-orientation

When you want to check your modification in Unity, make sure you toggle the button to "Pivot" in Unity Editor to see where the new pivot point is. Otherwise, you would still see the center of the gameObject.

I would like to upvote your answer every time I need this. +4 till now.

Ctrl + Alt + Shift + C doesn't work since 2.8; choose it from the menu (no shortcut). Another option is to move the origin directly as mentioned in Robert's answer.

This is useful to have as a script, I wrote one back in 2011. It uses the 3d cursor but restores its original position.
A link to this script is here (includes all addon boilerplate) Once installed the script can be run from 3d view > space bar > Origin Move to Selected
This is the juicy bit:
def execute(self, context):
    saved_location = bpy.context.scene.cursor_location.copy()
    bpy.ops.view3d.snap_cursor_to_selected()

    bpy.ops.object.mode_set(mode = 'OBJECT')
    bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
    bpy.context.scene.cursor_location = saved_location

    bpy.ops.object.mode_set(mode = 'EDIT')
    return {'FINISHED'}

To bind this to a key combo:

User Preferences >  Input > 3D View > 3D View (Global) > New.
Then fill in the text field with object.origin_to_selected and Blender will name the short-cut correctly. Then pick your short-cut keys:

More work up front, but convenient when used hourly.

Very handy! I knew it could be done with scripting, but I'm new on that topic

Very nice.. This should be part of Blender distribution.

How can be added undo support?

hmm, this might take a bit longer, i will let you know when I find time to add undo. it's not just a simple bl_options = {'REGISTER', 'UNDO'}

@rraallvv, i recoded it to manipulate directly the verts and object location, https://gist.github.com/zeffii/5879583,  but still no nice undo.. :/ maybe someone else has a solution. I realize I've never used undo for something like this:)

@rraallvv the best way I know at the moment is, and this only works immediately after the origin switch..  is to go to object mode and hit undo.

2.8 update is here: https://gist.github.com/vansoest/db2a34f3bd80547060517baecfc531b7

In Blender 2.81 the transform tools can be restricted to only affect the origins, which allows to translate it directly.

Open the Options in the Tool Settings
In the Transform - Affect Only section check Origins
Select an object and adjust the origin using the shortcut G to move it. Alternatively you can also use the Move tool from the toolbar for the interactive gizmo.

In addition to the above, I also use the "Snap to" tool and set it to "Edge" and "Closest" so that I get exact positioning of the origin to be at the very edge of the object (which is usually what most folks want when they move the origin).

In Object Mode, first select the Object you want to change the Origin.
Then click Manipulate Center points (or Alt ,) It is the 3rd button on the right from the Object mode in the 3D header.
Switch to Edit Mode, if your Object is not selected, press A or A twice to select everything.
Move the selected object with the 3D manipulator. It works now relative to the center point.
When you are done, go back to Object Mode and uncheck Manipulate Center points (or Alt ,).

Sorry but you're wrong. The "manipulate center points" button only works with rotation, in "object" or "pose" modes. To move the pivot point of an object, this option is useless... However, manipulating the whole vertices of an object in "edit" mode will do the trick, as you said.


text:
Objects with transparent texture not always show transparency in 3dview
For some reason objects don't show their transparency all the time.
In this image the circles in red are suposed to be transparent like the ones in green.

When I select the object in the back, all objects in front of it become opaque.

When I select the two objects that are opaque, then they become transparent as they sould be.

The display is in GLSL mode
These are the material and texture properties

I'm not worried about the final render, just the editing view. I would like to see the actual transparency at editing time only, because the scene is to be imported in a third party game engine.
Blender is v2.68
This is the blend file

Go to the object panel in the properties and check Transparency in Display tab for all object you want to see transparent. make sure that you have the correct object selected.

I tried this, and while it does work, if you set multiple objects to display transparency there will be some strange things of certain objects being occluded and others not. (It all seems to depend on what object is selected)

@gandalf3 I'm finding this now, similar as you've described, with unselected objects appearing correctly partly obscured behind partly-transparent objects, when selected, the portion of the object behind the partly-transparent front object is entirely occluded. Weird. Using 2.74


text:
Computing and animating mesh deformations
I have two different meshes with the same topology, and I'd like to animate one deforming to the other.
I believe I need to somehow compute and apply the deformation between the meshes, and set the second mesh as a shape key of the first. Is such an operation feasible?

You probably want to look at the blendercookie werewolf tutorial for that.

@sambler maybe you must make an answer from your comment.

While I remembered the tutorial I forgot how simple the key point is...

I may be using the term wrong.. what I'm trying to say is that mesh_1 + deformation => mesh_2 - that the meshes have the same connectivity.

For example, try subdividing a cube until it's got the same number of vertices as a Suzanne, then set it as a Suzanne's shape key as in sambler's answer. The result is not a continuous deformation from a monkey to a cube; I'd say that Suzanne and the subdivided cube have different topology.

It'd be great if someone could confirm or correct the usage of the word!

@ajwood I decided to ask that question - My guess is that it is the order that the vertices are stored and connected.

Having two meshes with the same topology (The meshes must have the same number of vertices for this to work) you can easily use one mesh to define a shape key of the second mesh.
First select the mesh that you wish to be the shape key, then shift-select the target mesh. In the mesh properties click the little down arrow next to the Shape Keys list and select 'Join as Shapes'

You can have multiple meshes that each get applied as shape keys in the one step, each separate object will create it's own shape key.
You may also wish to copy a shape key from one object to another with the Transfer Shape Key.

Brilliant! Everything is so simple, once you know how to do it :P


text:
Keeping old renders open
I'm trying to learn materials, and there are so many options! I'd like to be able to compare side by side the effect of changing certain values.
Is it possible to keep old renders open?

What do you mean by old renders, the last rendered image and so forth etc? Possible duplicate of Logging Renders

That's what I mean, yes. There doesn't seem to be a way to view two different slots at the same time, however.

Cant you create more views? Closing as a dupe.

Changing the slot on one view updates all of the other views to the same slot!

There are some other suggestions there, the second one might be of more use then.. as it writes the files to disk.

Hmm not idea, but I suppose I'm being overly picky :s

possibly.. :) I usually just cycle through these quickly using shortcuts, Alt + J and J..

Is there a way to clear slots I'm no longer interested in (google isn't giving me much)

I don't think so, you can overwrite these as necessary as they are temporary or just leave them, they won't affect anything.


text:
Rendered aspect ratio different from the viewport's camera view
Why would there be a difference in aspect ratio between a rendered image, and the camera perspective in the viewport? My render is getting squashed to fit a different aspect ratio.
Here is a scene with a circle and emission shader.
Camera perspective in the viewport:

Render:

Not sure.. I was playing around with different camera presets. I guess those muck with more settings than I realized?

K, changing it to 1:1 fixes it. I always thought that was a setting for the frame size. It's actually the pixel dimensions then?


text:
uv smart projecting multiple objects via python loop issue
i have 100 of objects in a scene, which i need to assign UV (smart project), so they don't rely in default cubical space of shader. i tried following code ( written in few minutes) upon running, it only work (as expected)on first or last object. just can't figure out why. only one object shows texture after running. ahh..
import bpy

meshObjs = []
for each in bpy.context.selected_objects:
    if each.type == 'MESH':
        meshObjs.append (each)

    # clear selection
    bpy.ops.object.select_all(action='DESELECT')
    # iterating mesh objects
for obj in meshObjs:
    d = obj.data
    #obj.select = True
    bpy.data.objects[obj.name].select = True
    bpy.ops.object.mode_set(mode = 'EDIT')
    bpy.ops.mesh.select_all(action='DESELECT')
    bpy.ops.mesh.select_all(action='TOGGLE')
    obj.update_from_editmode()
    print (obj.name)
    bpy.ops.uv.smart_project()
    obj.update_from_editmode()
    bpy.ops.object.mode_set(mode = 'OBJECT')
    obj.select = False

You need to set the object as the active object. You can add bpy.data.scenes['Scene'].objects.active = obj at the beginning of your loop.


text:
Snapping vertices in a particle system

The idea is to snap the four (selected) polar vertices to each other while scaling the particle (meeting snap point, in this case, is the coordinate center). Eventually I'd like to make the sphere radius equal to the length of the tetrahedron edge in such a way to align the vertex grids so that boolean operations can be implemented.
Can it be done this way or is there a better alternative ?
Basically in order to make this

Boolean didn't turn out well in the depicted orientation of the spheres, even though the vertices appeared to be aligning.

Not sure to get the point. You want to merge the 4 spheres in order to obtain the figure that is rotating? What's the link with particles?

I used the particle modifier to position the spheres (rotate them all simultaneously) , and I managed to make the shape, it was quite a while ago, so i'd have to repeat it to know exactly what I had to do... it's described to an extent in the "answer" I gave myself.  I'm sure  I sued the wrong terms, because at first I was trying to use the "duplivert" option, but realized I couldn't orient the spheres... or did I... (I know the boolean modifier made things more difficult at one point)

I've read it, but still do not what you try to achieve here... And a question: does this figure have a name?

Knowing what I know now, I realize the spheres could be positioned individually. Also the dupli objects (spheres) can probably be made "real" and THEN positioned individually. So really I'm asking you, how would you do it ? Or more generally, how would you make a sphere grid, that can be subjected to boolean operations, because verices are aligned to allow that ?

Here are more shapes that can come from that

http://theu.one/tuo/wp-content/uploads/2017/12/19429665_10213505150448493_8575390339140040262_n-1.jpg

http://theu.one/tuo/wp-content/uploads/2017/12/cropped-Icon_one.png

is that of some help? https://i.sstatic.net/gPKgM.gif

Very nice, but that's a step beyond creating the resultant object/shape itself.  How would you turn (a non beveled, I see it's beveld in the gif) tetrahedron into a ReuleauxTetrahedron (convince blender that it's the same object in order for it to extrapolate the intermediate forms, presuming Blender can actually do that using a predetmined algorythim of soem sort (which could then theoretically be changed to yield some cool intermediates)?

ok, I get it now. Leander has done it here https://blender.stackexchange.com/questions/136607/turn-2d-mesh-into-a-3d-mesh-reuleaux-solids/136624. Keyword was Reuleaux!

You opened a can of worms by showing me that gif. LOL Now I wan't to know how to morph between any two objects, irrespective of the method used to make them.

simply a shape key from a subdivided tetrahedron and itself turned into a sphere.

This shape would be integrated  https://www.youtube.com/watch?v=BHJBlnUzwQU&t=1m15s

Ok. I need to check out examples of sape key usage. Does' the initial object have to be subdivided (have the same number of vertices) ? How did you turn it into a sphere ?

I get it now. It's subdivided BECAUSE you planned on turning it into a sphere. So the animation is actually only missing a first step where the subdivision happens, in odrer to show a full transformation from a perfect tetrahedron to a sphere.

Still, how did you do it ? Did you point project vertices onto a sphere  ? (though I don't know how that would be done, but I can imagine it) though that option would require Blender to register a sphere as a mathematical  ideal.

we can't extend a discussion so much here normally. But some advanced technics are around this https://blender.stackexchange.com/questions/80868/transforming-morphing-one-objects-shape-into-anothers

I'm pretty sure it can't do that because it can't do this ? https://blender.stackexchange.com/questions/143416/vertex-at-curve-circle-intersect

Let us continue this discussion in chat.

Thanks for that link, in the discussion. I got a bit sidetracked in the meantime.

With some inspiration from this answered question, though some settings must have been changed because I can't find the other size determining value, he pointed out, I managed to find the right Render>size "0.25" which makes the particles the same size as the original Dupli Object and takes the selected polar vertices to the same spot as I wanted.
and to do the eventual How to convert particles to mesh?
and How to Make Multi User Objects Single User?
is required


text:
Vertex coordinate monitoring during Transform
Is it possible, for example, to monitor the coordinates of a vertex while rotating the mesh? (monitored vertex is moving in a circular fashion, providing it's not on the global/local rotation axis)
I'm looking into this as a possible solution to a snapping problem

What's the question?

There's no question mark, but it's clear that I'm asking if there's a way of monitoring the coordinates of a singular vertex making up a mesh, while the mesh is going through a transform (in the same way the mesh origin is monitored and the coordinates are visible in the right tab)

In the Properties Region > Transform panel, when in Edit Mode, you can read/set the position of single vertex, or the median position of a set of vertices.

If you want to bring a vertex of one mesh to a particular vertex of another mesh do this:

select the first object, switch to edit mode, deselect all vertices and select the one to which you want to bring the other vertex.
Switch to object mode
Similarly select the other object and repeat the above steps to selecting the node you want to be moved
Execute the following script replacing the name 'Cube1' with the reference object and 'Cube2' with the object whose vertex you want to move:
import bpy
obj1 = bpy.data.objects['Cube1']
obj2 = bpy.data.objects['Cube2']
co = obj1.matrix_world * [v for v in obj1.data.vertices if v.select == True][0].co
[v for v in obj2.data.vertices if v.select == True][0].co = obj2.matrix_world.inverted() * co

I want the transform of the whole mesh to conform to the future destination of one of the mesh vertices, when the mesh origin is static or otherwise.

there's a more specific problem in the link, which could be solved if one of the highlighted polar vertex coordinates could be monitored.

I could make a similar scene using DupliVerts but I don't know how to rotate the duplicates so they're pointing to the center.


text:
Absence of snapping (coordinate matching) in nested platonics

Is there a way to easily snap vertices known to lie on the surface of a sphere ?  In these cases the Z axis vertices are aligned at spawn, and no snapping occurs at the selected vertex, while rotating.
Why isn't Blender recognizing the matching coordinates ?

as much as I can

The problem must be in the code, as you've identified. Irrationals obfuscate projection, as agreement on exact coordinates becomes unattainable, but then again, I'm not a programmer, maybe there's a way around this already implemented.

What I'm taking away from your response is that the current code doesn't have this sorted, and you're completely sure ? I'm mostly interested in the snapping workflow, and not sorting this out seems like a gaping hole in functionality.

is there a way of monitoring the coordinates of a vertex while rotating the mesh (which would mean the monitored vertex is moving in a circular fashion ofc)  ?

I'm not looking for absolute precision, just precision within the bounds of the program, since snapping is based on that (I would assume). The examples I presented here seem like ideal stepping stones for setting "this" up ("this" being the resonance (total agreement) between shapes)

With snap always set to 'Vertex' and 'Active', Pivot at '3D Cursor'. All transforms in Edit Mode, with all vertices selected, and a convenient vertex active. Usually you will translate-snap the active vertex into place, put the 3D Cursor there, and then with another vertex  roughly opposite the cursor made active, uniformly-scale or rotate all the vertices about the 3D cursor.
All objects created from Extra Objects > Math Function > Regular Solids

Dodecahedron to Icosahedron: AltP Poke all faces of the Icosahedron, scale all vertices of the dodecahedron, snapping the active vertex to one of the new face centers
Cube to Dodecahedron: scale the cube and snap the active vertex to one of the corners of the dodecahedron
Tetrahedron to Cube: the solid can be snapped, by  progressively moving the pivot point and setting  Custom Orientations, but easier to snap individual vertices of the tetrahedron to the appropriate corners of the cube.
Octahedron to Cube: poke the faces of the cube, and scale, as we did with the dodecahedron.

What Blender's snap system is missing (compared to some other 3D applications,) is the ability to set a snap orientation. You can constrain the transformation of the snap source, but not the vector from snap source to snap target.
But, given that, sure you can snap during rotations, scales, and translations, constrained ones, if you like.

I'm not following. Make a GIF doing exactly what I was trying in one of my screenshots.  There's no way I know of (in edit mode, vertex select) that makes the static vertex (I want to snap to) active, while the mesh that has to be totally selected in order to rotate as a whole, matches the other meshes vertices in multiple locations (which is incidental considering only the active one is considered).

The 'active' refers to the source, not the target. So I can select a bunch of vertices, with one active. Then move/rotate/scale them all in the same way,  snapping the active vertex to my chosen static target, with the rest following along.

Thanks to Robin Betts I figured it out.
With SNAP set to 'Vertex', 'Active', Pivot at '3D Cursor'
Edit: selecting the static mesh, actually isn't necessary

select the static mesh, then select the "to be" transforming mesh while holding "Shift"
enter "Edit mode", "Ctrl+Tab" (Vertex select mode)
Press "A" to select the whole transforming mesh
Hold "Shift" and de-select one of the vertices (the one you want to snap), then re-select it, still holdig "Shift" (which makes it active, more orange)
Make sure 3D Cursor is at the desired pivot point
Make sure your pointer arrow is near the "to be" moving vertex when you press "R" then "Z" to constrain the rotation to Z axis
Bring your active vertex close to the static one, and it will SNAP

If Robin Betts answer helped you, you should upvote it

I did, but a notification comes up saying my low reputation prevents my votes from being publicly visible.


text:
3D Stereo Active shutter vision LCS glasses realtime viewport?
Is it possible (or maybe already implemented by someone) to configure the viewport to display stereoscopically at a set frequency dependent on the given screen refresh rate, while having the frequency channeled out as "sound" through the sound card (or maybe over IR or bluetooth) so to sync a stock pair of Liquid Crystal Shutter 3D glasses (LCS) like SegaScope  or equivalent stock or "hacked" alternatives ?
Hacking example,
better hacking,
Screen compatibility info pdf
or maybe directly over VGA
and more good archaic info and SegaScope alternative
or maybe, since it's a monotone oscillation that's driving a binary outcome (left/right) ON/OFF, and a known frequency (if the max source refresh rate is applied and FPS is stable) it could be calibrated/synced manually without any direct power or initialization from the PC-GPU.
Maybe avoid Quad-buffered (aka CrystalEyes) Quad buffering 2 by NOT presenting the SAME, spatially displaced, image to both eyes, since in this "time-sequential" case, it isn't actually doable. It would make more sense to intermittently display realtime frames from each of the viewports (realtime-sequence).
NVIDIA Fast Sync ...and I'm on AMD, but the process can't differ much
Clean (simplified) explanation of Nvidias' pipes
Myths and Misconceptions of Frame Pacing / Alen Ladavac, Croteam / Reboot Develop Blue 2019
CRU Custom resolution and screen framerate overclocking utility, which could come into play and Guide

relevant, but not particularly useful https://docs.blender.org/manual/de/dev/render/workflows/multiview/usage.html#display-mode

Begs this question that I'm not asking because I can't even enable the time-sequential mode, though this pertains to recording and my question is about pure realtime viewing (eventually recording) https://blender.stackexchange.com/questions/60669/time-sequential-option-in-stereo-mode-is-missing


text:
ValueError raised unexpectedly when using UIList helper function sort_items_by_name
I'm trying to figure out how to use filter functions in classes derived from UIList. My very simple example uses the reordering capability of filter_items, controlled by two flags. The flags are both BoolProperty annotations of my class. When use_order_name is False, no reordering is performed.  When use_order_name is True sort_items_by_name is used to sort the list into alphabetical order.
When the list is sorted, use_name_reverse is False, the list is presented in ascending sort order.  This works fine.  When use_name_reverse is True, the list is presented in descending order.  This fails, generating the ValueError exception.  I'll present the entire script below, but here's the excerpt that uses the variables.  It's lines 43 - 48 of the script:
        if self.use_order_name:
            ordered = bpy.types.UI_UL_list.sort_items_by_name(items, "name")
            if self.use_name_reverse:
                flt_neworder = ordered.reverse()
            else:
                flt_neworder = ordered

The odd part is that the failure is not in that code, but rather when I'm drawing the panel that contains the UIList, at line 157 of the script:
            col.template_list("TOOL_UL_List", "The_List", object,
                              "demo_list", object, "list_index")

Here is the error from the system console:
location: D:\stupi\blender\blends\python examples\annotated UIList.blend\Text:276
Python: ValueError: calling class function: sequence expected at dimension 1, not 'NoneType'

I assume this is because trying to reverse ordered is failing in some way, but I don't understand how.
Here is the entire script.
import bpy
from bpy.types import Panel, Operator, UIList, PropertyGroup
from bpy.props import IntProperty, StringProperty, CollectionProperty

class ListItem(PropertyGroup):

    name: StringProperty(
           name="Name",
           description="A name for this item",
           default="Untitled")

    prop2: StringProperty(
           name="Any other property you want",
           description="",
           default="")

class TOOL_UL_List(UIList):
    bl_idname = "TOOL_UL_List"
    layout_type = "DEFAULT"

    use_name_reverse: bpy.props.BoolProperty(
        name="Reverse Name",
        default=False,
        options=set(),
        description="Reverse name filtering",
    )

    use_order_name: bpy.props.BoolProperty(
        name="Name",
        default=False,
        options=set(),
        description="Sort groups by their name (case-insensitive)",
    )

    def filter_items(self, context, data, property):
        flt_flags = []
        flt_neworder = []
        items = getattr(data, property)
        if not len(items):
            return flt_flags, flt_neworder

        if self.use_order_name:
            ordered = bpy.types.UI_UL_list.sort_items_by_name(items, "name")
            if self.use_name_reverse:
                flt_neworder = ordered.reverse()
            else:
                flt_neworder = ordered

        return flt_flags, flt_neworder

    def draw_filter(self, context, layout):

        row = layout.row(align=True)
        row.label(text="Order by:")
        row.prop(self, "use_order_name", toggle=True)

        icon = 'TRIA_UP' if self.use_name_reverse else 'TRIA_DOWN'
        row.prop(self, "use_name_reverse", text="", icon=icon)

    def draw_item(self, context, layout, data, item, icon, active_data,
                    active_progname, index, flt_flag):

        if self.layout_type in {'DEFAULT', 'COMPACT'}:
            layout.label(text=item.name)

        elif self.layout_type in {'GRID'}:
            layout.alignment = 'CENTER'
            layout.label(text="")

class TOOL_OT_List_Add(Operator):
    bl_idname = "tool.list_add"
    bl_label = "Add"
    bl_description = "add a new item to the list."

    @classmethod
    def poll(cls, context):
        return context.active_object

    def execute(self, context):
        context.active_object.demo_list.add()
        return {'FINISHED'}

class TOOL_OT_List_Remove(Operator):
    bl_idname = "tool.list_remove"
    bl_label = "Add"
    bl_description = "Remove an new item from the list."

    @classmethod
    def poll(cls, context):
        return (context.active_object
                and context.active_object.demo_list
                and len(context.active_object.demo_list))

    def execute(self, context):
        alist = context.active_object.demo_list
        index = context.active_object.list_index
        context.active_object.demo_list.remove(index)
        context.active_object.list_index = min(max(0, index - 1), len(alist) - 1)
        return {'FINISHED'}

class TOOL_OT_List_Reorder(Operator):
    bl_idname = "tool.list_reorder"
    bl_label = "Add"
    bl_description = "add a new item to the list."

    direction: bpy.props.EnumProperty(items=(('UP', 'Up', ""),
                                              ('DOWN', 'Down', ""),))

    @classmethod
    def poll(cls, context):
        return (context.active_object
                and context.active_object.demo_list
                and len(context.active_object.demo_list) > 1)

    def move_index(self):
        index = bpy.context.active_object.list_index
        list_length = len(bpy.context.active_object.demo_list) - 1
        new_index = index + (-1 if self.direction == 'UP' else 1)
        bpy.context.active_object.list_index = max(0, min(new_index, list_length))

    def execute(self, context):
        alist = context.object.demo_list
        index = context.object.list_index

        neighbor = index + (-1 if self.direction == 'UP' else 1)
        alist.move(neighbor, index)
        self.move_index()
        return {'FINISHED'}

#-----------------------------------------------------------------------------
#
class TOOL_PT_Panel(Panel):
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "Tool"
    bl_idname = "TOOL_PT_Panel"
    bl_label = "Panel UIList"
    bl_description = "Demonstration of UIList Features"
    bl_options = {
        'HEADER_LAYOUT_EXPAND',
    }

    def draw(self, context):
        object = context.active_object

        row = self.layout.row()
        row.alignment = "CENTER"
        row.label(text=object.name)

        row = self.layout.row()
        row.alignment = "CENTER"

        if object:

            col = row.column(align=True)
            col.template_list("TOOL_UL_List", "The_List", object,
                              "demo_list", object, "list_index")

            col = row.column(align=True)
            col.operator("tool.list_add", text="", icon="ADD")
            col.operator("tool.list_remove", text="", icon="REMOVE")

            if len(object.demo_list) > 1:
                col.operator("tool.list_reorder", text="",
                    icon="TRIA_UP").direction = "UP"
                col.operator("tool.list_reorder", text="",
                    icon="TRIA_DOWN").direction = "DOWN"

            row = self.layout.row()
            if object.list_index >= 0 and object.demo_list:
                item = object.demo_list[object.list_index]
                row = self.layout.row()
                row.prop(item, "name")
                row.prop(item, "prop2")

#-----------------------------------------------------------------------------
#
classes = [
    ListItem,
    TOOL_UL_List,
    TOOL_OT_List_Add,
    TOOL_OT_List_Remove,
    TOOL_OT_List_Reorder,
    TOOL_PT_Panel,
]

def register():
    for c in classes:
        bpy.utils.register_class(c)

    bpy.types.Object.demo_list = CollectionProperty(type = ListItem)
    bpy.types.Object.list_index = IntProperty(name = "Index for demo_list",
                                             default = 0)

def unregister():
    del bpy.types.Object.demo_list
    del bpy.types.Object.list_index
    for c in classes:
        bpy.utils.unregister_class(c)

if __name__ == '__main__':
    register()

Here is a 3.0 blend file that demonstrates the problem.  Open it.  Run the script.  The cube should be selected.  The panel will show up at the bottom of the tool panel in the viewport sidebar (it should already be opened.)  Click the down arrow on the right of the bottom row to reproduce the issue.

ordered.reverse() reverses ordered in place and returns None :)

doh.  i knew that.  write it up as answer and i'll accept it.

In detail, here's the problem:
I made a Python programming mistake.  As pointed out in a comment on the question

ordered.reverse() reverses the order in place and returns None.

The bug doesn't show up at the call site, or within the function that makes the call, because the result is immediately returned but not used in the function.
My confusion stemmed from not realizing that the call to template_list results in a call to the filter function and that it was template_list trying to use the result of the filter function that was the source of the attempt to dereference None because None had been returned instead of the desired result.
The fix is straightforward: rewrite the if statement to properly use the reverse function:
        if self.use_order_name:
            flt_neworder = bpy.types.UI_UL_list.sort_items_by_name(items, "name")
            if self.use_name_reverse:
                flt_neworder.reverse()


text:
Why is globalString not being updated by localUpdate in this add-on?
From the print statements in localUpdate it appears that changing the value of localString in the Redo panel updates globalString but globalString is not actually updated.  What am I missing?  (This doesn't seem to be a Blender bug, but something I'm not understanding about StringProperty or properties in general.)
NOTE: This is a a question about why the update function doesn't work, not about how to update the global without using the update function.  I've simplified a fairly complex setup that has mixins that modify the local to get to this example, so while updating the global in execute would work in the example, it won't work in the final system.
To see the problem, invoke the operator by using the button in the tla Panel.  When the Last Operator Adjustment (redo) panel shows up, change the value of localString in the panel.  Messages will appear on the system console showing that localUpdate has run and modified globalString but if you check bpy.context.scene.globalString in the Python console after making the change, it will still have its original value of "global".  Further, setting its value in the Python console causes it to change in the panel.
Here is the add-on.  Copy it into the text editor and hit run.
import bpy
from bpy.types import Operator, Panel
from bpy.props import StringProperty

bl_info = {
    "name" : "Op Test",
    "description" : "a test",
    "author" : "Marty",
    "version" : (0, 0, 1),
    "blender" : (2, 80, 0),
    "location" : "View3D",
    "support" : "COMMUNITY",
    "category" : "3D View"
}

class TLA_OT_message(Operator):
    bl_idname = "tla.message"
    bl_label = "An Op"
    bl_options = {"REGISTER", "UNDO"}

    def localUpdate(self, context):
        print("localUpdate called")
        print(self.localString)
        print(f'before {bpy.context.scene.globalString}')
        context.scene.globalString = self.localString
        print(f' after {bpy.context.scene.globalString}')

    localString : bpy.props.StringProperty(
        name="localString",
        default="local",
        update=localUpdate)

    def execute(self, context):
        self.report({"INFO"}, f"local string is {self.localString}")
        return {"FINISHED"}

class TL_PT_panel(Panel):
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "tla"
    bl_label = "Panel"
    bl_options = set()

    def draw(self, context):
        col = self.layout.column()
        col.operator(TLA_OT_message.bl_idname, text = "push me")
        col.prop(context.scene, "globalString", text="Global")

def anUpdater(self, context):
    print("an Updater called")

def register():
    bpy.utils.register_class(TLA_OT_message)
    bpy.utils.register_class(TL_PT_panel)
    bpy.types.Scene.globalString = bpy.props.StringProperty(
        name="globalString",
        default = "global",
        update=anUpdater,
    )

def unregister():
    del bpy.types.Scene.globalString
    bpy.utils.unregister_class(TL_PT_panel)
    bpy.utils.unregister_class(TLA_OT_message)

if __name__ == "__main__":
    register()

Here is what the 3D Viewport looks like after installing the addon, opening the side panel, selecting the 'tla' tab, and pushing the button:

Change "local" to "other" and the info message in the info window changes:
bpy.ops.text.run_script()
bpy.ops.tla.message()
local string is local
bpy.data.window_managers["WinMan"].(null) = "other"
bpy.ops.tla.message(localString="other")
local string is other

(Icons don't copy so here's a screenshot)

and the content of the system console at this point:
Read prefs: C:\Users\stupi\AppData\Roaming\Blender Foundation\Blender\2.93\config\userpref.blend
Read blend: D:\stupi\blender\blends\stack exchange answers\updater test.blend
Info: local string is local

localUpdate called
other
before global
an Updater called
 after other
Info: local string is other

Finally, checking the value of bpy.context.scene.globalString after all of that:
PYTHON INTERACTIVE CONSOLE 3.9.2 (default, Mar  1 2021, 08:18:55) [MSC v.1916 64 bit (AMD64)]

Builtin Modules:       bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, bgl, blf, mathutils
Convenience Imports:   from mathutils import *; from math import *
Convenience Variables: C = bpy.context, D = bpy.data

>>> bpy.context.scene.globalString
'global'

>>>

and for completeness: my test file:

but why do you want to show 2 fields with the "same" value (global + local)?  i don't really get it...?

@Chris because you can't display class properties in a panel.  The workaround I'm working on is to keep global versions in sync and display the the global versions.  Eventually, once that works I'll add presets to both the panel and the operator, at least in theory.  So I need to keep the global/local in sync so I can use presets in the panel and presets in the operator.

In the end, the answer is "You can't get there from here".  More precisely, when you add an update function to a property in a class, Blender massages that property at registration time, in such a way that the context argument to the update function becomes the window manager, and not the context you need to look up the property.
This is why the info window gets the message bpy.data.window_managers["WinMan"].(null) = "other" in my example.
It doesn't matter whether the update function is defined within the class or not, it just doesn't work.  For now, I have a workaround that works for presets, although it does require a bit of excess cleverness.
import bpy
from bpy.types import Operator, Panel
from bpy.props import StringProperty

bl_info = {
    "name" : "Op Test",
    "description" : "a test",
    "author" : "Marty",
    "version" : (0, 0, 1),
    "blender" : (2, 80, 0),
    "location" : "View3D",
    "support" : "COMMUNITY",
    "category" : "3D View"
}

class TLA_OT_message(Operator):
    bl_idname = "tla.message"
    bl_label = "An Op"
    bl_options = {"REGISTER", "UNDO", "PRESET"}

    need_update = False

    localString : bpy.props.StringProperty(
        name="localString",
        default="local",
    )

    def updateGlobal(self, context):
        context.scene.globalString = self.localString

    @classmethod
    def requireUpdate(cls):
        cls.need_update = True

    def execute(self, context):
        if TLA_OT_message.need_update:
            self.localString = context.scene.globalString
        self.report({"INFO"}, f"local string is {self.localString}")
        self.updateGlobal(context)
        # The call to updateGlobal will cause the global's anUpdater
        # function to be called, causing need_update to be set to True
        # but we don't need an update so we override that change before
        # leaving the function.
        TLA_OT_message.need_update = False
        return {"FINISHED"}

class TLA_PT_panel(Panel):
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "tla"
    bl_label = "Panel"
    bl_options = set()

    def draw(self, context):
        col = self.layout.column()
        col.operator(TLA_OT_message.bl_idname, text = "push me")
        col.prop(context.scene, "globalString", text="Global")

def anUpdater(self, context):
    TLA_OT_message.requireUpdate()

def register():
    bpy.utils.register_class(TLA_OT_message)
    bpy.utils.register_class(TLA_PT_panel)
    bpy.types.Scene.globalString = bpy.props.StringProperty(
        name="globalString",
        default = "global",
        update=anUpdater,
    )

def unregister():
    del bpy.types.Scene.globalString
    bpy.utils.unregister_class(TLA_PT_panel)
    bpy.utils.unregister_class(TLA_OT_message)

if __name__ == "__main__":
    register()
```

Although i am not the add-on-Pro....i think it is because you are showing the global variable field too. So it takes the value from that field. If you comment out
#        col.prop(context.scene, "globalString", text="Global")

it works.
But i am sure batfinger can explain this better ;)

The value of bpy.context.scene.globalString isn't updated this way.

It is because localUpdate is an instance method. localString is a class annotation adding a property to all instances but at the time is defined, instance methods are not yet registered in the class. (At least that's my guess)
So you have to move localUpdate out of the class definition :
This works :
import bpy
from bpy.types import Operator, Panel
from bpy.props import StringProperty

bl_info = {
    "name" : "Op Test",
    "description" : "a test",
    "author" : "Marty",
    "version" : (0, 0, 1),
    "blender" : (2, 80, 0),
    "location" : "View3D",
    "support" : "COMMUNITY",
    "category" : "3D View"
}

def localUpdate(self, context):
    print("localUpdate called")
    print(self.localString)
    print(f'before {bpy.context.scene.globalString}')
    context.scene.globalString = self.localString
    print(f' after {bpy.context.scene.globalString}')

class TLA_OT_message(Operator):
    bl_idname = "tla.message"
    bl_label = "An Op"
    bl_options = {"REGISTER", "UNDO"}

    localString : bpy.props.StringProperty(
        name="localString",
        default="local",
        update=localUpdate)

    def execute(self, context):
        self.report({"INFO"}, f"local string is {self.localString}")
        return {"FINISHED"}

class TL_PT_panel(Panel):
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "tla"
    bl_label = "Panel"
    bl_options = set()

    def draw(self, context):
        col = self.layout.column()
        col.operator(TLA_OT_message.bl_idname, text = "push me")
        col.prop(context.scene, "globalString", text="Global")

def anUpdater(self, context):
    print("an Updater called")

def register():
    bpy.utils.register_class(TLA_OT_message)
    bpy.utils.register_class(TL_PT_panel)
    bpy.types.Scene.globalString = bpy.props.StringProperty(
        name="globalString",
        default = "global",
        update=anUpdater,
    )

def unregister():
    del bpy.types.Scene.globalString
    bpy.utils.unregister_class(TL_PT_panel)
    bpy.utils.unregister_class(TLA_OT_message)

if __name__ == "__main__":
    register()

python noob here: why can python access self.localString in a global func def localUpdate(self, context) ? I know from other programming languages that properties of classes "normally" cannot be accessed from outside the class - except class variables or global variables, but even then there should be the class instance written before like instance.property = blabla or Classname.property = blubb. Looks like i have a basic misunderstanding here... :(

Yeah that's because of the way properties are registered in the Blender API : they're not instance attributes (foo = "this is an attribute"), they are (type) class annotations (bar: bpy.props.StringProperty()), meaning that they are dynamically added to Operator class instances when the operator is created and executed at run time using a button in the layout or the search operator. In the process the update method's parameter are dynamically populated, whereas in a regular class instance attribute the self is implicitly added. eg if you have an instance method method on class A

Calling a = A() and then a.method()  is the same as calling A.method(a) (Again that's how I understand it I may be totally wrong ><)

You also have to understand that we are using an API, meaning this is just an interface to the actual Blender codebase, you can see it as a keyboard and mouse peripherals, keyboard and mouse are just an interface to your computer, and you don't need to see or understand what signals goes to the computer and comes back to actually manage your computer. But the core of the computation is done in the computer, not the interface. So what you're defining is python, yes, but it's also calling a bunch of C / C++ code under the hood that you don't need to know about for it to work

ok, thank you. My misunderstanding was my assumption this would be a "normal" property. Thank you for clarification.

moving the method definition out of the class doesn't seem to accomplish anything.

I tried Gorgious solution and it worked on my computer….and mine worked too…but maybe on windows computer it doesn’t…

I’m traveling with limited connectivity. I’ll be back on line Thursday and double check but when I tried this I got exactly the same results as when it was local. In the function it appears to work but checking the value of the global after the change does not show the change.

@MartyFouts Make sure you close Blender and restart before running this version of the script, might be a problem of re-registering the operator ?

I'm back.  I opened a fresh copy of 2.93.6, selected the scripting workspace, cut'n'paste copied your version to it.  Saved without doing anything else and closed.  Opened the saved file. Ran the script. Pushed the button.  In the Last Operator panel changed 'local' to 'other'.  bpy.context.scene.globalString did not change.  I think the key to the problem is in the info window when I hit enter it prints bpy.data.window_managers["WinMan"].(null) = "other"  When you change tle string in the op adjust panel what does it say?


text:
Vertex at curve/circle intersect

I haven't found out how do things in Blender that can be done i Geogebra for ex.,
Lets say I want to make a circle and then make more circles that have centers somewhere on the circumference, or a freehand/random version of what's in the picture.
Im my experience the vertex can't/doesn't appear where I want it to be, IT already has to be there.
Vertice count set manually at object creation or using tools.
Precise constructions that develop from one another and rely on unforeseen intersections are impossible to make under these conditions,
which is why I'm sure I'm missing something obvious.
Is there a way to do this even though it's not apparent to me ?
The thing called a "circle" in the Mesh menu I feel should be called an n-gon, since it doesn't act like a circle, as far as I can tell.
(based on the IDEA of what a circle is, AN infinite amount of vertices)

Maybe that can be obtained using animation nodes and starting from two Bezier circles as they are not ngons.


text:
Nest complementary objects quick, without having to deform,distort?

These are just simple placeholders for any two complementary objects which would have many vertices placed in the same location.
To get this picture I had to distort the tetrahedron and pull each of its' vertices to the vertices of the cube, by moving the cursor from vertice to vertice, and go into Edit mode of the tetrahedron to actually move its' vertices one at a time.
Is it possible to achieve the same result without distortion along the way, and in less steps ?
I already posed a similar question which was answered, but wasn't general enough, because the objects had a common axis, which made the alignment rely solely on Rotation... while simultaneous Scaling AND Rotation is required in most cases.

Is this question about creating the complementary objects, or transforming them once they exist?

Transforming once they exist, though I'd take the creation explanation on the side too, if it doesn't require manual connection of the vertices, that is, only selection and then connection in one go/click.

The only way I can think of creating the objects is to construct them from edges.. probably not what you want.. but I'll post anyway, and refer you to another answer about transformation.

say if I wanted to animate the tetrahedron coming from a random direction on a random path, how would I get it to "land" in the cube so perfectly ? XD Don't tell me it's not possible, or even worse that nobody is thinking about these simple possibilities.  One cheat would be to run an animation in reverse, but i don't want cheats. I hope I'm just uninformed.

I've been in stop-motion animation most of my life, and keying in reverse ain't cheating, in my book of rules!  :D I'll try making a gif when I've got time..

I've popped in a gif.

You've linked your own answer to  MY question I was referring to being answered XD NICE, but as I've said in the previous reply, the method doesn't fit the bill.   Three steps, 1. align one vertex using the cursor and pulling the whole form (as is already happening with shown) 2. align a second vertex in a similar way but preserving the form, so that in the 3. step only Rotation remains to align the 3rd vertex.

Basically the Scaling has to happen in direct relation to the distance between the first two vertices (of the cube)

Let us continue this discussion in chat.

To construct the dual object, you can:

X Delete > 'Faces Only' of the original
F between selected vertices to create new edges
F selected edges to create new faces

If you already have the complementary objects, not in the right orientation or scale, maybe this answer will help?
EDIT: following commentary .. this sequence was keyed manually, forward and in reverse from a static exact fit position. I personally think 'cheating' is the easiest approach.

I found a way using https://docs.blender.org/manual/en/latest/editors/3dview/object/editing/transform/control/orientations.html?highlight=align%20transform%20orientation       Ctrl+Shift+Space to "sample" the orientation system  (Shift+Space) of the cubes vertex in Edit mode, and then select the thetrahedron and go into object>transform>align to transform orientation, which aligns one axis of the tetra to the axis of the cube, but there are still too many steps and I'm basically back to the situation I already described had been answered.

@t8ja  Custom Transform Orientations  work on edges and faces, too, absolutely one of the most useful tools in modeling,, I'm very surprised they've lost the standard shortcut for it in 2.8, where you have to make your own,


text:
Precise scaling in Edit mode impossible?
[
[
I turned on the edge length indicator in Edit mode, but apparently it gives false (rounded) values, since the vertices don't align.
In this example I tired joining 3 tetrahedrons around a 345 Pythagoras triangle, and even though I'm seeing 3,4,5 as edge lengths the last vertex falls short.
I realize there are ways to ensure precision since starting values don't really matter, but still I'm interested since my first attempt failed trying to do it this way.


text:
Get the depicted result procedurally, with interactive possibility as described, minus the equilateral grid ? Python, AN, any other method

Strike four - Drivers...

No control.
The AN nodes will prove to be the best solution as I initially suspected.
Unless I'm missing something obvious, which is entirely plausible.
Strike three
I'm looking for the easiest way to coordinate the positioning of endpoints which constitute the pink lines.
(The grid itself can be a separate object)
Ultimate goal is to use just one variable per object to offset them from the origin, and have a function generate the "y" from the "x".
Inadequate ideas I've had so far:

Array to create the points(vertices or empties) on the "x" axis, but then there's a problem of generating the "y" array with non-uniform offset based on a function.
Use the equilateral triangle to generate custom orientations by which to translate new objects (empties)

somehow automatically coordinate their positioning
then use the coordinates to string anything renderable across

Strike two
Can an array of linearly equally spaced empties be used in such a way to take the offset distances (of every copy from the original) and then create another linear array whose elements would be offset from the original by putting the aforementioned distance values through a function ?
The next step would imply connecting the corresponding empties, the connections representing the pink lines in the graph.
Strike one
Translating x values to y via f(x) as usual, but without treating x and y as coordinates, only endpoints of finite (pink) lines.
I looked for other solutions before coming back to Blender, but since it is an all out graphical application, and Python based, as are some of the other options which seem too formatted/specific in application,   there's no reason not to ask if it's possible.
Since this question is simpler then the previous which was solved by @lemon , I'm confident the answer will come, as I actually dissect the methods used there.

I do not understand this question. Are there perhaps examples of similiar projects on the internet, which we could refer to?

I don't think so, I've searched far and wide, and since nobody seems to be using the "ternary diagram" in this way, there is no formatted value input system that would allow the creation of the depicted graph.   The crucial functionality needed to make this work is the generation of a list of vertices (along the yy axis) based on a list of vertices on the x axis. After some more thought I believe this is doable using animation nodes. (Doable even without using any of the established axes).  @lemon showed me the AN light on an earlier question, but I didn't follow it diligently.

So you actually want to construct your figure as a geometry with python?

Maybe it's easier (on my brain/memory) with animation nodes, but taking into account that any action can be scripted in Python, I  accentuated Python.  Yes, though I don't see any other way. What troubles me is that I haven't yet seen anyone spawn a  wikipedia.org/wiki/Line_(geometry)  within 3D view.

I'm confused, a line is infinite. Geometry (vertices) are going to be finite. Do you actually want geometry? Or are you talking about OpenGl/bgl.

Since the axes are such lines, logic dictates that it should be possible.

those lines make the alternative triangular grid (as opposed to the existing quadratic one) , and I need the intersections because that mimics the regular increment stickiness

So, in theory, you could just add a triangle like rjg suggested, extrude the ends of lines to very far/infinity and enable vertex snapping? Maybe there are just too many questions at once in this question.

That isn't the critical part though.  Nevertheless I can't see why it couldn't be done.

Whats the critical part, then?

I already described it. "The crucial functionality needed to make this work is the generation of a list of vertices (along the yy axis) based on a list of vertices on the x axis."    Though all of those vertices could also be on the same line/axis.

I must admit I don't understand this "hold" on questions, or how is it beneficial to anyone. Just because a few people reading don't understand, nobody can answer, not even the OP. Makes no sense.

Supposing you entered your X and Y coordinates in Blender's own orthogonal space. Then a transform that would take them to your 60 degree angled axes, with  matching lengths on the new axes, would be:

SY with a numerical entry of sqrt(3)/2, followed by
ShiftCtrlAltS Shear, Z axis, X ortho, by tan(pi/6)

I've got a blind spot I've only now identified, but if I'm understanding your suggestion, it requires the empties to  already be placed along the axes, followed by their coordinates/positions being transformed ? Maybe I need to totally reform this question and ask how to generate sets of coordinates in order to place arbitrary objects at those positions.

That's the fundamental problem, I've only now managed to articulate XD unless I'm having a crash right now and everything I'm saying makes no sense.

@t8ja , no Empties, just a first shot. These transforms will take any object, (in Edit Mode) from Cartesian XY to your triangular XY. So you could construct the object, or Y = f(X).. whatever .. in Blender space, and- then transform it to yours.

I'll test it out on a cube, but first I have to figure out how to enter the root operator

How do you enter the operators ?

@t8ja .. just state the problem (one problem) plainly and simply. atm, what I see, is that you want an empty translating in X to drive another empty on the 60 degree diagonal.Is that right? That can be done with an object-offset array, for example

Yes exactly, but for multiple empties/objects at once. Though it seems the operation, as you described it, has a limitation of having to be manually deployed for every pair.  LOL I'm not sure why I needed this to remove that blind spot from earlier https://www.youtube.com/watch?v=kYB8IZa5AuE&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab

If it doesn't, you've got the answer, even though I'm sure AN can do it too and I'm in the process of figuring out.


text:
Vertex coordinate after pose change
I am working with a makehuman model in blender. To change the pose of the model I modify the scale and rotation parameters of the bones. The code looks similar to
bpy.context.object.pose.bones['hand.fk.R'].rotation_euler[0] = 0

My goal is now to get the location of a specific vertex after some pose changes. I already tried to transform the vertex location with the object world matrix
bpy.data.objects['makehuman'].matrix_world * v.co

but since the world matrix is an identity matrix the result is the same independent from the current pose.
How can I derive the vertex location after a pose change, or is it even possible?

You can use Object.to_mesh() to create a mesh datablock, which has deformations and modifiers applied. Mesh.transform() that with .matrix_world for world space:
import bpy

C = bpy.context
ob = C.object

print(ob.data.vertices[0].co, "- Vert 0 (original)")

me = ob.to_mesh(scene=C.scene, apply_modifiers=True, settings='PREVIEW')
print(me.vertices[0].co, " - Vert 0 (deformed/modified)")

me.transform(ob.matrix_world)
print(me.vertices[0].co, " - Vert 0 (deformed/modified, world space)")

bpy.data.meshes.remove(me)

Note that vertex indices may differ after modifiers are applied (e.g. Array, Bevel, ...).
Alternatively, the bmesh module can be used to achieve the same as the above script.

When the indices differ, how can i get the coordinated of a transformed vertex. I tried the above code, and if the vertex is unchanged, the index stays also the same, but in the other case i don't know how to derive the old vertex?

I haven't thought about this issue before, actually. With standard API, you could turn off the show_viewport of all modifiers temporarily, except the Armature modifier. to_mesh() will respect it. Obviously same problem with bmesh module. Maybe anyone else knows a good solution. It's not a problem however, as long as you don't use any fancy modifers on your posed meshed.

As far as I can say, I don't use any modifier on my posed mesh (if you mean the mesh from ob.to_mesh). However, I am new to blender, and I don't understand what you mean with turn off the show_viewport and how this could solve my problem?

Armature is a modifier (and an object type), so you need to apply modifiers with to_mesh(). If there's no modifier on your posed object other than the Armature modifier, access via index should be fine. If there are any other modifiers, you could temporarily turn them off in viewport (in python, by setting the .show_viewport property of each modifier), then use to_mesh(). Here is a code example

Ok, now it works. The problem was, that I had to update the scene, before your code. Thanks for your help.

What do you mean by "Alternatively, the bmesh module can be used to achieve the same as the above script.". Could be a little more specific?

The Bmesh module offers the same capabilities AFAIK: bm = bmesh.new(); bm.from_object(..., deform=True); bm.transform(...)

I am new to blender and I have no idea what you just said. However, I would like to try it. I am assuming it has something to do with the python console, but what must I do apply this in blender?


text:
Produce a transforming cone of equal edge length?

Lemon produced a renderable result.
There still might be a way to transform a circle curve along the sphere surface ?
Haven't done that yet, but the original visualization I wanted to produce using that in the process, I now posted as an answer, also achieved via modifiers as lemons.

Why remove tags ? Seems like a detrimental move.

Hi, could you add images to help understand what you want to do?

Possibly related https://blender.stackexchange.com/questions/50396/how-can-i-animate-a-mesh-moving-in-a-spiral-fashion

I was struggling to find a good representation.This gif doesn't show the tip/center of the circle stationary in the center of the virtual sphere, so it still isn't good.

The image corresponds to the first sentence, ok, but what the point with "sliding an edgeloop on a sphere"?

and it cuts a section out instead of constricting the surface/rolling/coiling it as a continuous action.

The sliding edgeloop by itself looks like what the result would look like, if the edgeloop could jump over other edgeloops and get to the pole.

I couldn't find a word differentiation between the circle as an edge, and circle as a dot possessing a surface. So the hierarchy would go like this: vertex/point, dot/circle, outer projection of the vertex/circumference/edgeloop. I'm not exactly on top of the nomenclature.

This is the example which would benefit from a "real sphere" I was alluding to when mentioning the "real circle/circumference" in the other question about unforseen circle intersections/vertices.

You mean that? https://i.sstatic.net/NIwzD.gif

There would alway be only one axis of sliding, depending on where the edgeloop is picked out from infinity.

YES that seems to look exactly like the bottom description, where the circumference is expanded into a torus.

But no Python nor nodes to do it... will try it as an answer and we'll see...

EDIT: Array is not necessary. Screw does it, if an axis object is selected.
Increasing the Screw factor produces a nice effect.

Inferior attempt:

A single edge is rotated via Array object offset (Epmty) and Screwed.
Aanimated the screw steps for effect.
I don't know how to Hide the first instance in the array, which would be necessary to leave only the "transforming cone".

Whoops... this second blend represents what I wanted to do with the generated cones, i.e. stack them and then get the areolas, but it seems finding a function which gives that result might be easier.
Tractrix - https://demonstrations.wolfram.com/ModelingAPseudosphereWithCones/

Hello :). This question keeps popping up as unanswered. Would you accept one of the answers? Thanks :).

Really unsure this is what is wanted in the question, but:

There is no Python nor animation nodes here. This is simply an animation.
The torus is done from a base little cylinder with an array and a simple deform to curve it:

Then animate an empty with a circle curve surrounding the torus:

And make this last empty parent of the torus.
Et voila:

All that is due to the simple deform which considers the object origin as base. As the parenting changes this origin location, it gives the result.
The curve is here to ensure that the result will be like 'around a sphere'.

You have quite a brain managing to concoct this XD but you already proved that with the tetrix, I still haven't dissected the meat of it cause of the sidetracking, just started viewing tutorials on the Animation nodes a few hours ago.

@t8ja As said, no animation nodes here... do you really need it?

was trying to edit the commnet but the time ran out. No, the result is good but it served to better visualize the base principle. The goal is to make a curve act like the torus is acting. You've made it easy for anyone wanting to chime in.

Still don't connect all that with the cone... if you want it conical, modifying the circle curve shape would work, maybe

or an edge loop since you cant make a cone surface using a curve.  It would make more sense if ideals were the basis, and you didin't need to implement modifiers untill you wanted to transform ideals into tangibles, though any interaction between ideals would make them more tangible/determined, ofc the trouble is when the user determined info isn't visible, neither edgeloops/curves or points/vertices are actually visible. That's why I made a mistake here. What I'm asking cant actually ba an animation LOL

mmm.. I've the feeling here my english is at its limits... finally, what you want is the exact same animation that you posted in the question?

Appears so. It's frustrating the approaches, to basically the same thing, are so different.

@t8ja, sorry but I don't get what you are asking. Could you provide pictures?

I bet you could do it with animation nodes, because you only need to know the (z) constraint coordinates (which depend on the starting radius of the curve)  and have the curve scale down accordingly as it moves along the z axis, both in positive and negative direction.

the solid tous ofc, isn't a real torus, but I'm guessing there's a possibility to project a solid torus around the curve once it's doing what you want.

Have I managed to explain it ? I've had trouble posing the question since I'm not familiar with the methods. The one you used to create this torus was VERY unexpected for me.  BTW I didin't even know about Animation nodes when i posed the tertix question, I just had a hunch a node based system might exist.

@t8ja, still don't know what you want to obtain...! Could you draw something?

How is that even possible XD You already did it, just not in a way that has the advantages of being based on a Bezier, which itself is transforming, and could have a torus (and more) based upon it.

Am I making sense ?

@t8ja, well as I told you, I don't understand what you mean, sorry.

I'm sure I'll be able to do it after watching more AN tutorials LOL , I sidetracked into video editing and motion tracking, but I'll get to it.

I just want to make the bezier curve circle transform (translate and scale) so that if you could see all the positions it goes through at once ("long eyposure"), it would look like a sphere. / or as if it's sliding over a sphere.

but it could also do the impossible and pass through itself on the pole, which would reverse its' direction, so anything you animate moving along it, would go up one way, down the other

In French youtube.com/watch?v=ViuMCBoxZWQ&t=5m24s The qiestion is can Shinkwrap keep the curve conformed during transforms ? I'm guessing it can  Edit:  And it does!  Great

except the object on curve path doesn't follow the curve once it starts shrinkwrapping along the sphere

all that still don't tell clearly the real final purpose of your question.

There are multiple possible results, The object moving on a loxodrome path is one of them, and if the curve can be used to make a surface between it and the center of the sphere, then the originaly described cone/funnel transformation can be made. .

ok, it's more clear said like this. Will try to think about the how to.