image

Skripty, makra, programování, APIstálý odkaz / permalink

19.10.2019

Program Fusion 360 podporuje tvorbu skriptů. Lze tak popsat a zautomatizovat opakované úkony. Skripty si můžete sami vytvořit, neba zdarma či za úplatu stáhnout z internetu.

Fusion poskytuje rozhraní API podporující tyto jazyky:

  • C++
  • Python
  • JavaScript

Autodesk poskytuje kopletní popis objektového modelu rozhraní:

image

Vyzkoušel jsem si jednoduchý příklad v C++, jako prostředí jsem využil Visual Studio od Microsoftu. Kompilací vznikne dll modul, který lze zavolat z Fusionu. Je to jednoduché. Úplně se nabízí naprogramovat si některé konstrukční postupy jak to nabízí specializované modelářské CAD programy. image

Nejrychlejší je program napsaný v C++, program v JavaScriptu nejpomalejší. Python je asi nejpoužívanější asi i díky tomu, že pokud si stáhnete skript v Pythonu, získáte skript ve zdrojové podobě, můžete tedy skript studovat a upravovat.

C++stálý odkaz / permalink

20.10.2019

Napsat první program pro řízení Fusion 360 v C++, když drtivá většina zveřejněných příkladů je v Pythonu a když s C++ teprve začínáte a zápasíte se syntaxí jazyka, není úplně jednoduché.

image

Využil jsem nemoci a zkusil jsem v posteli přepsat tento jednoduchý příklad v Pythonu:


import adsk.core, adsk.fusion, adsk.cam, traceback
def run(context):
  ui = None
  try:
    app = adsk.core.Application.get()
    ui = app.userInterface
    design = app.activeProduct
    rootComp = design.rootComponent
    sketches = rootComp.sketches
    xyPlane = rootComp.xYConstructionPlane
    sketch = sketches.add(xyPlane)
    lines = sketch.sketchCurves.sketchLines
    point0 = adsk.core.Point3D.create(0, 0, 0)
    point1 = adsk.core.Point3D.create(0, 1, 0)
    point2 = adsk.core.Point3D.create(1, 1, 0)
    point3 = adsk.core.Point3D.create(1, 0, 0)
    lines.addByTwoPoints(point0, point1)
    lines.addByTwoPoints(point1, point2)
    lines.addByTwoPoints(point2, point3)
    lines.addByTwoPoints(point3, point0)
    profile = sketch.profiles.item(0)
    extrudes = rootComp.features.extrudeFeatures
    ext_input = extrudes.createInput(profile, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
    distance = adsk.core.ValueInput.createByReal(1)
    ext_input.setDistanceExtent(False, distance)
    ext_input.isSolid = True
    extrudes.add(ext_input)
  except:
    if ui:
      ui.messageBox('Failed:
{}'.format(traceback.format_exc()))

Program vykreslí krychli tak, jak je vidět na obrázku výše.

A takto to vypadá v mém podání v C++:


#include 
#include 
#include 

using namespace adsk::core;
using namespace adsk::fusion;
using namespace adsk::cam;

Ptr app;
Ptr ui;

extern "C" XI_EXPORT bool run(const char* context)
{
  app = Application::get();
  if (!app)
    return false;
  
  ui = app->userInterface();
  if (!ui)
    return false;
  try
  {
    Ptr design = app->activeProduct();
    Ptr rootComp = design->rootComponent();
    Ptr	sketches = rootComp->sketches();
    Ptr xyPlane = rootComp->xYConstructionPlane();
    Ptr sketch = sketches->add(xyPlane);
    Ptr lines = sketch->sketchCurves()->sketchLines();
    Ptr point0 = Point3D::create(0, 0, 0);
    Ptr point1 = Point3D::create(0, 1, 0);
    Ptr point2 = Point3D::create(1, 1, 0);
    Ptr point3 = Point3D::create(1, 0, 0);
    lines->addByTwoPoints(point0, point1);
    lines->addByTwoPoints(point1, point2);
    lines->addByTwoPoints(point2, point3);
    lines->addByTwoPoints(point3, point0);
    Ptr profile = sketch->profiles()->item(0);
    Ptr extrudes = rootComp->features()->extrudeFeatures();
    Ptr ext_input = extrudes->createInput(profile, FeatureOperations::NewBodyFeatureOperation);
    Ptr distance = ValueInput::createByReal(1);
    ext_input->setDistanceExtent(false, distance);
    bool vysl = ext_input->isSolid(true);
    extrudes->add(ext_input);
  }
  catch (std::bad_exception& e)
  {
    if (ui)
    	ui->messageBox("Chyba :");
  }
  return true;
}

#ifdef XI_WIN

#include 

BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved)
{
  switch (reason)
  {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
  }
  return TRUE;
}

#endif // XI_WIN

P O K R A Č O V Á N Í   P Ř Í Š T Ě


zpátky na: Problémy │ dál na: Na závěr


přehled kapitol:

  1. Fusion 360
  2. Naučím se Fusion 360!
  3. Vagón
  4. Tutoriály
  5. Tipy a triky
  6. Tutoriály tématicky zaměřené
  7. Tutoriály kreslení modelů
  8. Komplexní ukázky práce
  9. Cvičení 1 - Stojánek na vajíčka
  10. Cvičení 2 - Lodička
  11. Cvičení 3 - Letadýlko
  12. Cvičení 4 - Letadýlko s 3D díly
  13. Další práce
  14. Proč, nač
  15. Jednotlivosti - konstrukce
  16. Jednotlivosti - výroba
  17. Postprocesory
  18. Poznámky
  19. Na co si dávám pozor
  20. Jak rychle připravit díly pro řezání
  21. Volnoplošné modelování, T-spline
  22. Tutoriály k volnoplošnému modelování
  23. Klávesové zkratky k volnoplošnému modelování
  24. Problémy
  25. Skripty, makra, programování, API
  26. Na závěr
  27. Novinky ve Fusion 360
  28. Správa
  29. Klávesové zkratky
  30. Fusion 360 a router Stepcraft
  31. Fusion 360 a 3D tiskárna Průša
  32. Fusion 360 a STL
  33. Práce s STL
  34. Zdroje

(zveřejněno v rubrice Modely letadel | Dílna | CNC router | Fusion 360)