import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
# Get active design
product = app.activeProduct
design = adsk.fusion.Design.cast(product)
# Get root component in this design
rootComp = design.rootComponent
# Get the first sub component
occs = rootComp.occurrences
subComp1 = occs.item(0).component
# Get the second sub component
subComp2 = occs.item(1).component
# Get the first body in sub component 1
bodyInSubComp1 = subComp1.bRepBodies.item(0)
# Copy/paste body from sub component 1 to sub component 2
copyPasteBody = subComp2.features.copyPasteBodies.add(bodyInSubComp1)
# Copy/paste bodies from sub component to root component
sourceBodies = adsk.core.ObjectCollection.create()
for body in copyPasteBody.sourceBody:
sourceBodies.add(body)
for body in subComp2.bRepBodies:
sourceBodies.add(body)
rootComp.features.copyPasteBodies.add(sourceBodies)
# Dump the information of Copy Paste Body in root component
for copyPasteBody in rootComp.features.copyPasteBodies:
copyPasteBodyInfo = 'CopyPasteBody: name - {}'.format(copyPasteBody.name)
ui.messageBox(copyPasteBodyInfo)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
#include <Core/Application/Application.h>
#include <Core/UserInterface/UserInterface.h>
#include <Core/Application/Document.h>
#include <Core/Application/ObjectCollection.h>
#include <Fusion/Fusion/Design.h>
#include <Fusion/Components/Component.h>
#include <Fusion/Components/Occurrences.h>
#include <Fusion/Components/Occurrence.h>
#include <Fusion/Features/Features.h>
#include <Fusion/Features/CopyPasteBodies.h>
#include <Fusion/Features/CopyPasteBody.h>
#include <Fusion/BRep/BRepBodies.h>
#include <Fusion/BRep/BRepBody.h>
#include <iostream>
using namespace adsk::core;
using namespace adsk::fusion;
Ptr<UserInterface> ui;
extern "C" XI_EXPORT bool run(const char* context)
{
Ptr<Application> app = Application::get();
if (!app)
return false;
ui = app->userInterface();
if (!ui)
return false;
// Get active design
Ptr<Product> product = app->activeProduct();
if (!product)
return false;
Ptr<Design> design = product;
if (!design)
return false;
// Get root component in this design
Ptr<Component> rootComp = design->rootComponent();
if (!rootComp)
return false;
// Get the first sub component
Ptr<Occurrences> occs = rootComp->occurrences();
if (!occs)
return false;
Ptr<Occurrence> firstOcc = occs->item(0);
if (!firstOcc)
return false;
Ptr<Component> subComp1 = firstOcc->component();
if (!subComp1)
return false;
// Get the second sub component
Ptr<Occurrence> secondOcc = occs->item(1);
if (!secondOcc)
return false;
Ptr<Component> subComp2 = secondOcc->component();
if (!subComp2)
return false;
// Get the first body in sub component 1
Ptr<BRepBodies> bodiesInSubComp1 = subComp1->bRepBodies();
if (!bodiesInSubComp1)
return false;
Ptr<BRepBody> bodyInSubComp1 = bodiesInSubComp1->item(0);
if (!bodyInSubComp1)
return false;
// Copy/paste body from sub component 1 to sub component 2
Ptr<Features> featuresInSubComp2 = subComp2->features();
if (!featuresInSubComp2)
return false;
Ptr<CopyPasteBodies> copyPasteBodiesInSubComp2 = featuresInSubComp2->copyPasteBodies();
if (!copyPasteBodiesInSubComp2)
return false;
Ptr<CopyPasteBody> copyPasteBody = copyPasteBodiesInSubComp2->add(bodyInSubComp1);
if (!copyPasteBody)
return false;
Ptr<ObjectCollection> sourceBodies = copyPasteBody->sourceBody();
if (!sourceBodies)
return false;
// Copy/paste bodies from sub component to root component
Ptr<ObjectCollection> bodyCollection = ObjectCollection::create();
if (!bodyCollection)
return false;
for (size_t i = 0; i < sourceBodies->count(); ++i)
bodyCollection->add(sourceBodies->item(i));
Ptr<BRepBodies> bodiesInSubComp2 = subComp2->bRepBodies();
if (!bodiesInSubComp2)
return false;
for (size_t i = 0; i < bodiesInSubComp2->count(); ++i)
bodyCollection->add(bodiesInSubComp2->item(i));
Ptr<Features> featuresInRoot = rootComp->features();
if (!featuresInRoot)
return false;
Ptr<CopyPasteBodies> copyPasteBodiesInRoot = featuresInRoot->copyPasteBodies();
if (!copyPasteBodiesInRoot)
return false;
copyPasteBody = copyPasteBodiesInRoot->add(bodyCollection);
if (!copyPasteBody)
return false;
// Dump the information of Copy Paste Body in root component
for (size_t i = 0; i < copyPasteBodiesInRoot->count(); ++i)
{
copyPasteBody = copyPasteBodiesInRoot->item(i);
if (!copyPasteBody)
return false;
std::string copyPasteBodyInfo = "CopyPasteBody: name - " + copyPasteBody->name();
ui->messageBox(copyPasteBodyInfo);
}
return true;
}
/**
* Copy Paste Bodies API Sample
* Demonstrates how to use Copy Paste Bodies related API.
*/
import {adsk} from '@adsk/fusion'
function run() {
// Get the Fusion API's application object
const app = adsk.core.Application.get();
if (!app) throw Error("No adsk.core.Application.");
// Create a document.
const doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
const design = app.activeProduct as adsk.fusion.Design
// Get the root component of the active design.
const rootComp = design.rootComponent
// Get the first sub component
const occs = rootComp.occurrences
const subComp1 = occs.item(0).component
// Get the second sub component
const subComp2 = occs.item(1).component
// Get the first body in sub component 1
const bodyInSubComp1 = subComp1.bRepBodies.item(0)
// Copy/paste body from sub component 1 to sub component 2
const copyPasteBody = subComp2.features.copyPasteBodies.add(bodyInSubComp1)
// Copy/paste bodies from sub component to root component
const sourceBodies = adsk.core.ObjectCollection.create()
for (let i: number = 0; i < copyPasteBody.sourceBody.count; i++) {
sourceBodies.add(copyPasteBody.sourceBody.item(i))
}
for (let i: number = 0; i < subComp2.bRepBodies.count; i++) {
sourceBodies.add(subComp2.bRepBodies.item(i))
}
rootComp.features.copyPasteBodies.add(sourceBodies)
// Dump the information of Copy Paste Body in root component
for (let i: number = 0; i < rootComp.features.copyPasteBodies.count; i++) {
const copyPasteBody = rootComp.features.copyPasteBodies.item(i)
const copyPasteBodyInfo = `CopyPasteBody: name - ${copyPasteBody.name}`
adsk.log(copyPasteBodyInfo)
}
}
run();