diff --git a/.gitignore b/.gitignore
index f9d7409..4fe2d24 100644
--- a/.gitignore
+++ b/.gitignore
@@ -102,3 +102,5 @@ ENV/
# blender backup files
*.blend1
+install_plugin_cad.sh
+.vscode
\ No newline at end of file
diff --git a/cg/freecad/Frames/Frames.py b/cg/freecad/Frames/Frames.py
index 4470dc6..4b8ccd4 100644
--- a/cg/freecad/Frames/Frames.py
+++ b/cg/freecad/Frames/Frames.py
@@ -13,6 +13,8 @@
# License along with this library. If not, see .
import FreeCAD
import Tools
+from usecases.asm4parser_usecase import Asm4StructureParseUseCase
+
if FreeCAD.GuiUp:
import FreeCADGui
from pivy import coin
@@ -309,7 +311,11 @@ Tools.spawnClassCommand("FrameCommand",
{"Pixmap": str(os.path.join(icondir, "frame.svg")),
"MenuText": "Make a free frame",
"ToolTip": "Make a freestanding reference frame."})
-
+Tools.spawnClassCommand("ASM4StructureParsing",
+ Asm4StructureParseUseCase().initParse,
+ {"Pixmap": str(os.path.join(icondir, "assembly4.svg")),
+ "MenuText": "Make a ASM4 parsing",
+ "ToolTip": "Make a ASM4 1"})
Tools.spawnClassCommand("SelectedPartFrameCommand",
makeSelectedPartFrames,
{"Pixmap": str(os.path.join(icondir, "partframe.svg")),
diff --git a/cg/freecad/Frames/InitGui.py b/cg/freecad/Frames/InitGui.py
index c62b8e5..bd7b0d9 100644
--- a/cg/freecad/Frames/InitGui.py
+++ b/cg/freecad/Frames/InitGui.py
@@ -37,6 +37,7 @@ class Frames(Workbench):
import Frames
self.framecommands = [
"FrameCommand",
+ "ASM4StructureParsing",
"SelectedPartFrameCommand",
"AllPartFramesCommand",
"FeatureFrameCommand"
diff --git a/cg/freecad/Frames/UI/icons/assembly4.svg b/cg/freecad/Frames/UI/icons/assembly4.svg
new file mode 100644
index 0000000..ed78093
--- /dev/null
+++ b/cg/freecad/Frames/UI/icons/assembly4.svg
@@ -0,0 +1,411 @@
+
+
+
+
\ No newline at end of file
diff --git a/cg/freecad/Frames/cad_parts_adjacency_matrix.py b/cg/freecad/Frames/cad_parts_adjacency_matrix.py
deleted file mode 100644
index b654b26..0000000
--- a/cg/freecad/Frames/cad_parts_adjacency_matrix.py
+++ /dev/null
@@ -1,142 +0,0 @@
-import FreeCAD as App
-import uuid
-
-collision_squares_labels = []
-
-meshCoordinates = []
-detailSquares = {}
-
-class ClearWorkSpaceDocument(object):
- def call(self):
- for key in detailSquares:
- for renderPrimitive in detailSquares[key]:
- primitivePart = App.ActiveDocument.getObjectsByLabel(renderPrimitive.cadLabel)[0]
- App.ActiveDocument.removeObject(primitivePart.Name)
-
-
-class MeshGeometryCoordinateModel(object):
-
- def __init__(self, x, y, z, label,):
- self.x = x
- self.y = y
- self.z = z
- self.label = label
- self.cadLabel = ''
-
- def initializePrimitivesByCoordinate(self):
- uuidDoc = str(uuid.uuid1())
- App.ActiveDocument.addObject("Part::Box", "Box")
- App.ActiveDocument.ActiveObject.Label = uuidDoc
- App.ActiveDocument.recompute()
- part = App.ActiveDocument.getObjectsByLabel(uuidDoc)[0]
- collision_squares_labels.append(uuidDoc)
- part.Width = 2
- part.Height = 2
- part.Length = 2
- part.Placement = App.Placement(
- App.Vector(self.x - 1, self.y - 1, self.z - 1),
- App.Rotation(App.Vector(0.00, 0.00, 1.00), 0.00))
- if(detailSquares.get(self.label) is None):
- detailSquares[self.label] = []
- detailSquares[self.label].append(self)
- self.cadLabel = uuidDoc
- App.ActiveDocument.recompute()
-
-
-
-class FreeCadMetaModel(object):
-
- def __init__(self, label, vertex) -> None:
- self.label = label
- self.vertex = vertex
-
-class InitPartsParseUseCase():
-
- def call(self) -> list[FreeCadMetaModel]:
- product_details = []
- for part in App.ActiveDocument.Objects:
- if part is not None:
- model = FreeCadMetaModel(part.Label,part.Shape.Vertexes)
- if(model is not None):
- product_details.append(model)
- return product_details
-
-
-
-class GetCollisionAtPrimitives(object):
-
- def call(self,freeCadMetaModels: list[FreeCadMetaModel] ):
- for model in freeCadMetaModels:
- activePart = App.ActiveDocument.getObjectsByLabel(model.label)[0]
- for key in detailSquares:
- if(model.label != key):
- for renderPrimitive in detailSquares[key]:
- primitivePart = App.ActiveDocument.getObjectsByLabel(renderPrimitive.cadLabel)[0]
- collisionResult:int = int(activePart.Shape.distToShape(primitivePart.Shape)[0])
- # print(collisionResult)
- if(collisionResult == 0):
- print(model.label+ ' ' + renderPrimitive.label)
-
-
-
-
-class GetPartPrimitiveCoordinatesUseCase(object):
-
- def call(self,freeCadMetaModels: list[FreeCadMetaModel]) -> list[MeshGeometryCoordinateModel]:
- meshCoordinates:list[MeshGeometryCoordinateModel] = []
- for model in freeCadMetaModels:
- vertexesDetail = model.vertex
- labelDetail = model.label
- for coords in vertexesDetail:
- detailVertex = MeshGeometryCoordinateModel(
- coords.X,
- coords.Y,
- coords.Z,
- labelDetail,
- )
- meshCoordinates.append(detailVertex)
-
- return meshCoordinates
-
-class RenderPrimitiveUseCase(object):
-
- def call(self,meshModels :list[MeshGeometryCoordinateModel]) -> None:
- for mesh in meshModels:
- mesh.initializePrimitivesByCoordinate()
-
-class RenderPrimitivesScenario(object):
-
- def __init__(
- self,
- initPartsParseUseCase: InitPartsParseUseCase,
- getPartPrimitiveCoordinatesUseCase:GetPartPrimitiveCoordinatesUseCase,
- renderPrimitiveUseCase:RenderPrimitiveUseCase,
- getCollisionAtPrimitives:GetCollisionAtPrimitives,
- clearWorkSpaceDocument:ClearWorkSpaceDocument,
- ) -> None:
- self.initPartsParseUseCase = initPartsParseUseCase
- self.getPartPrimitiveCoordinatesUseCase = getPartPrimitiveCoordinatesUseCase
- self.renderPrimitiveUseCase = renderPrimitiveUseCase
- self.getCollisionAtPrimitives = getCollisionAtPrimitives
- self.clearWorkSpaceDocument = clearWorkSpaceDocument
-
- def call(self) -> None:
- parts = self.initPartsParseUseCase.call()
- meshCoordinates = self.getPartPrimitiveCoordinatesUseCase.call(parts)
- self.renderPrimitiveUseCase.call(meshCoordinates)
- self.getCollisionAtPrimitives.call(parts)
- self.clearWorkSpaceDocument.call()
-
-
-
-def main() -> None:
- RenderPrimitivesScenario(
- InitPartsParseUseCase(),
- GetPartPrimitiveCoordinatesUseCase(),
- RenderPrimitiveUseCase(),
- GetCollisionAtPrimitives(),
- ClearWorkSpaceDocument(),
- ).call()
-
-
-main()
diff --git a/cg/freecad/Frames/usecases/asm4parser_usecase.py b/cg/freecad/Frames/usecases/asm4parser_usecase.py
new file mode 100644
index 0000000..f732d1b
--- /dev/null
+++ b/cg/freecad/Frames/usecases/asm4parser_usecase.py
@@ -0,0 +1,53 @@
+import FreeCAD as App
+
+class Asm4StructureParseUseCase:
+ _parts = []
+ _label = []
+
+ def getSubPartsLabel(self, group):
+ groupLabel = []
+ for el in group:
+ if str(el) == '':
+ groupLabel.append(el.Label)
+ return groupLabel
+
+ def parseLabel(self, nextGroup, label, level=2, nextGroupParse=0):
+ if nextGroup.__len__() == nextGroupParse:
+ return
+ else:
+ groupParts = []
+
+ for el in nextGroup:
+ if str(el) == '':
+ groupParts.append(el)
+
+ for el in groupParts:
+ if str(el) == '':
+ label.append({
+ "level": level,
+ "attachedTo": el.AttachedTo.split('#'),
+ "label": el.Label,
+ "axis": self.getSubPartsLabel(el.Group)
+ })
+
+ def initParse(self):
+
+ model = App.ActiveDocument.RootObjects[1]
+ self._label.append({
+ "level": 1,
+ "attachedTo": "Parent Assembly",
+ "label": model.Label,
+ "axis": self.getSubPartsLabel(model.Group)
+ })
+ for parent in model.Group:
+ if str(parent) == '':
+ self._label.append({
+ "level": 1,
+ "attachedTo": parent.AttachedTo.split('#'),
+ "label": parent.Label,
+ "axis": self.getSubPartsLabel(parent.Group)
+ })
+ print(self._label)
+
+
+
\ No newline at end of file