Fala pessoal, como que esta a expectativa para o Autodesk University 2016??Ja conferiu a promocao da minha pagina?? Anida nao? Entao corre!!Bom, mas este post nao e pra falar disso. E para voltar um pouco as origens!!! Isso mesmo!!! Vamos falar de Visual Lisp galera!!!O problema de hoje e o seguinte: Tabelas no CAD que estao explodidas e nos precisamos extrair os dados dali.Ja deu pra perceber que isso pode ser bem chato, nao e?Eu mesmo tive esse problema esta semana e, como eu amaldicoei o boco desenhista que fez isso, hehehe:Aqui, um exemplo de tabela explodida, no AutoCAD.Bem simples, so pra efeito de mostrar a "lispezinha" abaixo.Veja como fica o resultado:Da hora, ne? Agora, da pra copiar e colar no M$ Excel, ou ate mesmo colar no CAD como uma tabela de verdade!!!Bom, mas e a lisp? Veja:;pesquisa no google:(vl-load-com);Dwg2Html - plugin para exportar tabelas explodidas para html(defun c:Dwg2Html (/ linhasVerticais linhasHoriz linhas ent p1 p2 counter nLin html nCol x1 x2 y1 y2 tmp ssTxt file opcao) ;inicializa as listas de X e Y (setq linhasVerticais nil linhasHoriz nil) ;pede a selecao das linhas que formam a tabela ;precisa ser linha continua, para definir o espaco de cada celula (prompt "\nSelecione as linhas que desenham as tabelas") (setq linhas (ssget '((0 . "*LINE")))) (if (not linhas) (exit)) ;pode ter mais de um texto na celula. Eles serao concatenados ;com espaco ou quebras (initget "Q E" 0) (setq opcao (getkword "\nSelecione o tipo de quebra manual [Quebra, Espaco] <Quebra>") opcao (if (= "E" opcao) " " "<br>")) ;pede onde salvar o arquivo html (setq file (getfiled "Exportar tabela" "" "html" 1)) (if (not file) (exit)) ;classifica as linhas em: horizontais e verticais (repeat (sslength linhas) (setq ent (ssname linhas 0) p1 (vlax-curve-getstartpoint ent) p2 (vlax-curve-getendpoint ent)) (if (equal (car p1) (car p2) 0.0001) (if (not (member (car p1) linhasVerticais)) (setq linhasVerticais (cons (car p1) linhasVerticais))) (if (not (member (cadr p1) linhasHoriz)) (setq linhasHoriz (cons (cadr p1) linhasHoriz)))) (ssdel ent linhas)) ;ordena a lista das linhas verticais pelo X crescente e ;as linhas horizontais pelo Y decrescente (setq linhasVerticais (vl-sort linhasVerticais '<) linhasHoriz (vl-sort linhasHoriz '>)) ;calcula o canto superior esquerdo e inferior direito: (setq p1 (list (car linhasVerticais) (car linhasHoriz)) p2 (list (last linhasVerticais) (last linhasHoriz))) ;zoom window na tabela, para a selecao dos textos funcionar (vla-zoomwindow (vlax-get-acad-object) (vlax-3d-point p1) (vlax-3d-point p2)) ;inicia o cabecalho do html (setq html (strcat "<html> <head> <meta http-equiv='Content-Type;X-UA-Compatible' content='text/html;IE=9' charset='ISO-8859-1'> <title>Dwg2Html: " (vl-filename-base file) "</title> <style> body { font-family: arial; } p { font-weight: bold; } table { border-collapse: collapse; width: 100%;} td { border: 1px solid black; text-align:center; } a { text-decoration: none; } </style> </head> <body> <p> Visite: <a href='http://tbn2net.appspot.com'>TBN2NET, o melhor site de plug-ins para o AutoCAD!!!</a></p> <p>Arquivo: " (vl-string-translate "\\" "/" file) "</p> <br> <table> ")) ;repita para todas as linhas horizontais (setq nLin 0 counter 0) (repeat (1- (length linhasHoriz)) ;calcula os limites em Y da linha (setq y1 (nth nLin linhasHoriz) nLin (1+ nLin) y2 (nth nLin linhasHoriz) nCol 0) ;inicia o html da linha ('tr') (setq html (strcat