InventorLoader icon indicating copy to clipboard operation
InventorLoader copied to clipboard

GFA hanging forever

Open marcocecchiscmgroup opened this issue 2 years ago • 4 comments

Dear Jens, I stepped into a solid example of the limits of the OpenCascade GFA. If you take the enclosed Fusion 360 example that I created to try out all the basic operations with solids, the solid conversion to STEP, the helix, hangs forever in surface.generalFuse(edges, tolerance):

	def build(self):
		if (self.__ready_to_build__):
			self.__ready_to_build__ = False
			edges = self.buildCoEdges()
			if (self._surface):
				surface = self.getSurface().build()
				if (surface):
					if (self.sense == 'reversed'):
						surface.reverse()
					if (len(edges) > 0):
						tolerance = 0.1
						component, elements = surface.generalFuse(edges, tolerance)
						faces = elements[0]

So, as it seems, the attempt to reduce the dependencies from Part for Issue #65, is stil causing troubles.

Even with the following hack, the processing takes a very long time, even if it doesn't hang.

Acis2Step.py:

def _convertFace(acisFace, parentColor, context):
	color = getColor(acisFace)
	if (color is None): color = parentColor
	try:
		#surface, sense = _createSurfaceFaceShape(acisFace)
		surface = None
		sense = acisFace.sense == 'forward'
		if (surface):
			face = ADVANCED_FACE('', surface, sense)
[...]

helix_cut.zip

Immagine

marcocecchiscmgroup avatar Jun 07 '23 07:06 marcocecchiscmgroup

Even with the following hack, the processing takes a very long time, even if it doesn't hang.

I will address this in a separate issue with more details.

marcocecchiscmgroup avatar Jun 08 '23 06:06 marcocecchiscmgroup

Not sure, maybe I played around too much with variations of the master codebase, but, 'luckily' the point where the processing hangs is always the aforemetioned one. It don't know, but yesterday I got a different behaviour someway.

Attaching the sat version for your convenience.

helix_cut.sat.sat.zip

marcocecchiscmgroup avatar Jun 08 '23 08:06 marcocecchiscmgroup

What about this fix?

EDIT: of course speaking of the STEP conversion

>					self.shape = surface
<				if (len(edges) > 0):
<					tolerance = 0.1
<					component, elements = surface.generalFuse(edges, tolerance)
<					faces = elements[0]
<					if (len(faces) == 0):
<						logWarning("Can't apply wires for face (no elements) for %s" %(self._surface))
<					else:
<						self.shape = eliminateOuterFaces(faces, edges)
<						if (self.shape is None):
<							# edges can be empty because not all edges can be created right now :(
<							logWarning("Can't apply wires for face %s!" %(surface.Surface))
<							for f in faces:
<								Part.show(f, "Face-%d" %(self.record.index))
<				else:
<					self.shape = surface

marcocecchiscmgroup avatar Jun 08 '23 09:06 marcocecchiscmgroup

Hello Jens,

how about your holydays? ;)

Any chance to work on items #72, #73 , #74, #75 and #76?

marcocecchiscmgroup avatar Aug 30 '23 07:08 marcocecchiscmgroup