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

Do you have a question you want to ask an existing QCAD user about QCAD and what you can do with it? Do you want to know if a particular feature exists? This is the place to ask.

Moderator: andrew

Forum rules

Always indicate your operating system and QCAD version.

Attach drawing files and screenshots.

Post one question per topic.

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Tue Dec 10, 2019 3:34 pm

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.

User avatar
andrew
Site Admin
Posts: 9037
Joined: Fri Mar 30, 2007 6:07 am

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

Post by andrew » Tue Dec 10, 2019 4:35 pm

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.

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Tue Dec 10, 2019 5:46 pm

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?

User avatar
andrew
Site Admin
Posts: 9037
Joined: Fri Mar 30, 2007 6:07 am

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

Post by andrew » Tue Dec 10, 2019 8:19 pm

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

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Tue Dec 10, 2019 8:54 pm

Estou experimentando com o console de script shell do QCAD...ai apareceu o erro que citei na minha ultima postagem...
Attachments
1.png
parte da tela do qcad
1.png (49.55 KiB) Viewed 11959 times

User avatar
andrew
Site Admin
Posts: 9037
Joined: Fri Mar 30, 2007 6:07 am

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

Post by andrew » Thu Dec 12, 2019 8:29 am

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.

CVH
Premier Member
Posts: 3416
Joined: Wed Sep 27, 2017 4:17 pm

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

Post by CVH » Thu Dec 12, 2019 3:03 pm

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

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Mon Dec 16, 2019 1:58 pm

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.

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Sun Jan 05, 2020 4:31 pm

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?

User avatar
andrew
Site Admin
Posts: 9037
Joined: Fri Mar 30, 2007 6:07 am

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

Post by andrew » Mon Jan 06, 2020 6:18 pm

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);

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Tue Jan 07, 2020 3:44 pm

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:
Attachments
fig1.png
fig1.png (172.67 KiB) Viewed 11582 times

User avatar
andrew
Site Admin
Posts: 9037
Joined: Fri Mar 30, 2007 6:07 am

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

Post by andrew » Tue Jan 07, 2020 9:03 pm

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);

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Wed Jan 08, 2020 9:35 pm

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?

Ailton
Junior Member
Posts: 11
Joined: Wed Dec 04, 2019 2:15 pm

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

Post by Ailton » Wed Jan 08, 2020 9:36 pm

Eis a figura:
Attachments
3pFalha.png
3pFalha.png (139.42 KiB) Viewed 11520 times

CVH
Premier Member
Posts: 3416
Joined: Wed Sep 27, 2017 4:17 pm

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

Post by CVH » Wed Jan 08, 2020 9:56 pm

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

Post Reply

Return to “Pre-sales Questions”