Page 1 of 2

Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Dec 10, 2019 3:34 pm
by Ailton
Tenho procurado bastante pela internet e não encontrei como construir um código, inclusive usando a função include, caso seja necessário, para construir linhas e ou arcos, por exemplo, sem o uso do arquivo "simple.js", pois sei que ele é bastante util, mas tem alguns tipos de arcos, que não consigo fazer com ele, logo preciso de um outro tipo de função. Sou iniciante no forum, então desculpem-me se postei este pedido de ajuda em local errado. Tem alguns conhecimentos de CAD, digo inclusive que tenho meu projeto todo feito através de um arquivo source, utilizado no "DRAFTSIGHT", mas quero achar a mesma solução utilizando o QCAD, mas ele não entende a linguagem utilizada no "DRAFTSIGHT", então preciso reescrever tudo utilizando ecmascript que é a linguagem aceita pelo QCAD.
Agradeço, desde já pela ajuda e iniciativa de todos os mantenedores deste forum.

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Dec 10, 2019 4:35 pm
by andrew
Para adicionar um arco, você pode usar:

Code: Select all

var e = new RArcEntity(document, new RArcData(center, radius, angle1, angle2, reversed));
var op = new RAddObjectOperation(e, "Adding an arc");
di.applyOperation(op);
Onde "di" é o seu RDocumentInterface.

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Dec 10, 2019 5:46 pm
by Ailton
Primeiramente, muito obrigado pelo apoio e pronta resposta a questão colocada.
Ja começo a ver uma luz aqui pra essas questões.
Porem recebi a seguinte resposta quando adicionei a linha "var e = new RArcEntity(document, new RArcData([0,0], 20,0,30, reversed));" ao prompt de comando:
ReferenceError: Can't find variable: document

Pode me ajudar com a solução?

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Dec 10, 2019 8:19 pm
by andrew
Por favor, forneça mais contexto. Que tipo de script você está escrevendo? Am ferramenta interativa com um menu / botão de ferramenta? Uma ferramenta de linha de comando? Você está experimentando com o console de script do QCAD?

Você também pode encontrar muitos exemplos de scripts em:
https://github.com/qcad/qcad/tree/maste ... c/Examples

E olhe realmente para todos os scripts existentes do QCAD:
https://github.com/qcad/qcad/tree/master/scripts

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Dec 10, 2019 8:54 pm
by Ailton
Estou experimentando com o console de script shell do QCAD...ai apareceu o erro que citei na minha ultima postagem...

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Thu Dec 12, 2019 8:29 am
by andrew
Na consola de script:

Code: Select all

var doc = getDocument();
var di = getDocumentInterface();
var e = new RArcEntity(doc, new RArcData(new RVector(0,0), 20, 0,RMath.deg2rad(30), false));
var op = new RAddObjectOperation(e, "Adding an arc");
di.applyOperation(op);
Os ângulos estão em rad. Os vetores são dados como objetos RVector.

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Thu Dec 12, 2019 3:03 pm
by CVH
Ailton wrote:
Tue Dec 10, 2019 3:34 pm
mas tem alguns tipos de arcos, que não consigo fazer com ele, logo preciso de um outro tipo de função
Você pode elaborar sobre isso?

Can you elaborate on that?
Regards,
CVH

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Mon Dec 16, 2019 1:58 pm
by Ailton
Obrigado pela ajuda, referente a construção de linhas e arcos. Essa ultima postagem do andrew funcionou perfeitamente e já me deu condições de avançar um pouco no projeto.
Como ainda estou iniciando em Ecmascript tenho muita dificuldade para criar exemplos funcionais para outras ações a partir dos exemplos genéricos que são oferecidos. Devo iniciar um outro tópico para conseguir ir vencendo estes obstáculos e executar via código a seleção de todos objetos, a movimentação ou rotação de todos ou alguns objetos e por ai vai.
Mas quero expressar meus profundos agradecimentos a equipe que mantem o forum e em especial ao Andrew.

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Sun Jan 05, 2020 4:31 pm
by Ailton
Prezados, preciso de ajuda.

Quando executo estas linhas abaixo para criar um arco a partir de dois pontos e um raio:

var doc = getDocument();
var di = getDocumentInterface();
var operation = new RAddObjectsOperation();
include('/opt/qcad/scripts/Draw/Arc/Arc2PR/Arc2PR.js');
var obj = {};
obj.point1 = new RVector(50,50);
obj.point2 = new RVector(75,100);
obj.radius = 50;
obj.reversed = false; // true for clockwise
obj.alternativeSolution = false; // true for longer of the two possible arcs
var arc = Arc2PR.prototype.getArc2PR.call(obj, false);
operation.addObject(arc);
operation.apply(doc);

Recebo a msg abaixo:

Script exception in script '/home/ailton/Área de Trabalho/teste.js':
Error: :-1:-1: RAddObjectsOperation: Argument 0 is not of type RObject .
<native>(RArc(RShape(address: "0x5560400"), center: RVector(25.419, 93.5405, 0, true),
radius: 50, startAngle: 299.447, endAngle: 7.42279, startPoint: RVector(50, 50, 0, true),
endPoint: RVector(75, 100, 0, true), sweep: 1.1864, reversed: false))
at -1 anonymous() at 12 <anonymous>() at scripts/Misc/MiscDevelopment/RunScript/RunScript.js:120
<eval>() at 1 <native>() at -1 main() at scripts/autostart.js:821
<global>() at scripts/autostart.js:834

Como posso criar um arco do ponto (50,50) ao ponto (75,100), com raio 50?
É possivel fazê-lo, também usando simple.js? Pode dar um exemplo completo?

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Mon Jan 06, 2020 6:18 pm
by andrew
Arc2PR.prototype.getArc2PR returns a shape (RArc).


Try this:

var doc = getDocument();
var di = getDocumentInterface();
var operation = new RAddObjectsOperation();
include('scripts/Draw/Arc/Arc2PR/Arc2PR.js');
var obj = {};
obj.point1 = new RVector(50,50);
obj.point2 = new RVector(75,100);
obj.radius = 50;
obj.reversed = false; // true for clockwise
obj.alternativeSolution = false; // true for longer of the two possible arcs
var arc = Arc2PR.prototype.getArc2PR.call(obj, false);
var e = new RArcEntity(doc, new RArcData(arc));
operation.addObject(e);
operation.apply(doc);

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Jan 07, 2020 3:44 pm
by Ailton
Ao executar as linhas acima, o programa não retornou nenhum erro, porém não "printou" na tela a curva desejada. Veja a figura:

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Tue Jan 07, 2020 9:03 pm
by andrew
The display does not refresh if you apply to the document (a document has no knowledge of attached views).

Let the document interface apply the operation instead. It will update the view(s) attached to it:

Code: Select all

di.applyOperation(operation);
This is instead of

Code: Select all

operation.apply(doc);

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Wed Jan 08, 2020 9:35 pm
by Ailton
Maravilha...funciona otimo.
Agora, tentei seguir o exemplo de Arco com 2 pontos e raio, só que para um arco com 3 pontos e deu o problema como segue na figura. Poderia me dar um help?

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Wed Jan 08, 2020 9:36 pm
by Ailton
Eis a figura:

Re: Criar linhas ou arcos via ecmascrits, sem o uso do "simple.js"

Posted: Wed Jan 08, 2020 9:56 pm
by CVH
I would call that as:
var newArc = ShapeAlgorithms.createArcFrom3Points( RVector1, RVector2, RVector3);
a function in ShapeAlgorithms.js
That returns an Rarc one still has to parse to the document in any way.

Arc3P.js is the method that runs if we use:
Menu/Draw/Arc/3 points (A3) and then start pointing where we want it.

I think calling a function is done without the .prototype.

Regards,
CVH