ADD_SUBDIRECTORY (src/GeomApp)
ADD_SUBDIRECTORY (src/ExchangePlugin)
ADD_SUBDIRECTORY (src/GeomValidators)
+ADD_SUBDIRECTORY (src/ConnectorPlugin)
+
IF(${HAVE_SALOME})
ADD_SUBDIRECTORY (src/NewGeom)
@SET NEW_GEOM_CONFIG_FILE=%ROOT_DIR%\install\plugins
@SET PATH=%ROOT_DIR%\install\plugins;%ROOT_DIR%\install\bin;%PATH%
-@SET PYTHONPATH=%ROOT_DIR%\install\swig;%PYTHONPATH%
+@SET PYTHONPATH=%ROOT_DIR%\install\swig;%ROOT_DIR%\install\plugins;%PYTHONPATH%
@SET LightAppConfig=%ROOT_DIR%\install\share\salome\resources\newgeom;%GUI_ROOT_DIR%\share\salome\resources\gui
@SET NewGeomResources=%ROOT_DIR%\install\resources
@REM -------------------------
@REM QT
@SET QTDIR=%PDIR%\qt-4.8.4
-@ECHO -- Creating qt.conf...
+@ECHO -- Creating qt.conf... in %QTDIR%
@ECHO [Paths] > %QTDIR%/bin/qt.conf
@ECHO Prefix = %QTDIR:\=/% >> %QTDIR%/bin/qt.conf
@SET PATH=%QTDIR%\bin;%PATH%
\r
bool isElementNode(xmlNodePtr theNode)\r
{\r
+ if (!theNode)\r
+ return false;\r
return theNode->type == XML_ELEMENT_NODE;\r
}\r
\r
{
if (myCurrentNode && hasChild(myCurrentNode)) {
myCurrentNode = myCurrentNode->children;
- while (!isElementNode(myCurrentNode)) {
+ while (myCurrentNode && !isElementNode(myCurrentNode)) {
myCurrentNode = myCurrentNode->next;
}
- return true;
+ return myCurrentNode != NULL;
}
return false;
}
<plugin library="ConstructionPlugin" configuration="plugin-Construction.xml"/>
<plugin library="FeaturesPlugin" configuration="plugin-Features.xml"/>
<plugin library="ExchangePlugin" configuration="plugin-Exchange.xml"/>
+ <plugin script="ConnectorPlugin" configuration="plugin-Connector.xml"/>
<plugin library="SketchSolver"/>
<plugin library="GeomValidators"/>
<plugin library="DFBrowser" internal="true"/>
--- /dev/null
+INCLUDE(Common)
+
+SET(PYTHON_FILES
+ ConnectorPlugin.py
+ ConnectorPlugin_ExportFeature.py
+)
+
+SET(XML_RESSOURCES
+ plugin-Connector.xml
+)
+
+ADD_CUSTOM_TARGET(ConnectorPlugin SOURCES ${PYTHON_FILES} ${XML_RESSOURCES})
+
+INSTALL(FILES ${PYTHON_FILES} ${XML_RESSOURCES} DESTINATION plugins)
--- /dev/null
+"""
+Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+"""
+
+import ModelAPI
+
+from ConnectorPlugin_ExportFeature import ExportFeature
+
+
+class ConnectorPlugin(ModelAPI.ModelAPI_Plugin):
+
+ def __init__(self):
+ ModelAPI.ModelAPI_Plugin.__init__(self)
+ pass
+
+ def createFeature(self, theFeatureID):
+ if theFeatureID == ExportFeature.ID():
+ return ExportFeature().__disown__()
+ else:
+ print "ConnectorPlugin: No such feature %s" % theFeatureID
+
+plugin = ConnectorPlugin()
+aSession = ModelAPI.ModelAPI_Session.get()
+print "Module loaded. Session", aSession
+aSession.registerPlugin(plugin)
--- /dev/null
+"""
+Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+"""
+
+import ModelAPI
+import salome
+from salome.geom import geomBuilder
+
+
+class ExportFeature(ModelAPI.ModelAPI_Feature):
+
+ "Feature to create a box by drawing a sketch and extruding it"
+
+ def __init__(self):
+ ModelAPI.ModelAPI_Feature.__init__(self)
+
+ @staticmethod
+ def ID():
+ return "ExportToGEOM"
+
+ def getKind(self):
+ return ExportFeature.ID()
+
+ # This feature is action: has no property pannel and executes immideately
+ def isAction(self):
+ return True
+
+ def initAttributes(self):
+ # This feature has no attributes, but should perfore some actions on initialization
+ aSession = ModelAPI.ModelAPI_Session.get()
+ aPart = aSession.activeDocument()
+ # Get all bodies
+ kResultBodyType = "ResultBody"
+ aPartSize = aPart.size(kResultBodyType)
+ if aPartSize == 0:
+ print "No results in the active document"
+ return
+
+ aResultList = [aPart.object(kResultBodyType, idx) for idx in xrange(aPartSize)]
+ for idx, aResult in enumerate(aResultList):
+ aBodyResult = modelAPI_ResultBody(aResult)
+ if not aBodyResult:
+ continue
+ aShape = aBodyResult.shape()
+ aDump = aShape.getShapeStream()
+ # Load shape to SALOME Geom
+ geompy = geomBuilder.New(salome.myStudy)
+ aBrep = geompy.RestoreShape(aDump)
+ geompy.addToStudy(aBrep, "NewGeomShape_{0}".format(idx))
+
+ def execute(self):
+ # Nothing to execute: all logic would be in the initAttributes
+ pass
+
+# TEST
+"""
+if __name__=='__main__':
+ session = ModelAPI.ModelAPI_Session.get()
+ part = session.activeDocument()
+ session.startOperation()
+ feature = part.addFeature('Box')
+ feature.real('box_width').setValue(10)
+ feature.real('box_length').setValue(10)
+ feature.real('box_height').setValue(10)
+ feature.execute()
+ session.finishOperation()
+"""
--- /dev/null
+#=========================================================================
+# Creation of the circular Sketch, then Extrusion (cylinder),
+# then export to the old GEOM and usage of SMESH for meshing.
+# Based on SALOME 7.4.0 and NewGEOM version: master 18Dec2014.
+#=========================================================================
+from ModelAPI import *
+from GeomDataAPI import *
+from GeomAlgoAPI import *
+from GeomAPI import *
+
+aSession = ModelAPI_Session.get()
+aDocument = aSession.moduleDocument()
+
+# Create a part for extrusion
+aSession.startOperation()
+aPartFeature = aDocument.addFeature("Part")
+aSession.finishOperation()
+
+aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
+aPart = aPartResult.partDoc()
+
+#=========================================================================
+# Create a sketch circle to extrude
+#=========================================================================
+aSession.startOperation()
+aSketchFeature = modelAPI_CompositeFeature(aPart.addFeature("Sketch"))
+origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
+origin.setValue(0, 0, 0)
+dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
+dirx.setValue(1, 0, 0)
+diry = geomDataAPI_Dir(aSketchFeature.attribute("DirY"))
+diry.setValue(0, 1, 0)
+norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
+norm.setValue(0, 0, 1)
+# Create circle
+aSketchCircle = aSketchFeature.addFeature("SketchCircle")
+anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
+aCircleRadius = aSketchCircle.real("CircleRadius")
+anCircleCentr.setValue(50., 50)
+aCircleRadius.setValue(20.)
+aSession.finishOperation()
+
+#=========================================================================
+# Make extrusion on circle
+#=========================================================================
+# Build shape from sketcher results
+aSketchResult = aSketchFeature.firstResult()
+aSketchEdges = modelAPI_ResultConstruction(aSketchResult).shape()
+origin = geomDataAPI_Point(aSketchFeature.attribute("Origin")).pnt()
+dirX = geomDataAPI_Dir(aSketchFeature.attribute("DirX")).dir()
+dirY = geomDataAPI_Dir(aSketchFeature.attribute("DirY")).dir()
+norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm")).dir()
+aSketchFaces = ShapeList()
+GeomAlgoAPI_SketchBuilder.createFaces(
+ origin, dirX, dirY, norm, aSketchEdges, aSketchFaces)
+
+# Create extrusion
+anExtrusionFt = aPart.addFeature("Extrusion")
+anExtrusionFt.selection("extrusion_face").setValue(
+ aSketchResult, aSketchFaces[0])
+anExtrusionFt.real("extrusion_size").setValue(50)
+anExtrusionFt.boolean("extrusion_reverse").setValue(False)
+anExtrusionFt.execute()
+aSession.finishOperation()
+
+# Check extrusion results
+anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
+
+#==================================================
+# Transfer shape to Geom module of Salome
+#==================================================
+aShape = anExtrusionResult.shape()
+aDump = aShape.getShapeStream()
+
+# Load shape to SALOME Geom
+import salome
+from salome.geom import geomBuilder
+geompy = geomBuilder.New(salome.myStudy)
+aBrep = geompy.RestoreShape(aDump)
+geompy.addToStudy(aBrep, "NewGeomShape")
+
+# Meshing of the Shape
+from salome.smesh import smeshBuilder
+meshpy = smeshBuilder.New(salome.myStudy)
+aMesh = meshpy.Mesh(aBrep)
+Regular_1D = aMesh.Segment()
+Max_Size_1 = Regular_1D.MaxSize(5)
+MEFISTO_2D = aMesh.Triangle(algo=smeshBuilder.MEFISTO)
+isDone = aMesh.Compute()
+assert (isDone)
+meshpy.SetName(aMesh.GetMesh(), 'NewGeomMesh')
+
--- /dev/null
+<plugin>
+ <workbench id="Features" document="Part">
+ <group id="Exchange">
+ <feature
+ id="ExportToGEOM"
+ title="Export to GEOM"
+ tooltip="Exports all data in GEOM compatible format"
+ icon=":pictures/part_ico.png">
+ </feature>
+ </group>
+ </workbench>
+</plugin>
\ No newline at end of file