Cada recurso é um endpoint antes de ser um botão

Um modelador CAD que seus programas controlam tão bem quanto suas mãos.

Não existe no Lola3d nenhuma operação que exista só na interface. A barra de ferramentas, a API REST, as ferramentas MCP e o assistente integrado chamam as mesmas 228 ações, validadas pelos mesmos esquemas JSON, confirmadas pelas mesmas revisões e etapas de desfazer.

Um catálogo, quatro chamadores

A mesma ação, seja quem for que peça.

GET /api/studio/actions é o esquema de execução oficial — não um documento que se afasta do código, mas o catálogo sobre o qual o próprio aplicativo é construído. Tudo o que está nele pode ser chamado com um token de sessão ou um token de API.

As mutações carregam expected_revision. Uma desatualizada é recusada com 409 em vez de mesclada por sorte, e um erro do kernel deixa o documento idêntico, byte a byte.

REST
# Everything the modeler can do, with its schema
curl -H "Authorization: Bearer $TOKEN" \
     https://lola3d.app/api/studio/actions

# One edit, on the revision you hold
curl -X POST https://lola3d.app/api/studio/actions/push_pull \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"model_id":"…","expected_revision":12,
       "args":{"target":"body1","face_id":"f7","distance":40}}'

# A hundred commands as one revision and one undo step
curl -X POST https://lola3d.app/api/studio/actions/batch …
Projeto generativo

Python, dentro do kernel.

Um lote de comandos não consegue ler o modelo entre seus próprios comandos. Essa única limitação é o que separa automatizar um clique de gerar um projeto — e é o que o console Python remove.

O que o cad oferece

  • cad.create_box(width=100, …) — qualquer ação do catálogo, pelo nome, validada pelo seu próprio esquema
  • cad.actions() / cad.help(name) — o catálogo, de dentro do script
  • cad.document, cad.features, cad.find(name) — o modelo como ele está
  • cad.objects(), cad.bounds() — os corpos visíveis, seu volume, área e dimensões
  • params — as variáveis que você passou; print(…) capturado; result retornado

O que ele confirma

  • Um script é uma edição e uma etapa de desfazer.
  • Um script que lança uma exceção não confirma nada — e diz qual linha falhou.
  • Um script que não muda nada não é uma revisão: medir é de graça.
  • dry_run executa tudo e não guarda nada.

Quanto vale a sandbox — honestamente

O namespace restrito — sem open, sem eval, sem exec, sem atributos dunder e apenas com os módulos numéricos e estruturais — é uma proteção, não uma fronteira de segurança. O CPython nunca ofereceu uma sandbox real dentro do processo, e não vamos fingir o contrário.

O que realmente segura: o script roda em um processo worker de geometria com seus próprios limites de memória e CPU, sob um prazo que o próprio worker faz cumprir (um laço ocupado se interrompe sozinho em vez de custar um worker), e atrás de um escopoadmin por padrão, porque executar um script é executar código no host de geometria. Uma configuração o amplia a todos os editores; outra remove a ação do catálogo por completo.

A lattice whose size follows its own arithmetic
n = params["cells"]
pitch = params["pitch"]
strut = params["strut"]

for i in range(n + 1):
    for j in range(n + 1):
        cad.create_box(width=strut, depth=strut,
                       height=n * pitch,
                       position=[i * pitch, j * pitch, 0])

print("struts:", len(cad.features))
result = {"struts": len(cad.features),
          "extent_mm": n * pitch}
Read the model back, then decide
# Nothing applied — so this costs no revision at all.
total = 0.0
for o in cad.objects():
    print(f"{o['name']:<24} {o['volume']:>14,.1f} mm3")
    total += o["volume"]

box = cad.bounds()
size = [round(box["max"][i] - box["min"][i], 2) for i in range(3)]
result = {"bodies": len(cad.objects()), "bbox_mm": size}
O console Python no espaço de trabalho, com um script, sua saída e as ações que ele aplicou.
Inspetor → ⋯ → Console Python. Tab indenta, Ctrl+Enter executa, Execução de teste não guarda nada.
Modelagem agêntica

Um agente recebe o mesmo modelador que você — e os mesmos freios.

O endpoint MCP expõe o catálogo como ferramentas, sujeitas aos mesmos escopos de leitura e escrita que qualquer outro chamador. Um agente com um token de leitura pode medir, inspecionar e exportar; um com token de escrita pode modelar.

Ele também pode trabalhar como um colega: pré-visualizar uma alteração sem gravar nada, ou propor uma. Uma proposta desenha seu próprio fantasma na sua janela de visualização, com os dois botões que respondem a ela, e uma aprovação aplica todos os comandos como uma edição, com um grupo na linha do tempo sobre o que criou — ou uma rejeição não deixa nada para trás.

  • As ferramentas de leitura são livres; as de escrita exigem aprovação no aplicativo.
  • Um requisito expresso em palavras vira uma anotação verificada, reverificada a cada reconstrução.
  • Chamadas longas carregam seu sinal de interrupção: um cliente que vai embora libera o worker.
MCP
POST /mcp
X-API-Key: ign_…          # scope: ai

{"jsonrpc": "2.0", "id": 1,
 "method": "tools/call",
 "params": {
   "name": "propose_changes",
   "arguments": {
     "model_id": "…",
     "title": "Lighten the web by 18%",
     "commands": [
       {"action": "shell",
        "args": {"target": "web", "thickness": 2.4}}
     ]
   }}}
Intercâmbio

Sua geometria sai do jeito que entrou.

FormatoImportaçãoExportaçãoObservações
STEP (.step)SimSimB-rep exato. Montagens chegam como componentes.
IGES (.iges)SimSimSuperfícies costuradas onde são estanques.
BREP (.brep)SimSimO formato exato do próprio kernel, com nomes e cores.
STL (.stl)SimSimCosturado em um sólido quando estanque, mantido como faces quando não.
OBJ (.obj)SimSimExportado com seu MTL, em um zip.
3MF (.3mf)SimSimCores preservadas.
glTF / GLBSimSimPara a web e para renderizadores.
Collada (.dae)SimSimA porta de entrada e de saída do SketchUp, que não tem um formato .skp aberto.
IFC (.ifc)SimSimIFC4; corpos como proxies, componentes como montagens.
DXF / SVGSimSimEntram como entidades de esboço; saem de um esboço, de um corte ou de um desenho.
PDFSimFolhas de desenho.
JSONSimSimO próprio documento editável, incluindo a geometria congelada.
G-codeSimGRBL, LinuxCNC, Fanuc ou um pós-processador que você mesmo descreve.

Pegue um token e crie algo.

Entre, crie um token de API em Configurações e o modelador inteiro responde ao curl. Depois escreva o script que teria custado uma tarde de cliques.