Create Polyline
Moderators: SDS, support, admin
Create Polyline
ПодÑкажите пожалуйÑта, каким образом можно поÑтроить полилинию по
координатам в SgImage, пожалуйÑта приведите пример.
С Уважением ÐлекÑей.
off
координатам в SgImage, пожалуйÑта приведите пример.
С Уважением ÐлекÑей.
off
ЗдравÑтвуйте, ÐлекÑей!
<b>Russian</b>:
<b>TsgImage</b> - ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð¾Ð¼ графичеÑких объектов, в чаÑтноÑти объекта типа <b>TsgDXFImage</b>.
<b>TsgDXFImage</b> - клаÑÑ, оÑущеÑтвлÑющий загрузку файлов типа <b>DXF</b>, хранение <b>DXF</b> примитивов (в чаÑтноÑти <b>Polyline</b>), а также отриÑовку примитивов.
Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы нариÑовать <b>polyline</b>, требуетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ примитив <b>Polyline</b> в <b>TsgDXFImage</b>, причем координаты точек должны быть заданы в ÑиÑтеме координат чертежа.
<b>TsgImage</b> знает о текущем размере графичеÑкого объекта, поÑтому может вычиÑлить отноÑительную позицию мыши на Ñтом графичеÑком объекте (процедура <b>GetPointToImageSizeRatio</b>). ПоÑле Ñтого <b>TsgDXFImage</b> может вычиÑлить точки полилинии в ÑиÑтеме координат чертежа (Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ <b>GetCADCoords</b>). Далее Ñоздаем объект типа <b>TsgDXFPolyline</b>, точками у него ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ типа <b>TsgDXFVertex</b>. ПоÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº выбираетÑÑ <b>Layer</b> Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ полилайна, и затем Ð¿Ð¾Ð»Ð¸Ð»Ð¸Ð½Ð¸Ñ Ð²ÑтавлÑетÑÑ Ð² <b>TsgDXFConverter</b>.
Код поÑле английÑкой верÑии ответа показывает как Ñто можно Ñделать.
<b>English</b>:
<b>TsgImage</b> - is the container of graphic objects, such as <b>TsgDXFImage</b>.
<b>TsgDXFImage</b> - a class which is responsible for loading files of <b>DXF</b> type, storing <b>DXF</b> entities (such as <b>Polyline</b>), and also drawing the entities.
When you need to draw a polyline you have to add a <b>Polyline</b> entity into <b>TsgDXFImage</b>, and coordinates of points should be set in the coordinate system of the drawing.
<b>TsgImage</b> knows about the current size of graphic object, therefore it can calculate a relative position of the mouse on this graphic object (procedure <b>GetPointToImageSizeRatio</b>). After that <b>TsgDXFImage</b> can calculate points of a polyline in the drawing's coordinate system (function <b>GetCADCoords</b>). Further we create object such as <b>TsgDXFPolyline</b> whose points are <b>TsgDXFVertex</b> objects. After adding points a <b>Layer</b> has to be selected for the <b>Polyline</b>. Then a <b>Polyline</b> is inserted into <b>TsgDXFConverter</b>.
Use the following code:
Sergey.
please post questions to the forum or write to support@cadsofttools.com
<b>Russian</b>:
<b>TsgImage</b> - ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ‚ÐµÐ¹Ð½ÐµÑ€Ð¾Ð¼ графичеÑких объектов, в чаÑтноÑти объекта типа <b>TsgDXFImage</b>.
<b>TsgDXFImage</b> - клаÑÑ, оÑущеÑтвлÑющий загрузку файлов типа <b>DXF</b>, хранение <b>DXF</b> примитивов (в чаÑтноÑти <b>Polyline</b>), а также отриÑовку примитивов.
Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы нариÑовать <b>polyline</b>, требуетÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ примитив <b>Polyline</b> в <b>TsgDXFImage</b>, причем координаты точек должны быть заданы в ÑиÑтеме координат чертежа.
<b>TsgImage</b> знает о текущем размере графичеÑкого объекта, поÑтому может вычиÑлить отноÑительную позицию мыши на Ñтом графичеÑком объекте (процедура <b>GetPointToImageSizeRatio</b>). ПоÑле Ñтого <b>TsgDXFImage</b> может вычиÑлить точки полилинии в ÑиÑтеме координат чертежа (Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ <b>GetCADCoords</b>). Далее Ñоздаем объект типа <b>TsgDXFPolyline</b>, точками у него ÑвлÑÑŽÑ‚ÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ñ‹ типа <b>TsgDXFVertex</b>. ПоÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ñ‡ÐµÐº выбираетÑÑ <b>Layer</b> Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ полилайна, и затем Ð¿Ð¾Ð»Ð¸Ð»Ð¸Ð½Ð¸Ñ Ð²ÑтавлÑетÑÑ Ð² <b>TsgDXFConverter</b>.
Код поÑле английÑкой верÑии ответа показывает как Ñто можно Ñделать.
<b>English</b>:
<b>TsgImage</b> - is the container of graphic objects, such as <b>TsgDXFImage</b>.
<b>TsgDXFImage</b> - a class which is responsible for loading files of <b>DXF</b> type, storing <b>DXF</b> entities (such as <b>Polyline</b>), and also drawing the entities.
When you need to draw a polyline you have to add a <b>Polyline</b> entity into <b>TsgDXFImage</b>, and coordinates of points should be set in the coordinate system of the drawing.
<b>TsgImage</b> knows about the current size of graphic object, therefore it can calculate a relative position of the mouse on this graphic object (procedure <b>GetPointToImageSizeRatio</b>). After that <b>TsgDXFImage</b> can calculate points of a polyline in the drawing's coordinate system (function <b>GetCADCoords</b>). Further we create object such as <b>TsgDXFPolyline</b> whose points are <b>TsgDXFVertex</b> objects. After adding points a <b>Layer</b> has to be selected for the <b>Polyline</b>. Then a <b>Polyline</b> is inserted into <b>TsgDXFConverter</b>.
Use the following code:
Code: Select all
<b>procedure</b> TForm1.Forum306Click(Sender: TObject);
<b>var</b>
Img: TsgDXFImage;
Polyline: TsgDXFPolyline;
<b>procedure</b> AddToPolyline(X, Y: Integer);
<b>var</b>
Pt: TFPoint;
Vert: TsgDXFVertex;
XScaled, YScaled: Extended;
<b>begin</b>
Pt := MakeFPoint(X, Y, 0);
sgImage1.GetPointToImageSizeRatio(Pt, XScaled, YScaled);
Vert := TsgDXFVertex.Create;
Vert.Point := Img.GetCADCoords(XScaled, YScaled);
Polyline.AddEntity(Vert);
<b>end</b>;
<b>begin
if not</b> OpenDialog1.Execute <b>then</b> Exit;
sgImage1.LoadFromFile(OpenDialog1.FileName);
<b>if not</b>(sgImage1.Picture.Graphic <b>is</b> TsgDXFImage) <b>then</b> Exit;
Img := TsgDXFImage(sgImage1.Picture.Graphic);
Polyline := TsgDXFPolyline.Create;
AddToPolyline(10, 40);
AddToPolyline(300, 150);
AddToPolyline(220, 260);
AddToPolyline(15, 300);
AddToPolyline(100, 180);
Polyline.Layer := Img.Converter.Layers[0];
Img.Converter.OnCreate(Polyline);
Img.Converter.Loads(Polyline);
Img.Converter.Sections[csEntities].AddEntity(Polyline);
sgImage1.Invalidate;
<b>end</b>;
please post questions to the forum or write to support@cadsofttools.com