2009/7/10 Nathan Lauener <[email protected]> > >> Hi, > >> > >> I'm pretty new to pythonocc and am impressed by it. Thanks for your > work! > >> > >> After I ran across splines the other day I am now trying to use > >> opencascade and pythonocc for curve definitions and anaylsis. But I > >> could not figure out how to concat two splines into one. The mailing > >> list and searching the internet only showed examples on how to do it in > >> C++, and I can not adopt it to python! The function I'd like to use is > >> GeomConvert().ConcatG1(), but I can't figure out how to declare the > >> third parameter of type Handle_TColGeom_HArray1OfBSplineCurve. I always > >> get a constructor or type error. See the listing of my little sample > >> programm. > >> > >> #Line > >> L2 = GC_MakeSegment(L1.Lin(),0,8) > >> L3 = Geom_TrimmedCurve(L1.GetHandle(),0,8) > >> L3_S = > >> > >> > GeomConvert().CurveToBSplineCurve(L3.GetHandle(),Convert.Convert_TgtThetaOver2 > >> ) > >> > >> #Circle > >> P2 = gp_Pnt(2,8,0) > >> N = gp_Dir(0,0,-1) > >> C1 = Geom_Circle(gp.gp_Ax2(P2,N),2) > >> C3 = Geom_TrimmedCurve(C1.GetHandle(),0,math.pi/2) > >> C3_S = > >> > >> > GeomConvert().CurveToBSplineCurve(C3.GetHandle(),Convert.Convert_TgtThetaOver2 > >> ) > >> > >> #concat > >> curves = TColGeom_Array1OfBSplineCurve(0,1) > >> curves.SetValue(0,L3_S) > >> curves.SetValue(1,C3_S) > >> print curves.Length() > >> tol = TColStd_Array1OfReal(0,0) > >> tol.SetValue(0,0.0) > >> > >> newCurve = Handle_TColGeom_HArray1OfBSplineCurve() > >> GeomConvert().ConcatG1(curves, tol, newCurve, False, 0.0) > >> > >> Regards, > >> Nathan > >> > > > Hi Nathan, > > > > I don't see any error in your code. Can you provide the traceback > > and/or a sample script so that we can help you to figure out what's > > wrong? > > > > Regards, > > > > Thomas > > Hi Thomas > > Thanks for the quick answer. The following traceback is printed > > Traceback (most recent call last): > File "example.py", line 35, in <module> > GeomConvert().ConcatG1(curves, tol, newCurve, False, 0.0) > File "/usr/lib/python2.5/site-packages/OCC/GeomConvert.py", line 266, in > ConcatG1 > return _GeomConvert.GeomConvert_ConcatG1(*args) > RuntimeError: Standard_ConstructionError > > And here the sample program: > > #!/usr/bin/env python > > from OCC.gp import * > from OCC.Geom import * > from OCC.GeomConvert import * > from OCC.TColStd import * > from OCC.TColGeom import * > from OCC.GC import * > > import math > > #Line > P1 = gp_Pnt(0,0,0) > D = gp_Dir(0,1,0) > L1 = Geom_Line(P1,D) > L2 = GC_MakeSegment(L1.Lin(),0,8) > L3 = Geom_TrimmedCurve(L1.GetHandle(),0,8) > L3_S = > GeomConvert().CurveToBSplineCurve(L3.GetHandle(),Convert.Convert_TgtThetaOver2) > > #Circle > P2 = gp_Pnt(2,8,0) > N = gp_Dir(0,0,-1) > C1 = Geom_Circle(gp.gp_Ax2(P2,N),2) > C3 = Geom_TrimmedCurve(C1.GetHandle(),0,math.pi/2) > C3_S > =GeomConvert().CurveToBSplineCurve(C3.GetHandle(),Convert.Convert_TgtThetaOver2) > > #concat > curves = TColGeom_Array1OfBSplineCurve(0,1) > curves.SetValue(0,L3_S) > curves.SetValue(1,C3_S) > tol = TColStd_Array1OfReal(0,0) > tol.SetValue(0,0.0) > > newCurve = Handle_TColGeom_HArray1OfBSplineCurve() > GeomConvert().ConcatG1(curves, tol, newCurve, False, 0.0) > > > Regards, > Nathan >
Hi Nathan,
You use the API properly. The 'Standard_ConstructionError' exception is
raised by OpenCASCADE and catched by pythonOCC. It means it's a geometric
(or topological) issue. I tested your script and the problem come from the
tolerance you set: you should not set 0 (tol.SetValue(0,0.0)) but rather a
positive float number (for instance 0.1: tol.SetValue(0,0.1)).
Attached the screenshot and your modified script.
Enjoy,
Thomas
#!/usr/bin/env python
from OCC.gp import *
from OCC.Geom import *
from OCC.GeomConvert import *
from OCC.TColStd import *
from OCC.TColGeom import *
from OCC.GC import *
from OCC.BRepBuilderAPI import *
import math
from OCC.Display.wxSamplesGui import display,start_display
def make_edge(shape):
spline = BRepBuilderAPI_MakeEdge(shape)
spline.Build()
return spline.Shape()
#Line
P1 = gp_Pnt(0,0,0)
D = gp_Dir(0,1,0)
L1 = Geom_Line(P1,D)
L2 = GC_MakeSegment(L1.Lin(),0,8)
L3 = Geom_TrimmedCurve(L1.GetHandle(),0,8)
L3_S =
GeomConvert().CurveToBSplineCurve(L3.GetHandle(),Convert.Convert_TgtThetaOver2)
#Circle
P2 = gp_Pnt(2,8,0)
N = gp_Dir(0,0,-1)
C1 = Geom_Circle(gp.gp_Ax2(P2,N),2)
C3 = Geom_TrimmedCurve(C1.GetHandle(),0,math.pi/2)
C3_S
=GeomConvert().CurveToBSplineCurve(C3.GetHandle(),Convert.Convert_TgtThetaOver2)
#concat
curves = TColGeom_Array1OfBSplineCurve(0,1)
curves.SetValue(0,L3_S)
curves.SetValue(1,C3_S)
tol = TColStd_Array1OfReal(0,0)
tol.SetValue(0,0.1)
newCurve = Handle_TColGeom_HArray1OfBSplineCurve()
GeomConvert().ConcatG1(curves, tol, newCurve, False, 0.0)
# Display curve
display.DisplayShape(make_edge(newCurve.GetObject().Value(0)))
start_display()
<<attachment: scr_test_nathan.JPG>>
_______________________________________________ Pythonocc-users mailing list [email protected] https://mail.gna.org/listinfo/pythonocc-users
