2010/2/25 Thomas Paviot <tpav...@gmail.com>

> 2010/2/25 Willy Hertz <willy.he...@yahoo.com>
>
> The conversion between TopoDS_Shapes, Vertices and Coordinates is driving
>> me crazy.
>> My goal is to find the vertex coordinates of any displayed object. I found
>> a few similar questions here and in the opencascade forums, but the replies
>> seem not to work with pythonOCC. I am trying the following procedure:
>> 1) extract all vertices with TopExp_Explorer
>> 2) convert each TopoDS_Shape into a Vertex
>> 3) get the coordinates using OCC.BRep.Brep_Tool.Pnt(vertex) ... not
>> discussed in this post
>>
>> Please have a look at the following code, which creates an Edge and
>> attempts to extract the vertices.
>> Unfortunately in step 1) three shapes with ShapeType=Vertex are returned,
>> the first two being identical and pointing to Null. Why?
>>
>
> Hi Willy,
>
> This point has already been discussed on this ml (I don't have the
> reference to the discussion, will find it).
>
> Jelle implemented a topology traversing algorithm on top of the built-in
> TopExp_Explorer class. I sugest you use it. It can be done very simply:
>
> from OCC.Topology import topo
> t = Topo(my_TopoDS_Shape)
>
> Then you can iterate to ver shapes, vertices, edges etc:
>
> for vertex in t.vertices():
>     ...do_whatever_you_want
>
> Have a look at the source code of the Topo class (
> http://code.google.com/p/pythonocc/source/browse/trunk/src/addons/Utils/Topology.py)
> and/or the documentation (http://www.pythonocc.org/APIREF/index.html).
>
> Best Regards,
>
> Thomas
>
>
>> In step 2) the method TopoDS.Vertex(vs[2]), applied to the third shape
>> vs[2] complains about "<type 'exceptions.RuntimeError'>:
>> Standard_TypeMismatch".
>>
>> How do I retrieve the Vertex coordinates of an Edge or (later) any other
>> Shape?
>>
>> Regards,
>> Willy
>>
>> The code example:
>> from OCC.BRepBuilderAPI import *
>> from OCC.TopoDS import *
>> from OCC.TopAbs import *
>> from OCC.TopExp import *
>> from OCC.gp import *
>>
>> e=BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,0),gp_Pnt(0,0,1)).Edge();
>> exp=TopExp_Explorer()
>> exp.Init(e,TopAbs_VERTEX)
>> vs=[exp.Current()]
>> exp.Next()
>> vs=vs+[exp.Current()]
>> exp.Next()
>> vs=vs+[exp.Current()] #strangely 3 vertices are found
>>
>> print 'identical:'
>> print vs[0]==vs[1] #True
>> print vs[1]==vs[2] #False
>> print 'IsNull:'
>> print vs[0].IsNull() #True
>> print vs[1].IsNull() #True
>> print vs[2].IsNull() #False
>>
>> tds=TopoDS()
>> vx=tds.Vertex(vs[2]) #ERROR: <type 'exceptions.RuntimeError'>:
>> Standard_TypeMismatch
>> print vx
>>
>>
>>
My previous message was not very clear. Here is a small sample to illustrate
it: a box is created, all vertices are then obtained from the Topo class (8
vertices) and converted to a gp_Pnt. Finally, the X,Y an Z coordinates are
displayed:

############## Python Code ##################
from OCC.BRepPrimAPI import *
from OCC.Utils.Topology import *
from OCC.BRep import *

# Create shape
my_shape = BRepPrimAPI_MakeBox(10,20,30).Shape()

# Traverse topology
t = Topo(my_shape)
for vertex in t.vertices():
    pnt = BRep_Tool().Pnt(vertex)
    print 'X',pnt.X(),'Y',pnt.Y(),'Z',pnt.Z()
############# End of python code ################

And here is the ouput:
X 0.0 Y 0.0 Z 30.0
X 0.0 Y 0.0 Z 0.0
X 0.0 Y 20.0 Z 30.0
X 0.0 Y 20.0 Z 0.0
X 10.0 Y 0.0 Z 30.0
X 10.0 Y 0.0 Z 0.0
X 10.0 Y 20.0 Z 30.0
X 10.0 Y 20.0 Z 0.0
_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to