#Author- #Description- import adsk.core, adsk.fusion, adsk.cam, traceback def validate(discription, result, baseline): if type(result) is str: if result != baseline: raise Exception(discription + ' is different!\n' + 'Result is ' + result + '\n' + 'Baseline is ' + baseline + '\n' ) elif type(result) is float: if abs(result - baseline) > 10e-6: raise Exception(discription + ' is different!\n' + 'Result is ' + str(result) + '\n' + 'Baseline is ' + str(baseline) + '\n' ) elif type(result) is int: if abs(result - baseline) > 0: raise Exception(discription + ' is different!\n' + 'Result is ' + str(result) + '\n' + 'Baseline is ' + str(baseline) + '\n' ) elif type(result) is bool: if result != baseline: raise Exception(discription + ' is different!\n' + 'Result is ' + str(result) + '\n' + 'Baseline is ' + str(baseline) + '\n' ) else: raise Exception('Validaion is not support the data type ' + discription) #endTest def CreateTop1EdgeDefinitionByCurve(brepBodyDef): edgeDef = adsk.fusion.BRepEdgeDefinition.cast(None) # Create vertex definition startVertexDef = brepBodyDef.createVertexDefinition(adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.5488831005318957)) endVertexDef = brepBodyDef.createVertexDefinition(adsk.core.Point3D.create(-3.519568866597467, 4.0, -2.282227138902387)) center = adsk.core.Point3D.create(-2.7379066676103037, 4.0, -0.3666720191852457) normal =adsk.core.Vector3D.create(0, 1, 0) curve = adsk.core.Circle3D.createByCenter(center, normal, 2.0689) # Create edge definition by curve edgeDef = brepBodyDef.createEdgeDefinitionByCurve(startVertexDef, endVertexDef, curve) return edgeDef def CreateBottom1EdgeDefinitionByCurve(brepBodyDef): edgeDef = adsk.fusion.BRepEdgeDefinition.cast(None) # Create vertex definition startVertexDef = brepBodyDef.createVertexDefinition(adsk.core.Point3D.create(-3.519568866597467, 0.0, -2.2822271389023863)) endVertexDef = brepBodyDef.createVertexDefinition(adsk.core.Point3D.create(-3.519568866597467, 0.0, 1.5488831005318966)) center = adsk.core.Point3D.create(-2.7379066676103037, 0.0, -0.36667201918524484) normal =adsk.core.Vector3D.create(0, -1, 0) curve = adsk.core.Circle3D.createByCenter(center, normal, 2.0689) # Create edge definition by curve edgeDef = brepBodyDef.createEdgeDefinitionByCurve(startVertexDef, endVertexDef, curve) return edgeDef def CreateLinearEdgeDefinitionByCurve(brepBodyDef, startPoint, endPoint): edgeDef = adsk.fusion.BRepEdgeDefinition.cast(None) # Create vertex definition startVertexDef = brepBodyDef.createVertexDefinition(startPoint) endVertexDef = brepBodyDef.createVertexDefinition(endPoint) curve = adsk.core.Line3D.create(startPoint, endPoint) # Create edge definition by curve edgeDef = brepBodyDef.createEdgeDefinitionByCurve(startVertexDef, endVertexDef, curve) return edgeDef def GetNurbsSurfaceMiddle1(): surface = adsk.core.NurbsSurface.cast(None) degreeU = 1 degreeV = 2 controlPointCountU = 2 controlPointcountV = 7 controlPoints = [] controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 0.0, 1.5488831005318966)) controlPoints.append(adsk.core.Point3D.create(-2.0550441756714655, 0.0, 2.1464976398353937)) controlPoints.append(adsk.core.Point3D.create(-1.0943307562984703, 0.0, 0.8899128103250742)) controlPoints.append(adsk.core.Point3D.create(-0.13361733692547517, 0.0, -0.36667201918524484)) controlPoints.append(adsk.core.Point3D.create(-1.0943307562984705, 0.0, -1.6232568486955643)) controlPoints.append(adsk.core.Point3D.create(-2.0550441756714664, 0.0, -2.8798416782058833)) controlPoints.append(adsk.core.Point3D.create(-3.5195688665974676, 0.0, -2.2822271389023863)) controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.5488831005318957)) controlPoints.append(adsk.core.Point3D.create(-2.0550441756714655, 4.0, 2.1464976398353928)) controlPoints.append(adsk.core.Point3D.create(-1.0943307562984703, 4.0, 0.8899128103250733)) controlPoints.append(adsk.core.Point3D.create(-0.13361733692547517, 4.0, -0.3666720191852457)) controlPoints.append(adsk.core.Point3D.create(-1.0943307562984705, 4.0, -1.6232568486955652)) controlPoints.append(adsk.core.Point3D.create(-2.0550441756714664, 4.0, -2.879841678205884)) controlPoints.append(adsk.core.Point3D.create(-3.5195688665974676, 4.0, -2.282227138902387)) knotsU = (-0.9666972787471603, -0.9666972787471603, 0.9666972787471603, 0.9666972787471603) knotsV = (-1.9582319586428225, -1.9582319586428225, -1.9582319586428225, -0.6527439862142743, -0.6527439862142743, 0.6527439862142739, 0.6527439862142739, 1.9582319586428225, 1.9582319586428225, 1.9582319586428225) weights = (1.0, 0.7944201804397665, 1.0, 0.7944201804397665, 1.0, 0.7944201804397665, 1.0, 1.0, 0.7944201804397665, 1.0, 0.7944201804397665, 1.0, 0.7944201804397665, 1.0) propertyU = 9 propertyV = 9 surface = adsk.core.NurbsSurface.create(degreeU, degreeV, controlPointCountU, controlPointcountV, controlPoints, knotsU, knotsV, weights, propertyU, propertyV) return surface def GetNurbsSurfaceMiddle2(): surface = adsk.core.NurbsSurface.cast(None) degreeU = 1 degreeV = 1 controlPointCountU = 2 controlPointcountV = 2 controlPoints = [] controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 4.0, -2.282227138902387)) controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 0, -2.2822271389023863)) controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.5488831005318957)) controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 0, 1.5488831005318966)) knotsU = (0, 0, 3.831110239434283, 3.831110239434283) knotsV = (0, 0, 4.0, 4.0) weights = () propertyU = 1 propertyV = 1 surface = adsk.core.NurbsSurface.create(degreeU, degreeV, controlPointCountU, controlPointcountV, controlPoints, knotsU, knotsV, weights, propertyU, propertyV) return surface def GetNurbsSurfaceTop(): surface = adsk.core.NurbsSurface.cast(None) degreeU = 1 degreeV = 1 controlPointCountU = 2 controlPointcountV = 2 controlPoints = [] controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.7441010118322937)) controlPoints.append(adsk.core.Point3D.create(-3.519568866597467, 4.0, -2.4732150714952117)) controlPoints.append(adsk.core.Point3D.create(-0.6323626099308138, 4.0, 1.7441010118322937)) controlPoints.append(adsk.core.Point3D.create(-0.6323626099308138, 4.0, -2.4732150714952117)) knotsU = (-0.7816621989871636, -0.7816621989871636, 2.1055440576794897, 2.1055440576794897) knotsV = (-2.110773031017539, -2.110773031017539, 2.1065430523099655, 2.1065430523099655) weights = () propertyU = 1 propertyV = 1 surface = adsk.core.NurbsSurface.create(degreeU, degreeV, controlPointCountU, controlPointcountV, controlPoints, knotsU, knotsV, weights, propertyU, propertyV) return surface def GetNurbsSurfaceBottom(): surface = adsk.core.NurbsSurface.cast(None) degreeU = 1 degreeV = 1 controlPointCountU = 2 controlPointcountV = 2 controlPoints = [] controlPoints.append(adsk.core.Point3D.create(-0.6323626099308726, 0.0, 1.7398710331248253)) controlPoints.append(adsk.core.Point3D.create(-0.6323626099308726, 0.0, -2.4774450502028094)) controlPoints.append(adsk.core.Point3D.create(-3.5195688665974676, 0.0, 1.739871033124825)) controlPoints.append(adsk.core.Point3D.create(-3.5195688665974676, 0.0, -2.47744505020281)) knotsU = (-2.105544057679431, -2.105544057679431, 0.7816621989871635, 0.7816621989871635) knotsV = (-2.10654305231007, -2.10654305231007, 2.110773031017565, 2.110773031017565) weights = () propertyU = 1 propertyV = 1 surface = adsk.core.NurbsSurface.create(degreeU, degreeV, controlPointCountU, controlPointcountV, controlPoints, knotsU, knotsV, weights, propertyU, propertyV) return surface def CreateFaceForBodyDefination(brepBodyDef, surface, edgeDefs): faceDef = adsk.fusion.BRepFaceDefinition.cast(None) # Create lump definition lumpDefs = brepBodyDef.lumpDefinitions lumpDef = lumpDefs.add() # Create shell definition shellDefs = lumpDef.shellDefinitions shellDef = shellDefs.add() # Create face definition faceDefs = shellDef.faceDefinitions faceDef = faceDefs.add(surface, True) # Create loop definition loopDefs = faceDef.loopDefinitions loopdef = loopDefs.add() # Create coEdge definitions brepCoEdgeDefs = loopdef.bRepCoEdgeDefinitions for edgeDef in edgeDefs: brepCoEdgeDefs.add(edgeDef, True) return faceDef def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface # Create a new document doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType) product = app.activeProduct design = adsk.fusion.Design.cast(product) # Create a base feature rootComp = design.rootComponent # Create brep body definition brepBodyDef = adsk.fusion.BRepBodyDefinition.create() # Create edge definition top1EdgeDef = CreateTop1EdgeDefinitionByCurve(brepBodyDef) bottom1EdgeDef = CreateBottom1EdgeDefinitionByCurve(brepBodyDef) startPoint = adsk.core.Point3D.create(-3.519568866597467, 4.0, -2.282227138902387) endPoint = adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.5488831005318957) top2EdgeDef = CreateLinearEdgeDefinitionByCurve(brepBodyDef, startPoint, endPoint) startPoint = adsk.core.Point3D.create(-3.519568866597467, 0.0, 1.5488831005318966) endPoint = adsk.core.Point3D.create(-3.519568866597467, 0.0, -2.2822271389023863) bottom2EdgeDef = CreateLinearEdgeDefinitionByCurve(brepBodyDef, startPoint, endPoint) startPoint = adsk.core.Point3D.create(-3.519568866597467, 0.0, -2.2822271389023863) endPoint = adsk.core.Point3D.create(-3.519568866597467, 4.0, -2.282227138902387) middle1EdgeDef = CreateLinearEdgeDefinitionByCurve(brepBodyDef, startPoint, endPoint) startPoint = adsk.core.Point3D.create(-3.519568866597467, 4.0, 1.5488831005318957) endPoint = adsk.core.Point3D.create(-3.519568866597467, 0.0, 1.5488831005318966) middle2EdgeDef = CreateLinearEdgeDefinitionByCurve(brepBodyDef, startPoint, endPoint) # Create the top face for body definition topSurface = GetNurbsSurfaceTop() topEdgeDefs = [] topEdgeDefs.append(top1EdgeDef) topEdgeDefs.append(top2EdgeDef) CreateFaceForBodyDefination(brepBodyDef, topSurface, topEdgeDefs) # Create one middle face for body definition middel1Surface = GetNurbsSurfaceMiddle1() middel1EdgeDefs = [] middel1EdgeDefs.append(top1EdgeDef) middel1EdgeDefs.append(middle1EdgeDef) middel1EdgeDefs.append(bottom1EdgeDef) middel1EdgeDefs.append(middle2EdgeDef) CreateFaceForBodyDefination(brepBodyDef, middel1Surface, middel1EdgeDefs) # Create another middle face for body defination middel2Surface = GetNurbsSurfaceMiddle2() middel2EdgeDefs = [] middel2EdgeDefs.append(top2EdgeDef) middel2EdgeDefs.append(middle1EdgeDef) middel2EdgeDefs.append(bottom2EdgeDef) middel2EdgeDefs.append(middle2EdgeDef) CreateFaceForBodyDefination(brepBodyDef, middel2Surface, middel2EdgeDefs) # Create the bottom face for body definition bottomSurface = GetNurbsSurfaceBottom() bottomEdgeDefs = [] bottomEdgeDefs.append(bottom1EdgeDef) bottomEdgeDefs.append(bottom2EdgeDef) CreateFaceForBodyDefination(brepBodyDef, bottomSurface, bottomEdgeDefs) # Create brep body body = brepBodyDef.createBody() outcomeInfo = brepBodyDef.outcomeInfo print('The outcome info is :\n{}'.format(outcomeInfo)) # Create wire brep body definition wireBrepBodyDef = adsk.fusion.BRepBodyDefinition.create() # Create lump definition lumpDefs = wireBrepBodyDef.lumpDefinitions lumpDef = lumpDefs.add() # Create shell definition shellDefs = lumpDef.shellDefinitions shellDef = shellDefs.add() # Create wire edge definitions wireDef = shellDef.wireDefinition wireEdgeDefs = wireDef.wireEdgeDefinitions # Add wire edge definition startPoint = adsk.core.Point3D.create(2.499830308814756, 4.786795576310287, 0.0) endPoint = adsk.core.Point3D.create(6.000163479757444, 2.0712231354540322, 0.0) line = adsk.core.Line3D.create(startPoint, endPoint) center = adsk.core.Point3D.create(3.3848741924869366, 2.313878842520367, 0.0) normal =adsk.core.Vector3D.create(0, 0, 1.0) circle = adsk.core.Circle3D.createByCenter(center, normal, 2.626) startVertexDef = wireBrepBodyDef.createVertexDefinition(startPoint) endVertexDef = wireBrepBodyDef.createVertexDefinition(endPoint) lineWireEdgeDef = wireEdgeDefs.add(startVertexDef, endVertexDef, line) circleWireEdgeDef = wireEdgeDefs.add(startVertexDef, endVertexDef, circle) # Set wire edge associative id lineWireEdgeDef.associativeID = 10 print('The linear wire edge defination associative id is: {}'.format(lineWireEdgeDef.associativeID)) # Create wire brep body wireBrepBodyDef.doFullHealing = False wireBrepBody = wireBrepBodyDef.createBody() print('The wire brep body defination do full healing is: {}'.format(wireBrepBodyDef.doFullHealing)) # Show the temporary brep bodies group = rootComp.customGraphicsGroups.add() group.addBRepBody(body) for edge in wireBrepBody.edges: group.addCurve(edge.geometry) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))