#1
|
|||
|
|||
Axis Coordinates from Inspector
I am having a little trouble finding the axis relative to the global coordinate system of an object from within Vizard. When I get the handle for the object in question, and try to get the coordinates, I see that it should be perpendicular to the global axis.
Code:
screw.getAxisAngle(mode=viz.ABS_GLOBAL) [-1.0, -0.0, 0.0, 90.0]
__________________
|
#2
|
|||
|
|||
The axes in Inspector contains the accumulated transform of the selected node path. You can find the equivalent transform by calling:
Code:
xform = node.getMatrix(viz.ABS_GLOBAL,node='name') I just noticed that this command won't work if the name refers to a leaf (drawable) node. This will be fixed in the next release though. |
#3
|
|||
|
|||
That's exactly what I'm looking for. Thanks.
__________________
|
#4
|
|||
|
|||
So to follow up, I've been able to reproduce the coordinate system in inspector. However, I am now trying to move that screw along one of the axis of that coordinate system by doing the following:
Code:
moveaction = vizact.moveTo(y_trans,time = 1.0, mode = viz.ABS_GLOBAL) screw.addAction(moveaction)
__________________
|
#5
|
|||
|
|||
No, you will want to use the default viz.ABS_PARENT mode, since you want the screw to move along its local axes.
How are you getting a handle to the screw object in Vizard? Are you using the getChild command? |
#6
|
|||
|
|||
I am calling the <node3d>.getChildren() function from the parent object.
__________________
|
#7
|
|||
|
|||
I'm not sure if it's clear on what I'm trying to do. The first attached picture contains two coordinate axis drawn on the screw. The first one replicates the coordinate system that is created in inspector with axis colored red, green and blue. The second coordinate system shares its origin with the first, but is drawn to represent the global x,y,z coordinate system.
The basis for the first coordinate system is from the matrix created from the command: Code:
<node3d>.getMatrix(viz.ABS_GLOBAL, node='Inst-1430') [ 0.000000, -0.004384, -0.008988, 0.000000, -0.000000, 0.008988, -0.004384, 0.000000, 0.010000, 0.000000, 0.000000, 0.000000, -0.381762, -0.560596, -2.557960, 1.000000 ] Code:
[-0.381762 + 0.0, -0.560596 + (-0.004384), -2.557960 + (-0.008988)] I made the assumption that using the command Code:
moveaction = vizact.moveTo(y_trans, mode = viz.ABS_GLOBAL) <node3d>.addAction(moveaction) Here is the complete code I am using to draw those axis: Code:
def draw_line(p, axis, color): viz.startLayer(viz.LINES) viz.lineWidth(3) viz.vertexColor(color) viz.vertex(p) viz.vertex(axis) viz.endLayer() def debug_script(): #Data is a helper class that creates a global object to share all of our object data between scripts part = Data.getData().parts_list[0] global screw screw = part.getChildren()[0] point = [-0.381762, -0.560596, -2.557960] x_axis = [ 0.000000, -0.004384, -0.008988] y_axis = [ -0.000000, 0.008988, -0.004384] z_axis = [ -0.01, -0.00, 0.00] x_global = [1.0, 0.0, 0.0] y_global = [0.0, 1.0, 0.0] z_global = [0.0, 0.0, 1.0] global x_trans x_trans = [point[i] + x_axis[i]*30 for i in range(3)] global y_trans y_trans = [point[i] + y_axis[i]*30 for i in range(3)] global z_trans z_trans = [point[i] + z_axis[i]*30 for i in range(3)] draw_line(point, x_trans, [1,0,0]) draw_line(point, y_trans, [0,1,0]) draw_line(point, z_trans, [0,0,1]) x_global_axis = [point[i] + x_global[i] for i in range(3)] y_global_axis = [point[i] + y_global[i] for i in range(3)] z_global_axis = [point[i] + z_global[i] for i in range(3)] draw_line(point, x_global_axis, [1,1,0]) draw_line(point, y_global_axis, [1,0,1]) draw_line(point, z_global_axis, [0,1,1])
__________________
|
#8
|
|||
|
|||
There is not enough information for me to say what the problem is. My guess is you are applying the transformation at the wrong hierarchy in the scene. node.getChildren will not return anything unless you previously called node.getChild or parented a node to the object. So it's not clear to me exactly which node you are operating on.
Click on the screw you want to translate in Inspector, then post a screenshot of the node path bar at the top, showing the full hierarchy of the screw. This should provide me with enough information to post some sample code for you. |
#9
|
|||
|
|||
Here is the screen cap you requested.
__________________
|
#10
|
|||
|
|||
Thanks. The following code should translate the screw object along its local Y-axis:
Code:
screw = model.insertGroupBelow('Inst-1430') screw.setPosition([0,0.1,0]) Make sure you only call insertGroupBelow once per sub-node, since each call will insert a new node. |
#11
|
|||
|
|||
That appears to be what I am looking for. Thank you for your patience and help with this.
__________________
|
#12
|
|||
|
|||
Quick question regarding the nodes created by the insertGroupBelow command. I'm finding that these nodes seem to be immutable. Is there a reason for that?
__________________
|
#13
|
|||
|
|||
To clarify, I have a node n:
sub_n = n.insertGroupBelow(<nodename>) So when I want to add an attribute to sub_n like: sub_n.parentNode = n I cannot access that parentNode attribute.
__________________
|
#14
|
|||
|
|||
It's still not clear what the problem is. Are you getting a Python exception when trying to set an attribute? If so, what is the error? Can you post some sample code that reproduces the error?
The following code works correctly for me: Code:
model = viz.addChild('gallery.osgb') group = model.insertGroupBelow('gallery') group.myattribute = 'some value' print group.myattribute |
#15
|
|||
|
|||
Definitely. Sorry for lack of information.
The problem seems to be that when I call insertGroupBelow on a node, that group replaces the node. So here is what I'm doing: Code:
sub_instance = p.insertGroupBelow(subnode) sub_instance.parentNode = p.instanceName ''' this copies defined properties from the parent node to the sub node ''' CADParser.copyParams(p, sub_instance) sub_instance.inCollide = [] Code:
def copyParams(src,dst): dst.instanceNumber = src.instanceNumber dst.instanceName = src.instanceName dst.partNumber = src.partNumber dst.anarkParent = src src.anarkGroup = True dst.anarkGroup = True param_list = ["anarkFreeMovement" , "anarkTrans" , "anarkRotate" , "anarkRehomePos" , "anarkRehomeOri" , "anarkDependency" , "anarkColor" , "anarkAlpha" , "anarkBackface" , "anarkShader" , "anarkDescription" , "anarkImage" , "anarkModule" , "anarkLocal" , "anarkTool" , "layerSpacing" , "anarkRequires" , "anarkModRotate" , "anarkRev" ] for param in param_list: if hasattr(src, param): exec("dst." + param + " = src." + param) else: try: exec("del dst." + param) except: pass if hasattr(dst, "anarkColor"): src.color(dst.anarkColor) if hasattr(dst, "anarkShader"): if dst.anarkShader == "smoothmetal": reflect = viz.add('image2.jpg') dst.texture(reflect,'',1) dst.appearance(viz.TEXGEN,'',1) if hasattr(dst, "anarkRotate"): src.rotatingParent = dst Code:
'''Only executed when this part has been marked as being an inserted group''' print part.anarkParent
__________________
|
#16
|
|||
|
|||
Because I can no longer edit my post,
Remove the code Code:
else: try: exec("del dst." + param) except: pass
__________________
|
#17
|
|||
|
|||
It is turning out to be that the part handle I thought was the group I created, is not the part I'm accessing in the other script.
I'm doing more digging to get the correct part handle.
__________________
|
#18
|
|||
|
|||
And not having the correct part handle was indeed the case. Thanks again Farshizzo.
__________________
|
#19
|
|||
|
|||
Re-opening the issue
I've come across some special cases here where we have parts that are modeled using multiple meshes. I would like to grab the handle of the highlighted part in the inspector picture, and move it along it's local coordinate axis. When I use the method of grabbing the two sub instances and move them the same distance along their coordinate axis, the behavior in the second attached picture is observed.
__________________
|
#20
|
|||
|
|||
I tried re-creating this issue without all of my extra code libraries, and was unable to. When I dug further, I found that the parts were being moved multiple times at different levels of the hierarchy.
In short, this issue is resolved.
__________________
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Haptic touch texture coordinates | yth | Vizard | 0 | 06-02-2012 03:40 AM |
How do coordinates in IS900 thransform into coordinates in vizard's world | jacky | Vizard | 1 | 08-11-2011 10:44 AM |
child-objects in VRML-file all have the same coordinates | Sven | Vizard | 4 | 06-09-2010 02:07 AM |
viz.vertex coordinates | lilio | Vizard | 6 | 05-16-2009 04:36 PM |
Object rotating around world axis, not own axis | tacbob | Vizard | 1 | 02-15-2007 09:12 AM |