From 3cdf240cf13ef41475158e8dd8c6d7e479b8cc2a Mon Sep 17 00:00:00 2001 From: jfa Date: Wed, 12 Sep 2012 10:41:33 +0000 Subject: [PATCH] Mantis issue 0021392: EDF 1631 GEOM: Dump study of sketcher 3D with relatives coordinates. --- doc/salome/gui/GEOM/doxyfile_py.in | 4 +- doc/salome/gui/GEOM/images/3dsketch2.png | Bin 23548 -> 30461 bytes .../gui/GEOM/input/creating_3dsketcher.doc | 49 +++-- doc/salome/gui/GEOM/input/tui_3dsketcher.doc | 35 +++- src/GEOMGUI/GEOM_msg_en.ts | 4 + src/GEOM_SWIG/GEOM_TestAll.py | 18 +- src/GEOM_SWIG/Makefile.am | 1 + src/GEOM_SWIG/geompyDC.py | 79 ++------ src/GEOM_SWIG/gsketcher.py | 182 ++++++++++++++++++ 9 files changed, 283 insertions(+), 89 deletions(-) create mode 100644 src/GEOM_SWIG/gsketcher.py diff --git a/doc/salome/gui/GEOM/doxyfile_py.in b/doc/salome/gui/GEOM/doxyfile_py.in index c35ee2024..bd50daa50 100755 --- a/doc/salome/gui/GEOM/doxyfile_py.in +++ b/doc/salome/gui/GEOM/doxyfile_py.in @@ -99,8 +99,8 @@ EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = . @top_srcdir@/idl -FILE_PATTERNS = geompy.py GEOM_Gen.idl +INPUT = geompy.py @top_srcdir@/src/GEOM_SWIG/gsketcher.py @top_srcdir@/idl/GEOM_Gen.idl +FILE_PATTERNS = IMAGE_PATH = @srcdir@/images EXAMPLE_PATH = @top_srcdir@/src/GEOM_SWIG RECURSIVE = NO diff --git a/doc/salome/gui/GEOM/images/3dsketch2.png b/doc/salome/gui/GEOM/images/3dsketch2.png index 51f171d9f16d5d32fba0322c9e4c496c4f28f7a7..1925ecfd833e23971b95dc5315e1435cabecde15 100755 GIT binary patch literal 30461 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
}rmJcl-MP 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 diff --git a/doc/salome/gui/GEOM/input/creating_3dsketcher.doc b/doc/salome/gui/GEOM/input/creating_3dsketcher.doc index fcc0ba56d..651ebc461 100755 --- a/doc/salome/gui/GEOM/input/creating_3dsketcher.doc +++ b/doc/salome/gui/GEOM/input/creating_3dsketcher.doc @@ -2,41 +2,56 @@ \page create_3dsketcher_page 3D Sketcher -3D Sketcher allows creating a closed or unclosed 3D wire from a list of points. +3D Sketcher allows creating a closed or unclosed 3D wire, made of +consequent straight segments. To create a 3D Sketch, select in the main menu New Entity -> Basic -> 3D Sketch. \image html 3dsketch2.png -In this dialog it is possible to define the coordinates of the points. +The first sketcher point can be defined by \b Absolute coordinates X, Y and Z. +When the first point is defined, it is possible to add straight segments. +Each segment will start at the end point of previous segment or at the +sketcher first point, if there are no validated segments. -The position of each point can be defined by \b Absolute coordinates X, Y, Z or -by \b Relative coordinates DX, DY, DZ with respect to the previous Applied point. -The type of coordinates can be selected by the Coordinates Type +Segment can be defined by: + - \b Absolute coordinates X, Y and Z of its second end, + - \b Relative coordinates DX, DY and DZ of its second end with + respect to the previous applied point, + - \b Direction and \b Length of the segment. Direction is set by two + \b Angles in selected coordinate system. + +The way of segment construction can be selected by the Coordinates Type radio buttons. -To add the point in the list of points and to proceed with the -definition of the next point, click Apply button. \b Undo and -\b Redo buttons, respectively, remove or restore the last point in the list. +To validate the segment and to proceed with the definition of the next +segment, click Apply button. \b Undo and \b Redo buttons, +respectively, remove or restore the last segment in the wire. \n "Sketch Validation" button applies the wire, built by the user, "as is". \n "Sketch Closure" closes the Sketch by a straight line from the start to the end point and applies it. -To make a closed wire using the TUI command, the first and the last point should -have the same coordinates. - -The Result of the operation will be a \b GEOM_Object. - -TUI Command: geompy.Make3DSketcher( [ PointsList ] ) -This algorithm creates a wire from the list of real values, which define XYZ -coordinates of points. - Example: \image html 3dsketch1.png +TUI Command: geompy.Make3DSketcher( [ PointsList ] ) +This algorithm creates a wire from the list of real values, which +define absolute XYZ coordinates of points. The Result of the operation +will be a \b GEOM_Object. + +\note To make a closed wire using this TUI command, the first and the +last point should have the same coordinates. + +\n Another way to create the 3D Sketcher in TUI is using Sketcher3D +interface. +TUI Command: sk = geompy.Sketcher3D() +Returns an instance of Sketcher3D interface sk. +Use the below examples and see the \ref gsketcher.Sketcher3D "Sketcher3D" +interface documentation for more information. + Our TUI Scripts provide you with useful examples of the use of \ref tui_3dsketcher_page "3D Sketcher". */ diff --git a/doc/salome/gui/GEOM/input/tui_3dsketcher.doc b/doc/salome/gui/GEOM/input/tui_3dsketcher.doc index c9760fbcf..4916dfce2 100755 --- a/doc/salome/gui/GEOM/input/tui_3dsketcher.doc +++ b/doc/salome/gui/GEOM/input/tui_3dsketcher.doc @@ -7,14 +7,43 @@ import geompy import salome gg = salome.ImportComponentGUI("GEOM") -# create a 3D sketcher (wire) of the given points coordinates +# Create a 3D sketcher (wire) on the given points coordinates sketcher1 = geompy.Make3DSketcher([ 0,0,0, 50,50,50, 0,50,0, 50,0,50, 10,20,100, 0,0,0 ]) # add object in the study -id_sketcher1 = geompy.addToStudy(sketcher1,"Sketcher1") +id_sketcher1 = geompy.addToStudy(sketcher1, "Sketcher1") # display the sketcher gg.createAndDisplayGO(id_sketcher1) + +# Create a 3D sketcher (wire) with Sketcher3D interface + +# get the interface instance +sk = geompy.Sketcher3D() + +# add three points with absolute coordinates +# the first point will be the start point of sketcher +# two segments will be added by this command +sk.addPointsAbsolute(1,2,3, 7,0,0, 10,-3.5,-11) + +# add one segment, defined by two angles in "OXY" coordinate system and length +sk.addPointAnglesLength("OXY", 45, 0, 100) + +# add three points with relative coordinates +# three segments will be added by this command +sk.addPointsRelative(20,0,0, 20,0,100, -40,0,-50) + +# set to close the sketcher +sk.close() + +# obtain the sketcher result +sketcher2 = sk.wire() + +# add object in the study +id_sketcher2 = geompy.addToStudy(sketcher2, "Sketcher2") + +# display the sketcher +gg.createAndDisplayGO(id_sketcher2) \endcode -*/ \ No newline at end of file +*/ diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 4f503aae2..e677b0980 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -1842,6 +1842,10 @@ Please, select face, shell or solid and try again GEOM_COORDINATES_TYPE Coordinates Type + + GEOM_CONTROLS + Dimensions + GEOM_SOLID Solid diff --git a/src/GEOM_SWIG/GEOM_TestAll.py b/src/GEOM_SWIG/GEOM_TestAll.py index 3e7c14dc2..550cd7843 100644 --- a/src/GEOM_SWIG/GEOM_TestAll.py +++ b/src/GEOM_SWIG/GEOM_TestAll.py @@ -105,8 +105,18 @@ def TestAll (geompy, math): Interpol = geompy.MakeInterpol([px, py, p200, pxyz], True) #(List of GEOM_Object,Boolean)->GEOM_Object Sketcher = geompy.MakeSketcher("Sketcher:F -100 -100:TT 250 -100:R 0:C 100 150:R 0:L 300:WW", [100,0,0, 1,1,1, -1,1,0]) #(String, List of Doubles)->GEOM_Object - Sketcher3d = geompy.Make3DSketcher([0,0,0, 50,50,50, 0,50,50, 10,0,0]) - + + #Create 3D wires with 3D Sketcher + sk = geompy.Sketcher3D() + sk.addPointsAbsolute(0,0,0, 70,0,0) + sk.addPointsRelative(0, 0, 130) + sk.addPointAnglesLength("OXY", 50, 0, 100) + sk.addPointAnglesLength("OXZ", 30, 80, 130) + sk.close() + Sketcher3d_1 = sk.wire() + + Sketcher3d_2 = geompy.Make3DSketcher([0,0,0, 50,50,50, 0,50,50, 10,0,0]) + #Create local coordinate system from shape cs4 = geompy.MakeMarkerFromShape(Plane) @@ -330,7 +340,9 @@ def TestAll (geompy, math): id_Bezier = geompy.addToStudy(Bezier, "Bezier") id_Interpol = geompy.addToStudy(Interpol, "Interpol") id_Sketcher = geompy.addToStudy(Sketcher, "Sketcher") - id_Sketcher3d = geompy.addToStudy(Sketcher3d, "Sketcher 3D") + + id_Sketcher3d_1 = geompy.addToStudy(Sketcher3d_1, "Sketcher 3D by interface") + id_Sketcher3d_2 = geompy.addToStudy(Sketcher3d_2, "Sketcher 3D by list") id_p_on_arc = geompy.addToStudy(p_on_arc, "Vertex on Arc (0.25)") id_p_on_arc2 = geompy.addToStudy(p_on_arc2, "Vertex on Arc at(100, -10, 10)" ) diff --git a/src/GEOM_SWIG/Makefile.am b/src/GEOM_SWIG/Makefile.am index 3fe82e1a4..c9742d239 100644 --- a/src/GEOM_SWIG/Makefile.am +++ b/src/GEOM_SWIG/Makefile.am @@ -35,6 +35,7 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am dist_salomescript_DATA = \ geompy.py \ geompyDC.py \ + gsketcher.py \ batchmode_geompy.py \ GEOM_Spanner.py \ GEOM_blocks.py \ diff --git a/src/GEOM_SWIG/geompyDC.py b/src/GEOM_SWIG/geompyDC.py index b28726d44..c650b7c1e 100644 --- a/src/GEOM_SWIG/geompyDC.py +++ b/src/GEOM_SWIG/geompyDC.py @@ -88,6 +88,8 @@ import GEOM import math import os +from gsketcher import Sketcher3D + ## Enumeration ShapeType as a dictionary. \n ## Topological types of shapes (like Open Cascade types). See GEOM::shape_type for details. # @ingroup l1_geompy_auxiliary @@ -1739,7 +1741,7 @@ class geompyDC(GEOM._objref_GEOM_Gen): # passing from it. # @return New GEOM.GEOM_Object, containing the created wire. # - # @ref tui_sketcher_page "Example" + # @ref tui_3dsketcher_page "Example" def Make3DSketcher(self, theCoordinates): """ Create a sketcher wire, following the numerical description, @@ -1759,16 +1761,21 @@ class geompyDC(GEOM._objref_GEOM_Gen): return anObj ## Obtain a 3D sketcher interface + # @return An instance of @ref gsketcher.Sketcher3D "Sketcher3D" interface + # + # @ref tui_3dsketcher_page "Example" def Sketcher3D (self): """ + Obtain a 3D sketcher interface. + Example of usage: - sk = geompy.Sketcher3D() - sk.addPointsAbsolute(0, 0, 0) - sk.addPointsAbsolute(70, 0, 0) - sk.addPointsRelative(0, 0, 130) - sk.addPointAnglesLength("OXY", 50, 0, 100) - sk.addPointAnglesLength("OXZ", 30, 80, 130) - a3D_Sketcher_1 = sk.makeWire() + sk = geompy.Sketcher3D() + sk.addPointsAbsolute(0,0,0, 70,0,0) + sk.addPointsRelative(0, 0, 130) + sk.addPointAnglesLength("OXY", 50, 0, 100) + sk.addPointAnglesLength("OXZ", 30, 80, 130) + sk.close() + a3D_Sketcher_1 = sk.wire() """ sk = Sketcher3D (self) return sk @@ -8851,62 +8858,6 @@ class geompyDC(GEOM._objref_GEOM_Gen): RaiseIfFailed("AddTexture", self.InsertOp) return ID -## 3D Sketcher functionality -## Use geompy.Sketcher3D() to obtain an instance of this class -def printVar (var): - if isinstance(var, str): - return "\'%s\'"%var - else: - return "%.7f"%var - -class Sketcher3D: - def __init__(self, geompyD): - self.geompyD = geompyD - self.myCommand = "3DSketcher" - pass - - def addPointsAbsolute (self, *listCoords): - ii = 1 - for cc in listCoords: - if ii == 1: - self.myCommand = self.myCommand + ":TT" - self.myCommand = self.myCommand + " %s"%printVar(cc) - if ii == 3: - ii = 1 - else: - ii = ii + 1 - pass - - def addPointsRelative (self, *listCoords): - ii = 1 - for cc in listCoords: - if ii == 1: - self.myCommand = self.myCommand + ":T" - self.myCommand = self.myCommand + " %s"%printVar(cc) - if ii == 3: - ii = 1 - else: - ii = ii + 1 - pass - - ## axes can be: "OXY", "OYZ" or "OXZ" - def addPointAnglesLength (self, axes, angle1, angle2, length): - self.myCommand = self.myCommand + ":%s %s %s %s" % (axes, printVar(angle1), printVar(angle2), printVar(length)) - pass - - def close (self): - self.myCommand = self.myCommand + ":WW" - pass - - ## Obtain the sketcher result - def wire (self): - Command,Parameters = ParseSketcherCommand(self.myCommand) - wire = self.geompyD.CurvesOp.Make3DSketcherCommand(Command) - self.myCommand = "3DSketcher" - RaiseIfFailed("Sketcher3D", self.geompyD.CurvesOp) - wire.SetParameters(Parameters) - return wire - import omniORB #Register the new proxy for GEOM_Gen omniORB.registerObjref(GEOM._objref_GEOM_Gen._NP_RepositoryId, geompyDC) diff --git a/src/GEOM_SWIG/gsketcher.py b/src/GEOM_SWIG/gsketcher.py new file mode 100644 index 000000000..11cb0771c --- /dev/null +++ b/src/GEOM_SWIG/gsketcher.py @@ -0,0 +1,182 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# File : gsketcher.py +# Author : Julia DOROVSKIKH, Open CASCADE S.A.S. +# Module : GEOM_SWIG + +""" + \namespace geompy + \brief 3D Sketcher interface +""" + +# This method is used by 3D Sketcher functionality +def printVar (var): + if isinstance(var, str): + return "\'%s\'"%var + else: + return "%.7f"%var + +## An interface to build a 3D Sketcher step-by-step. +# Use geompy.Sketcher3D() method to obtain an instance of this class. +# +# @ref tui_3dsketcher_page "Example" +class Sketcher3D: + """ + 3D sketcher interface. + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointsAbsolute(0,0,0, 70,0,0) + sk.addPointsRelative(0, 0, 130) + sk.addPointAnglesLength("OXY", 50, 0, 100) + sk.addPointAnglesLength("OXZ", 30, 80, 130) + sk.close() + a3D_Sketcher_1 = sk.wire() + """ + + def __init__(self, geompyD): + self.geompyD = geompyD + self.myCommand = "3DSketcher" + pass + + ## Add one or more points, sequentially connected with straight segments. + # Coordinates are considered as absolute. + # If the first point of sketcher is not yet defined, the first point + # from the listCoords will become the first sketcher point. + # @param X1, Y1, Z1, X2, Y2, Z2, ... Coordinates of points + def addPointsAbsolute (self, *listCoords): + """ + Add one or more points, sequentially connected with straight segments. + Coordinates are considered as absolute. + If the first point of sketcher is not yet defined, the first point + from the listCoords will become the first sketcher point. + + Parameters: + X1, Y1, Z1, X2, Y2, Z2, ... Coordinates of points + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointsAbsolute(0,0,0, 70,0,0) + a3D_Sketcher_1 = sk.wire() + """ + ii = 1 + for cc in listCoords: + if ii == 1: + self.myCommand = self.myCommand + ":TT" + self.myCommand = self.myCommand + " %s"%printVar(cc) + if ii == 3: + ii = 1 + else: + ii = ii + 1 + pass + + ## Add one or more points, sequentially connected with straight segments. + # Coordinates are considered relative to the previous point. + # If the first point of sketcher is not yet defined, the + # origin (0, 0, 0) will become the first sketcher point. + # @param X1, Y1, Z1, X2, Y2, Z2, ... Coordinates of points + def addPointsRelative (self, *listCoords): + """ + Add one or more points, sequentially connected with straight segments. + Coordinates are considered relative to the previous point. + If the first point of sketcher is not yet defined, the + origin (0, 0, 0) will become the first sketcher point. + + Parameters: + X1, Y1, Z1, X2, Y2, Z2, ... Relative coordinates of points + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointsRelative(0,0,130, 70,0,-130) + a3D_Sketcher_1 = sk.wire() + """ + ii = 1 + for cc in listCoords: + if ii == 1: + self.myCommand = self.myCommand + ":T" + self.myCommand = self.myCommand + " %s"%printVar(cc) + if ii == 3: + ii = 1 + else: + ii = ii + 1 + pass + + ## Add one straight segment, defined by two angles and length. + # If the first point of sketcher is not yet defined, the + # origin (0, 0, 0) will become the first sketcher point. + # @param axes can be: "OXY", "OYZ" or "OXZ" + # @param angle1 angle in a plane, defined by the \a axes + # @param angle2 angle from the plane, defined by the \a axes + # @param length length of the segment + def addPointAnglesLength (self, axes, angle1, angle2, length): + """ + Add one straight segment, defined by two angles and length. + If the first point of sketcher is not yet defined, the + origin (0, 0, 0) will become the first sketcher point. + + Parameters: + axes can be: "OXY", "OYZ" or "OXZ" + angle1 angle in a plane, defined by the \a axes + angle2 angle from the plane, defined by the \a axes + length length of the segment + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointAnglesLength("OXY", 50, 0, 100) + a3D_Sketcher_1 = sk.wire() + """ + self.myCommand = self.myCommand + ":%s %s %s %s" % (axes, printVar(angle1), printVar(angle2), printVar(length)) + pass + + ## Set to close the wire + def close (self): + """ + Set to close the wire + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointsRelative(0,0,130, 70,0,-130) + sk.close() + a3D_Sketcher_1 = sk.wire() + """ + self.myCommand = self.myCommand + ":WW" + pass + + ## Obtain the sketcher result. + # @return New GEOM_Object, containing the created wire + def wire (self): + """ + Obtain the sketcher result. + + Returns: + New GEOM_Object, containing the created wire. + + Example of usage: + sk = geompy.Sketcher3D() + sk.addPointsRelative(0,0,130, 70,0,-130) + a3D_Sketcher_1 = sk.wire() + """ + from geompyDC import ParseSketcherCommand, RaiseIfFailed + Command,Parameters = ParseSketcherCommand(self.myCommand) + wire = self.geompyD.CurvesOp.Make3DSketcherCommand(Command) + self.myCommand = "3DSketcher" + RaiseIfFailed("Sketcher3D", self.geompyD.CurvesOp) + wire.SetParameters(Parameters) + return wire -- 2.39.2