# Looking for a way to apply precise coordinates

Hello !

The goal :
I worked on a part of a already symetric model, and now I want to apply the changes I did on the right side to the left side. The great problem is that I can’t just do a mirror because I must keep the existing indices of the vertex. I’m a beginner on Blender and because I have little control over it, I opt for a simple solution : I wanted to list the coordinate and enter them manually, with the X value inverted, even if it’s a little bit tedious (not too much, I only have 40 points to change).

The problem :
The coordinates of vertex are displayed with only 4 decimal . Even worse : a copy/paste had no effect, because the copy operation only takes care of the text displayed for X,Y or Z and not of the real value. I tried to find a “Python solution” without success, and I have no time now to learn this language. I also tried to scale my model 1000X to see more decimal, but I find that it’s a very “ugly” solution.

I am so short of solution that I am about to go back to my old modeler (which display up to the 10th decimal)

Is there a solution I don’t know ? Or a miracle tool which allow me to apply coordinate symetricaly ?

first problem is that blender internal is limited to 7 digits
so cannot have 10 digits

python has that but when you pass it on to blender it will be back with single precision number!

why do you need to keep the verts index ?
may be use curves instead !

happy bl

Even if you copy the half and scale it on a negative 1 value? Like “Shift+D” then “S” “-1” ? Not sure as RickyBlender asked, why so specific? Is this for a 3d print or something that needs to me to the exact micrometer value?

I need the vertex index because the object is a morph for Daz Studio. If I alter the model in any way, especialy the order of vertices, the morph won’t work (the tool to create morphs calculates deltas between vertex with the same index number).
That’s why I said mirror copy is forbidden to me. I don’t model from scratch, I modify an existing object.

May be 7 digits may be enough, but 5 ('mistaken, it’s not 4) is cleary not enough : the changed vertex on the right side show the same value as the unchanged vertex on the left side (in negative, of course) : for example, when I select alternatively a vertex and its “opposite pair”, I read : right X = -2.73518 and left X = 2.73518. But when I scale X1000, I read : right X = -2735.12939 and left X = 2735.23047. As you see, the “normal” last digits “…18” are transformed into “…12939” and “…23047”, which is different from a simple rounded. I don’t understant how Blender works to display coordinates. At object scale X1000, Blender have more strange behaviours, it’s not possible to work correctly.

I continued testing yesterday, and after a scaling X100, my example became right X = -273.51300 and left X = 273.52298… suitable… It appears it’s currently the best solution : scale the objet X100, work on it, scale the object X0.01.
Probably the best solution would be to create a python tool to automaticaly copy the coordinate from a vertice to another, but python scripts are not as easy to tackle as I hoped.

annoying…
or not annoying if we can fully use a double precision in python. After all, the display isn’t important if the vertices has the correct values.

with scale of 1 blender internal has numbers like 9999.XYZ
so what you see in N panel values shows more digits but this is using Windows format font and not representing the real blender values!

so be careful
if you need more digits on the right then change the scale !

for verts index not certain if it is added at the end of verts list !

it is Bmesh data that determines how these index list are updated
not certain you can maintain fix verts index for mesh

but curve do have a fix index values for points !

Blender is not a CAD soft

happy bl

Nor Lightwave but…
Anyway, thank you very much for your answer.
And I can confirm that the vertices index list is static : all my tests to apply a morph/object from Blender in Daz Studio were successful, proving that the indexes don’t change, at least with the tools I used (move, scale,…)

Hi,
There is not such thing as “Blender behavior”
It’s only a matter of single precision floating point. Blender store floats with 32 bits. Starting from there, all the rest of what you call a strange behaviour is totally normal, and pure math

Maybe you should have a look on this wikipedia page about floating point

And yes, as RickyBlender said, Blender is not a CAD soft…

To come back to your problem, it would have been much easier with Python, but I agree that it’s not a solution if your are in a hury because you won’t learn it within a day…

Nevertheless, if you happen to do it again with more vertex, come back here and I could help you by providing you a piece of code to achieve what your are trying to do…

See you
++
Tricotou

1 Like

Very interesting proposition, tricotou !

Because it’s not “if you happen…”, it WILL happen, soon or later. If I have the tool, it will be soon; if I don’t have the tool, it will be later; I will temporize or hesitate to start a project … or, as a last resort, I will use another tool (in this case, Lightwave, which I try to leave).

I’m “in hurry” because this little morphs is the last thing I have to do. It’s just impatience, and for this time, I will manage “manually”. But if I have a tool to do all the boring work, be sure that I already have a project in mind to test the tool.

So feel free to create the tool ! It will be welcomed with great joy !! My problem of symetrizing a “one side modification” is recurring. I would love to have a tool to make my life easier in Blender, and “this” will happens quite often. If you have any impediment, it does not matter, I already appreciate your intention to lend a hand

See you

Ok, so I guess it’s Christmas today
Well, Here is a piece of code for you !

You just need to :

1. Open a text window in your blender project, and load the downloaded script
2. Duplicate (using SHIFT+D, not ALT+D) the object you are working on, and rename the copy ref (The script will use it as a reference to analyse the symmetry) This copy must be done before changing the symmetry !
3. Do your modeling on X > 0. (The only thing you may change in the script is the AXIS variable which allows to switch to Y or even Z symmetry)
4. Come back to Object Mode, and hit the Run Script button each time you want to apply symmetry. And of course vertices indices remain unchanged !

See you !
++
Tricotou

will test this later on

is this for mesh with Bmesh or only with tri’s or quads
and does it work in 2.8 too ?

thanks for sharing
happy bl

Hi Tricotou,

Ahah ! So it’s YOU, the big guy in red suit who drives a sleigh on christmas night !! I always knew that I would discover your identity one of these days !

I tested your code during 2-3 hours. Of course, I did first the mistake to apply a deformation on the left side (negative X) and discover that your script is a good “eraser” : it recover the original object very well !

More seriously, the results are :

• test with monkey head (your example) : it works fine
• test with a Daz character (about 35000 vertices, normaly fully symetric) : About 30mn with the waiting pointer, obviousness : Blender froze.
• test with a different character (symetric, about 20000 vertices) : Blender froze again.
• test with a .obj not totally symetric, about 8000 vertices : Blender froze.
• test with a basic torus (~ 600 vertices) : it works !
• test with a deformed basic torus (non symetric) : it works very good, the script seems to symetrize only the vertices with an opposite X.
• test with a torus with approx. 8000 vertices : Blender froze.
• test with a torus with + of 4000 vertices : it works but it take quiet a long time.
• test with a deformed torus with + of 4000 vertices (non symetric) : it works as well as the basic torus.

I strongly suspect that a great number of vertices is a great problem (because of nested loops ?). I said Blender froze but I suspect that Blender simply took a huge time for the processing, so huge that it seems frozen.

Anyway, your script has great potential and works fine (I tested a “vertical” deformation, without X modification, the script isn’t in default)… it would be perfect if there wasn’t this problem of “very big objects”

Is there a possibility to limit the working area, to limit the number of vertices to check ?

Hi !

Yep it’s me

Ahah, you where speaking about moving by hand some dozens of vertices, that’s why I coded a “very dirty” solution, with a lot of loops (Python use to be sooo slow on loops) … Considering that you want to use it with a 35k polys object, I would had done it very different

Everything is possible when you come to code ^^

++
Tricotou

Slight mutual incomprehension : it’s actually a dozen of vertices… on a object with 35k polys
(Morphs I did could be more than a dozen but rarely exceed 500 vertices, commonly an average between 100-200 vertices)

So ? Still on the case ? Must I prepare myself to test a new version of the script during 2-3 more hours ?
I was surprise by your coding speed… I don’t have be to be that fast, I have plenty of work to do, enough set the morph projet aside for a moment.

CU

Maybe on next week

Ahah it’s kind of a shame to say that, when you see how dirty is the code I provided you, but, at work I spend 8 hours a day coding inside Blender, so … ^^

Yes me too. That’s why I spent no more than 5 minutes on the last version, and that will be the same for next one !

See you
++
Tricotou