Caro Paulo
Não pensas então adaptar a secviga1.lsp ao teu standard? Estava a pensar em preparar outra solução que fiz para betão armado, amanhã, se tiver tempo, preparo um novo thread (tema) com uma rotina em anexo (ou duas!)
Até amanhã
|
Caro Paulo
Não pensas então adaptar a secviga1.lsp ao teu standard? Estava a pensar em preparar outra solução que fiz para betão armado, amanhã, se tiver tempo, preparo um novo thread (tema) com uma rotina em anexo (ou duas!)
Até amanhã
Caros Amigos
Como tinha prometido ontem, cá vai: Já que este tema é sobre Autocad/VisualLisp, vamos por partes:
1º Junto em anexo o Lale1.zip, contem sld, dcl, lsp e dwg que servirá para testar a rotina, trata-se de um paramétrico para desenhar secções de lajes à escala 1/20.
a) o princípio seguido para instalação é igual ao do secpilar que já coloquei neste forum.
b) depois de carregado em Load Aplication..., Load, digite laje, "enter", verifique bem a imagem da caixa de diálogo ( a) b) c) d) ... ), o comportamento da caixa depende da introdução dos valores, após a introdução do valor do vão (atenção à unudade de medida: m - de metros) é necessário um "enter". Após o preenchimento dos outros valores é que se torna possível determinar a origem (botão), reparem nas modificações da caixa enquanto a utilizam.
2º Também faço macros em VBA, dizem que é de execução mais rápida e eficiente que o Autolisp, pela minha experiência acho que é mais fácil de programar, as caixas de diálogo (UserForm) são mais fáceis de criar e programar, em média 4X mais rápido do que Autolisp c/dcl. Lanço aqui uma questão: será possível conjugar um ficheiro de Vlisp, uma vez que possui funções mais extensas (activex), com uma UserForm do VBA?
Junto uma macro simples (Referencia.zip) mas que já me tem sido muito útil em desenho de pormenorização. A instalação segue o mesmo princípio, depois de carregada, use -vbarun, digite seta "enter"
Fico a aguardar o vosso "feed back", manifestem as vossas impressões, sugestões, etc.
Last edited by Josue Silva; 2007-01-19 at 04:03 PM.
Caro Josué
Eu até gostava de adaptar a rotina aos nossos Standards, mas acho, pelo que vi, que os meus conhecimentos ainda são muito rudimentares para levar a cabo tal missão. Acresce o facto de que o meu tempo livre é muito reduzido, e para programar e estudar ao mesmo tempo, torna-se um pouco complicado.
Não digo que não venha a tentar, mas não vai ser fácil. Além do mais o DCL ainda é para mim uma linguagem bastante obscura, muito mais ainda do que o AutoLISP. Ainda tenho um longo caminho a percorrer...
Mas gostava muito de acabar a rotina que comecei, a tal rebuscada VIGA.LSP, uma vez que só me falta a parte de inserção do texto nas posições correctas.
Quem sabe alguém no Forum daria umas dicas a este casmurro?
Falta tão pouco...
Cumprimentos
Olá Paulo,
Infelizmente não tive muito tempo para poder analisar com detalhe a tua aplicação, mas tentei acrescentar algumas instruções ao código. Seria bom que fizesses alguns testes para ver se o que pretendes é algo do género.
Até breve
Jorge Anjos
Tomar - Portugal
Caro Jorge Anjos
Já testei a rotina e aparentemente está quase a funcionar como eu desejava!!
Faltam apenas e ainda alguns "retoques" cosméticos em relação a côres e tipo de texto que vou tentar introduzir. No entanto, posso já dizer-lhe que uma coisa que ainda não está correcta é o facto de a rotina escrever os varões como 010, 012, 016, ... etc. Esses são os nomes dos blocos *.dwg a inserir. O que a rotina deverta escrever seria 10, 12,16, ...etc. Mas eu não queria alterar os nomes dos blocos.
Poderá enviar-me uma dica de como o conseguir? Como pôde e pode ver, os meus conhecimentos na matéria são muito rudimentares.
De resto, ainda não estudei mais a fundo o código que teve a amabilidade de introduzir mas vou fazê-lo assim que tiver algum tempo disponível. (AutoLISP e eu, mede-se em horas, dias, semanas...)
De qualquer modo, agradeço-lhe imenso o tempo que dispendeu com o meu "problema" e espero poder contar com a sua paciência e conhecimentos para outros que decerto me vão surgir.
(Quando tiver terminado a rotina vou pôr-lhe um "prompt" com uma referência ao seu apoio.)
Muito obrigado
PS: Esta é a segunda vez que falo com alguém sobre AutoLISP. A primeira foi á cerca de um ano quando o Membro Pedro Ferreira me ajudou, via mail, a resolver um outro meu "caso bicudo". Se não fôr neste Fórum, não conheço ninguém mais com quem tirar dúvidas. Portanto Mestes, tenham paciência aqui com o novato, OK? (LOL)
Olá Paulo Castro,
Agora percebi porque colocaste uma a função getstring (obter uma variável composta por caracteres) e não a função getint ou getreal (obter um número inteiro ou real) na instrução (setq d1 (getstring "\n Enter top diameters: ")).
Alterei as instruções que tinha acrescentado anteriormente, penso que agora os diâmetros já são colocados sem os zeros extra.
O código ficou um pouco desarrumado mas poderei mais tarde explicar detalhadamente as alterações que fiz de forma a facilitar os "retoques" que pretendes fazer...e não te preocupes com a referência
Até breve
Jorge Anjos
Tomar - Portugal
Olá,
Conforme tinha combinado, aqui vão as alterações comentadas.
es1 (getint "\n Digite a secção dos estribos (mm): ")
Esta linha pede um número inteiro (Getint) ao utilizador e guarda esse valor numa variável (es1) que servirá para a colocação do texto referente ao diâmetro dos estribos
afes1 (getreal "\n Digite o afastamento dos estribos (m): ")
Esta linha é semelhante à anterior, mas como o afastamento entre estribos é regra geral um número fraccionário (se usarmos o metro como unidade), a variável a utilizar terá que ser do tipo real, daí o uso da função Getint.
Como os valores pedidos não serão utilizados em nenhuma operação aritmética, também poderia ter usado a função Getstring, que pede ao utilizador um caracter ou um conjunto de caracteres, mas como regra geral uso sempre Getint ou Getreal para guardar dados numéricos, preferi usar este processo.
(setq ANDZIN (getvar "dimzin"))
(setvar "dimzin" 0)
Na primeira linha guardo a valor da variável do AutoCAD Dimzin e na segunda atribuo o valor 0 à mesma. Apesar de ser uma variável de cotagem, afecta igualmente o número de casas decimais resultante da função Rtos que irá ser usada mais à frente
(setq txtdisup (strcat (itoa n1) (chr 37) (chr 37) (chr 99) (itoa (atoi d1))))
Nesta linha crio uma variável (txtdisup) do tipo String para ser usada como texto a introduzir no comando Text que irá colocar o diâmetro dos varões superiores.
Como o texto a introduzir não está agregado numa só frase, necessito de usar a função strcat que faz precisamente isso, junta várias Strings numa só String
(strcat
(itoa n1) faz a conversão da variável do tipo integer n1 numa String
(chr 37) cria o caracter %
(chr 37) cria o caracter %
(chr 99) cria o caracter c
(itoa (atoi d1)) Atoi converte uma String num número real e Itoa cnverte-o novamente numa String. Para não alterar o teu código, utilizei este método para subtrair os zeros à esquerda dos diâmetros dos varões.
(command "_.text" "br" ce4a siz 0.0 txtdisup "")
(command "_.text"
"br" é a jutificação do texto (bottom right)
ce4a é o ponto final da linha de chamada e ponto de inserção do texto
siz é a variável que definiste para a altura do texto
0.0 rotação do texto
txtdisup a variável que contém o texto a introduzir
"") enter para fechar o comando
(setq txtdiinf (strcat (itoa n2)(chr 37) (chr 37) (chr 99) (itoa (atoi d2))))
(command "_.text" "br" ce1a siz 0.0 txtdiinf "")
Esta duas linhas fazem o mesmo das anteriores e servem para colocar o texto dos varões inferiores
(setq txtdimed (strcat "ESTR. " (chr 37) (chr 37) (chr 99) (itoa es1) "//" (rtos afes1 2 2)))
(command "_.text" "br" mpt siz 0.0 txtdimed "")
Esta linhas servem para colocar o texto dos estribos e a principal diferença das anteriores a instrução
(rtos afes1 2 2) que converte a variável do tipo Real afes1 em String
(setvar "dimzin" ANDZIN)
Nesta linha atribuo o valor inicial à variável do AutoCAD Dimzin.
Espero não ter complicado muito.
Até breve
Jorge Anjos
Tomar - Portugal
Caro Jorge Anjos
Como diziam num anúncio de antigo da TV: Estou maravilhado!!!
Testei de novo a rotima. Já não apresenta o "bug dos zeros" e está mesmo quase no ponto.
Já vi o código que acrescentaste e, como é óbvio, não percebi metade dele. Mas com as explicações que dás no "post" anterior, acho que, com um pouquinho de estudo, chego lá, assim eu descubra um tempinho para isso.
(Era tão bom que todas as rotinas viessem tão bem comentadas como tu o fizeste...!!! Um espanto!)
Portanto, para já não vou maçar mais o fórum com essa questão. (Para já...)
No entanto gostaria de te (vos) pôr uma nova questão: Qual é a variável, que controla o factor de inclinação do texto, o "Obliquing Angle"?
Já por diversas vezes tentei incluí-la em rotinas mas não a descobri no Help do Autocad. Sei que ela é controlável através da dialog "Text Style" e da "Caixa"(???) "Properties", mas não sei como modificá-la através de rotinas AutoLISP por não saber o nome dela.
Alguém me dá uma dica?
Aproveito para pôr outras duas questões (Não sei se é este o local apropriado, peço por isso a benevolência do moderador...):
1 - Existem cursos de Autolisp em Portugal? Onde? Quando e quanto? Onde procurar na zona de Lisboa?
2 - Tenho muitos "Turorials" dispersos sobre AutoLISP. Uns completos, mas resumidos. Outros melhores, mas incompletos e outros, nem uma coisa nem outra...LOL!
Existe alguma documentação completa compilada, alguma "Biblia" e já agora em Português? Nas livrarias ou na Net? Onde? Alguém a tem e pode disponibilizá-la aqui ao maçarico?
Obrigado todos.
Caro Paulo
Quanto à primeira questão, julgo não haver variável para controlo do "Obliquing Angle"
a solução é criar a textstyle com os parametros todos e pô-la corrente para utilizar
(command) "-style" "teste" "romans" "2" "" "30d20'10"" "" "" ""
nome (neste caso, teste)
fonte (neste caso romans)
valor da altura entre "" ou nome da variável com o valor
Withfactor, neste caso com as "" fica a 1, valor por defeito
Obliquing angle, valor entre "" neste caso 30º 20' 10" (repare que tem segundas aspas para fechar o valor que é uma "string", se o valor for calculado pela rotina e guardada numa variável, coloque o nome da variável sem aspas.
o conjunto final de aspas
backwards
upside-down
Vertical
As três aspas aceitam o valor por defeito NO e tem a vantagem de ficar corrente
Penso ter ajudado
Quanto às outras questões, vou fazer alguma pesquisa e se encontrar digo-lhe
Last edited by Josue Silva; 2007-01-22 at 05:53 PM.
Josué
Eu bem suspeitava de que essa variável não existia. Por outro lado, tenho algures nos meus "arquivos" um documento qualquer que refere variáveis não documentadas do AutoCAD. Tenho que ir vasculhar á procura desse ficheiro que penso que era um *.pdf. Se encontrar qualquer coisa, logo digo.
Quanto á solução que me enviou, é mais ou menos a que tenho adoptado, mas nunca me pareceu a ideal, embora cumpra o objectivo pretendido. De qualquer modo fico grato pelo comentário detalhado que enviou. Por vezes, é na leitura dos comentários que encontramos algo que nos dá aquele "Click" que faltava.
PS: Recebi um mail com links, em resposta ás minhas questões soobre Cursos e Bíblias Lisp.
Mas com o meu jeitinho, apaguei-o por engano. A quem de direito: Poderia enviar-mo de novo?
Obrigado