CAD 2D estilo AutoCAD com construção em 3D — no navegador do computador, tablet ou celular.
Arquitetura, estruturas metálicas, mecânica, P&ID e elétrica industrial, com login, biblioteca de desenhos e assistente de IA.
➜ Abrir o GPlanSiS|Drawings · Rodar localmente · Contribua · Guia detalhado
O GPlanSiS|Drawings é um CAD 2D com a linha de comando e os atalhos do AutoCAD (L, PL, C, TR, O, F, M, CO, DLI…) que roda inteiro no navegador e transforma a planta em modelo 3D com um clique. Ele nasceu para engenharia brasileira: unidade em milímetro, interface em português, símbolos de P&ID (ISA 5.1) e elétricos (IEC 60617), perfis de aço, tubulação, eletrocalha e listas industriais.
Existem duas formas de uso:
| Edição | Onde | Para quê |
|---|---|---|
Servidor (web/ + server/) |
drawings.gplansis.com | Login, desenhos guardados no servidor com versões, compartilhamento, permissões por usuário, DWG, DXF 2018, assistente IA e integração com o GPlanSiS|Docs. |
Arquivo único (standalone/) |
Qualquer navegador, até sem internet | O mesmo CAD num único HTML: dois cliques e pronto. Os desenhos ficam no armazenamento do navegador. |
Desenho e edição — linha, polilinha, retângulo, círculo, arco, elipse, polígono, spline, construção, parede, hachura com detecção de contorno, texto e texto multilinha; mover, copiar, girar, escala, espelhar, offset, aparar, estender, concordar, chanfro, matriz, esticar, explodir, unir, quebrar e alças (grips). Osnap, orto, polar, rastreamento e entrada dinâmica (F3, F8, F10, F11, F12). Coordenadas x,y, @dx,dy e @dist<ângulo.
Anotação e consulta — cotas linear, alinhada, raio, diâmetro, angular, contínua e de base; chamada; ambientes com área; distância, área e listagem.
Paramétrico — restrições horizontal, vertical, paralela, perpendicular, coincidente, fixa e igual; cotas paramétricas com expressões (d2 = d1·0,6); gerenciador de parâmetros.
Avançado — booleanas (união, subtração, interseção, XOR), blocos com atributos e extração CSV, GD&T e datums, tolerâncias de cota, imagem com vetorização, folhas com viewports e exportação IFC4.
Industrial — P&ID ISA 5.1, elétrico IEC 60617, parafusos ISO 4017, rolamentos 60/62/63, perfis IPE/HEA/W/UPN/L/RHS/CHS, engrenagens evolventes, solda e rugosidade, tubulação DN15–DN300, eletrocalha, tanques, esteiras e equipamentos em 3D; listas de equipamentos, instrumentos, linhas, fios, aço e materiais.
3D — "Construir em 3D" ergue paredes, aberturas, mobiliário, estruturas, tubulação e equipamentos com three.js (vistas isométrica, topo e frontal; exporta PNG).
Arquivos CAD
- DWG: leitura no servidor, convertido por LibreDWG (
dwg2dxf); gravação em DWG 2000 em beta (dxf2dwg). - DXF: leitura de qualquer versão ASCII no navegador (
web/cadimport.js) — arcos de polilinha, splines/NURBS, elipses, hachuras, matrizes de blocos, atributos, cotas, acentos e$INSUNITS. - Exportação: DXF AutoCAD 2018 (gerado no servidor com ezdxf), DXF R12, SVG, PNG, JSON e IFC4.
- Plotagem: A4 a A0, escala ou ajuste, monocromático, carimbo e viewports; saída em SVG, PNG 200 dpi ou PDF vetorial (svg2pdf + jsPDF).
Plataforma (edição servidor)
- Papéis Administrador, Projetista, Revisor e Consulta, com ajuste permissão por permissão (desenhar, excluir, compartilhar, importar, exportar, plotar, IA, auditoria, usuários).
- Ctrl+S salva no servidor; 40 versões por desenho; aviso de conflito quando duas pessoas editam; lixeira de 30 dias; compartilhamento com a equipe ou por usuário (ver / editar).
- Perfil com foto, troca de senha, sessões ativas, preferências (tema, salvamento automático, reabrir o último desenho) e registro de acessos.
- Assistente IA com modos Desenhar, Revisar desenho e Extrair listas; usa o desenho (ou a seleção) e as listas do CAD como contexto, aceita croqui/foto/PDF e responde em streaming. A chave da Anthropic fica cifrada no servidor e nunca volta ao navegador.
- Integração com o GPlanSiS|Docs: entrada única assinada, envio de PDF + DXF + JSON como documento com revisão e retorno de situação e comentários como nuvens de revisão.
- PWA: instalável no computador, Android e iPhone; ajustes próprios para celular (alvos de toque, dois dedos para zoom e pan).
Seis demonstrações (botão ▶ Demonstrações): apartamento de 92 m², planta industrial, eixo de transmissão, chapa paramétrica, partida estrela-triângulo e galpão com pipe rack.
Capturas feitas numa instância local com o usuário fictício admin@exemplo.com e as demonstrações embutidas.
flowchart LR
subgraph Navegador["Navegador (PWA)"]
CAD["cad.js<br/>CAD 2D, comandos, 3D (three.js)"]
IMP["cadimport.js<br/>leitura DXF"]
EXP["cadexport.js<br/>modelo para DXF"]
PLAT["plataforma.js<br/>login, desenhos, ajustes, IA, Docs"]
SW["sw.js<br/>cache do app shell"]
end
subgraph Servidor
CADDY["Caddy<br/>estáticos + CSP + TLS"]
API["FastAPI (uvicorn)<br/>server/app.py"]
EZ["exporta.py<br/>ezdxf → DXF 2018"]
IA["assistente.py<br/>prompt e esquema"]
PG[("PostgreSQL<br/>esquema drawings")]
LDWG["LibreDWG<br/>dwg2dxf / dxf2dwg<br/>(programa externo)"]
end
ANT["API Anthropic"]
DOCS["GPlanSiS|Docs"]
PLAT -- "/api/* (cookie de sessão)" --> CADDY
CAD --> CADDY
CADDY -- "web/ estático" --> Navegador
CADDY -- "/api/*" --> API
API --> PG
API --> EZ
API --> IA --> ANT
API -- "subprocesso" --> LDWG
API <-- "HMAC" --> DOCS
- Front sem build: HTML, CSS e JavaScript puros, servidos como arquivos estáticos. Bibliotecas de terceiros ficam em
web/vendor/e são servidas pelo próprio domínio (CSPscript-src 'self'). - API FastAPI com sessões em cookie HttpOnly, senhas em scrypt, proteção CSRF por cabeçalho próprio (
x-drawings: 1), bloqueio por tentativas e auditoria. - Banco PostgreSQL:
usuarios,sessoes,desenhos,desenho_acesso,desenho_versoes,acessos,config,docs_vinculoesso_nonce(server/schema.sql, aplicado automaticamente na partida). - DWG pelo LibreDWG, chamado como programa externo em subprocesso (não é ligado ao código Python).
| Camada | Tecnologias |
|---|---|
| Front | JavaScript sem framework, Canvas 2D, three.js r128, JSZip 3.10.1, jsPDF 4.2.1, svg2pdf.js, polygon-clipping 0.15.7, fontes IBM Plex |
| API | Python 3, FastAPI, uvicorn, psycopg 3 + pool, cryptography (Fernet), ezdxf, httpx, SDK anthropic |
| Dados | PostgreSQL |
| Conversão DWG | LibreDWG 0.14 (dwg2dxf, dxf2dwg) — opcional |
| Produção | Caddy (TLS, CSP, estáticos), systemd |
Abra standalone/GPlanSiS-Drawings-offline.html no Chrome, Edge, Safari ou Firefox. Ele traz three.js, JSZip, polygon-clipping e jsPDF embutidos e funciona sem internet. A versão -online.html é mais leve e baixa as bibliotecas por CDN quando precisa.
Requisitos: Python 3.11+, PostgreSQL 14+ e, opcionalmente, LibreDWG para DWG.
git clone https://github.com/SSBianchiplan/drawings.git
cd drawings
# 1. banco
createdb drawings # ou: psql -c "create database drawings"
# 2. ambiente Python
python3 -m venv .venv
.venv/bin/pip install -r server/requirements.txt
# 3. variáveis (valores fictícios; veja .env.example)
export DRAWINGS_DSN="postgresql://postgres@127.0.0.1:5432/drawings"
export DRAWINGS_MASTER=admin@exemplo.com
export DRAWINGS_COOKIE_SEGURO=0 # http:// local, sem HTTPS
# 4. administrador (imprime uma senha temporária; a troca é pedida no 1º acesso)
cd server
../.venv/bin/python app.py criar-admin admin@exemplo.com --nome "Administrador"
# 5. API + front num só processo (servidor de desenvolvimento)
../.venv/bin/uvicorn dev_local:app --port 8930 --reloadAbra http://127.0.0.1:8930, entre com o e-mail e a senha temporária e use ▶ Demonstrações para ter um desenho na tela.
server/dev_local.py monta web/ como estático sobre a mesma API. Em produção quem serve web/ é o Caddy (deploy/drawings.caddy), com os cabeçalhos de segurança.
Opcionais
- DWG: compile o LibreDWG (
./configure --prefix=/opt/libredwg && make && make install) ou aponteDRAWINGS_DWG2DXF/DRAWINGS_DXF2DWGpara os binários. Sem eles, a importação de DWG fica desligada e o resto funciona. - Assistente IA: entre como administrador e cole a chave da Anthropic em Configurações › Assistente IA (ou defina
ANTHROPIC_API_KEY). DefinaDRAWINGS_SEGREDOantes, para a chave ser guardada cifrada.
deploy/publicar.sh empacota web/, server/ e deploy/, carimba a versão nos links de CSS/JS e no service worker, envia por SSH e roda deploy/instalar.remoto.sh no servidor (usuário de sistema, banco com autenticação peer, venv, .env inicial, unidade systemd, bloco Caddy validado antes do reload e verificação de saúde).
DRAWINGS_HOST=meu-servidor DRAWINGS_MASTER=admin@exemplo.com bash deploy/publicar.shdrawings/
├── web/ front estático (servido pelo Caddy)
│ ├── index.html casca da aplicação
│ ├── cad.js / cad.css o CAD: comandos, desenho, cotas, industrial, 3D, plotagem
│ ├── cadimport.js leitura de DXF (ASCII, qualquer versão)
│ ├── cadexport.js modelo intermediário para exportação DXF
│ ├── plataforma.js/.css login, biblioteca de desenhos, configurações, IA, Docs
│ ├── celular.css ajustes para tela pequena
│ ├── sw.js, pwa.js, manifest.webmanifest, icones/ PWA
│ └── vendor/ three.js, JSZip, jsPDF, svg2pdf, polygon-clipping
├── server/
│ ├── app.py API FastAPI (auth, usuários, desenhos, IA, DWG, Docs) + CLI criar-admin
│ ├── assistente.py instruções e esquema de resposta do assistente IA
│ ├── exporta.py escrita de DXF 2018/2000 com ezdxf
│ ├── schema.sql esquema PostgreSQL (idempotente)
│ ├── dev_local.py servidor de desenvolvimento (API + web/)
│ └── requirements.txt
├── standalone/ CAD em arquivo HTML único (offline e online)
├── deploy/ publicar.sh, instalar.remoto.sh, unidade systemd, bloco Caddy
├── docs/guia.md guia detalhado de uso e operação
└── .github/ capa, telas, modelos de issue e PR
Todas lidas por server/app.py. Modelo com valores fictícios em .env.example.
| Variável | Para quê |
|---|---|
DRAWINGS_DSN |
Conexão PostgreSQL |
DRAWINGS_MASTER |
E-mail do administrador master |
DRAWINGS_SESSAO_HORAS |
Duração da sessão (padrão 12) |
DRAWINGS_COOKIE_SEGURO |
1 (padrão) cookie Secure; 0 para http local |
DRAWINGS_SEGREDO |
Chave Fernet que cifra a chave da IA no banco |
ANTHROPIC_API_KEY |
Chave da IA de reserva (opcional) |
DRAWINGS_IA_MODELO |
Modelo padrão do assistente |
DRAWINGS_DWG2DXF, DRAWINGS_DXF2DWG |
Caminhos dos binários do LibreDWG |
DRAWINGS_CONV_SOCKET |
Socket do serviço de conversão isolado (deploy/drawings-conv.*); vazio = converte no próprio processo, com ambiente vazio, diretório temporário e limites |
DRAWINGS_CONV_TIMEOUT_S, DRAWINGS_CONV_CPU_S, DRAWINGS_CONV_MEM_MB, DRAWINGS_CONV_FSIZE_MB |
Prazo e limites de recurso de cada conversão (padrão 120 s, 110 s de CPU, 1536 MB, 400 MB) |
DRAWINGS_URL |
Endereço público do Drawings (links enviados ao Docs) |
DRAWINGS_DOCS_SEGREDO, DRAWINGS_DOCS_URL, DRAWINGS_DOCS_API |
Integração com o GPlanSiS|Docs (opcional) |
O Drawings está no ar e tem muito espaço para crescer. Toda ajuda é bem-vinda — de quem desenha, de quem programa e de quem só quer apontar um problema.
Onde dá para ajudar agora
- Formatos CAD — DXF binário, MLEADER, imagens raster e sólidos/malhas na importação (hoje não lidos); estabilizar a gravação DWG (beta).
- Paramétrico — restrições em vértices de polilinha (hoje valem para linhas, paredes, círculos e arcos).
- Industrial — tubulação 3D com mudança de elevação no meio do trecho; novas bibliotecas de símbolos ISA/IEC; mais perfis e normas.
- Plotagem — mais formatos de carimbo e folhas personalizadas.
- Celular e acessibilidade — gestos, leitores de tela, contraste.
- Testes — hoje não há suíte automatizada: testes da API (pytest + PostgreSQL temporário) e de leitura de DXF com arquivos de exemplo são ótimas primeiras contribuições.
- Documentação — tutoriais, vídeos curtos, tradução da interface.
Boas primeiras issues
- Testes de
server/exporta.pygerando um DXF e relendo com ezdxf. - Testes da API de autenticação (
/api/auth/*) e do controle de versão (409em conflito). - Arquivos DXF pequenos de exemplo (sem dados de cliente) para regressão do
cadimport.js. - Um
docker-compose.ymlde desenvolvimento (PostgreSQL + API).
Leia o guia de contribuição, abra uma issue contando o que pretende fazer e mande seu pull request. Siga o código de conduta. Falhas de segurança: veja SECURITY.md.
Código próprio sob a licença MIT — Copyright (c) 2026 GPlanSiS.
Componentes de terceiros mantêm as próprias licenças:
| Componente | Licença | Como é usado |
|---|---|---|
| three.js, JSZip (opção MIT), jsPDF, svg2pdf.js, polygon-clipping | MIT | embutidos em web/vendor/ e standalone/ |
| FastAPI, ezdxf | MIT | dependências Python |
| uvicorn, httpx | BSD-3-Clause | dependências Python |
| cryptography | Apache-2.0 ou BSD-3-Clause | dependência Python |
| anthropic (SDK) | Apache-2.0 | dependência Python |
| psycopg 3 | LGPL-3.0 | dependência Python (instalada pelo pip, não modificada) |
| LibreDWG | GPL-3.0-or-later | programa externo opcional, chamado em subprocesso; não faz parte deste repositório |
Feito pela GPlanSiS. Contato: contato@gplansis.com.
Agradecimentos aos projetos LibreDWG, ezdxf, three.js, jsPDF, svg2pdf.js, JSZip e polygon-clipping, sem os quais este CAD não existiria.




