add a rectangle programmatically

Discuss and ask questions about CADViewX (Lite and Pro versions).

Moderators: support, SDS, admin

Post Reply
xavier
Posts: 27
Joined: 04 Dec 2012, 14:58

add a rectangle programmatically

Post by xavier » 04 Dec 2012, 15:12

Bonjour

Je suis developpeur sur langage WinDev.

J'ai rajouté un activeX CADviewX dans un de mes projets. Pourriez-vous m'indiquer comment rajouter un rectangle (et ou un cercle) dans un dessin juste par programmation et en n'utilisant que l'activeX ?

Un exemple de code serait parfait.

Merci d'avance.

Cordialement.

Xavier

_________________________________________________________________________________

Hello

I am developer of language WinDev.

I added an activeX CADViewX in one of my projects. Could you tell me how to add a rectangle (and or a circle) in a drawing just by programming and using only the ActiveX?

Sample code would be perfect.

Thank you in advance.

Cordially.

Xavier

xavier
Posts: 27
Joined: 04 Dec 2012, 14:58

Re: add a rectangle programmatically

Post by xavier » 05 Dec 2012, 18:10

Hello

With CADViewX, I can load a dxf file and display it on the screen.
With the methods and properties of the ActiveX, I can browse entities and change colors.
But I can not add a new entity.

___________________________________________________________________________________
My code:

AX_1 = allouer un objet Automation "CADViewLib.CADViewX"
ll = allouer un objet Automation "CADViewLib.CADLine"
ll>>CreateEntity()
ll>>Color = RougeClair
ll>>point = pp1 /* coordonnees of pp1 is found with AX_1>>Center() */
ll>>Point1 = pp2 /* pp2 is a point near pp1 */

AX_1>>CADImage>>CurrentLayout>>addentity(ll)
AX_1>>CADImage>>RefreshCurrentLayout()
___________________________________________________________________________________


But the line does not appear on the screen.
However, if I look at the number of entities (AX_1>>CADImage>>Converter>>Sections[csEntities]>>Count), before and after this code, the number increased by 1.

Thank you to tell me where is my mistake.

Cordially

xavier
Posts: 27
Joined: 04 Dec 2012, 14:58

Re: add a rectangle programmatically

Post by xavier » 05 Dec 2012, 18:25

Eureka

coordonnees found by the methode center() are out of screen.

sorry

support
Posts: 2930
Joined: 30 Mar 2005, 11:36
Contact:

Re: add a rectangle programmatically

Post by support » 06 Dec 2012, 19:36

Hello.
Your code is correct mostly. However you need also load the created entity to CADImage.Converter. Unfortunately I'm not familiar with WinDev, so the example on C#:

Code: Select all

    CADViewLib.CADLine line = new CADViewLib.CADLine();
    line.Point = AX_1.MkFPoint(100, 100, 0);
    line.Point1 = AX_1.MkFPoint(200, 200, 0);
    line.Color = 0xff;
    AX_1.CADImage.Converter.Loads((CADViewLib.Entity)line);
    AX_1.CADImage.CurrentLayout.AddEntity((CADViewLib.Entity)line);
    AX_1.CADImage.RefreshCurrentLayout();
Also please note, a drawing that imported to CADViewX have own coordinates system. You need to specify drawing coordinates (3D point) for the entity. MkFPoint method creates and returns a drawing 3D point. CADViewX.Center returns 2D screen point that doesn't applicable for placing an entity. You can calculate coordinates of the center of a drawing using CADViewX.CADImage.Extents member.

The circle can be created as Circle entity and the rectangle as Polyline with four vertexes:

Code: Select all

    CADViewLib.Polyline poly = new CADViewLib.Polyline();
    poly.Closed = true;

    CADViewLib.Vertex vr = new CADViewLib.Vertex();
    vr.Point = CADViewX1.MkFPoint(100, 100, 0);
    poly.AddEntity((CADViewLib.Entity)vr);

    vr = new CADViewLib.Vertex();
    vr.Point = CADViewX1.MkFPoint(300, 100, 0);
    poly.AddEntity((CADViewLib.Entity)vr);

    vr = new CADViewLib.Vertex();
    vr.Point = CADViewX1.MkFPoint(300, 200, 0);
    poly.AddEntity((CADViewLib.Entity)vr);

    vr = new CADViewLib.Vertex();
    vr.Point = CADViewX1.MkFPoint(100, 200, 0);
    poly.AddEntity((CADViewLib.Entity)vr);

    CADViewX1.CADImage.Converter.Loads((CADViewLib.Entity)poly);
    CADViewX1.CADImage.CurrentLayout.AddEntity((CADViewLib.Entity)poly);
    CADViewX1.CADImage.RefreshCurrentLayout();
Alexander.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

xavier
Posts: 27
Joined: 04 Dec 2012, 14:58

Re: add a rectangle programmatically

Post by xavier » 18 Dec 2012, 14:10

Thank you very much for this sample code. Without it, I would not have found it necessary to use the vertex to draw polylines.
If you could post an example of code to draw an ellipse, it would help me a lot.

Currently, I test if CADViewX is appropriate for the project that we do. It remains for me to solve among others:
- The problem of drawing a ellipse.
- Why after a left click on a entity, CadviewX.CADEditor.Selected.Count == 0
(cf topic "How to recognize on which entity is clicked?"
http://www.cadsofttools.com/forum/viewt ... 948#p10948)

cordialy

xavier

support
Posts: 2930
Joined: 30 Mar 2005, 11:36
Contact:

Re: add a rectangle programmatically

Post by support » 19 Dec 2012, 19:28

Hello.
An Ellipse can be created with the following code:

Code: Select all

    CADViewLib.Ellipse mEllipse = new CADViewLib.Ellipse();
    mEllipse.Point = CADViewX1.MkFPoint(100, 100, 0);
    mEllipse.Ratio = 0.3;
    mEllipse.RadPt.X = 0;
    mEllipse.RadPt.Y = 100;
    mEllipse.RadPt.Z = 0;
    CADViewX1.CADImage.Converter.Loads((CADViewLib.Entity)mEllipse);
    CADViewX1.CADImage.CurrentLayout.AddEntity((CADViewLib.Entity)mEllipse);
However the Ellipse.RadPt property that defines the relative end point of ellipse major axis have read-only modifier. Because of this created ellipse will be not correct. We will fix this problem.

Alexander.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

support
Posts: 2930
Joined: 30 Mar 2005, 11:36
Contact:

Re: add a rectangle programmatically

Post by support » 14 Jan 2013, 19:06

Hello Xavier.
We have built the library version that allows setting relative end point of ellipse major axis using EndPoint - equivalent property of RadPt. The following code can be used to create an ellipse from code:

Code: Select all

    CADViewLib.Ellipse mEllipse = new CADViewLib.Ellipse();
    mEllipse.Point = CADViewX1.MkFPoint(100, 100, 0);
    mEllipse.Ratio = 0.3;
    mEllipse.EndPoint = CADViewX1.MkFPoint(100, 0, 0);
    CADViewX1.CADImage.Converter.Loads((CADViewLib.Entity)mEllipse);
    CADViewX1.CADImage.CurrentLayout.AddEntity((CADViewLib.Entity)mEllipse);
The library is available for downloading:
http://www.cadsofttools.com/download/cadviewx.zip

Alexander.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

xavier
Posts: 27
Joined: 04 Dec 2012, 14:58

Re: add a rectangle programmatically

Post by xavier » 14 Jan 2013, 20:35

Thanks

Post Reply