Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PaintBoxRaster (https://www.delphipraxis.net/178358-paintboxraster.html)

Bjoerk 3. Jan 2014 15:38

PaintBoxRaster
 
Wenn ich eine Bildschirmauflösung von 96 dpi hab und einen Zoom von 96/25.4 * 100% hab ich dann eine Genauigkeit von 1 mm oder 0,1 mm, ich raff grad nix mehr? :oops: :gruebel:

Bjoerk 3. Jan 2014 18:41

AW: PaintBoxRaster
 
So, jetzt hab ich mal paar Stunden geschlafen (hätt ich heut nacht wohl auch besser tun sollen).

96 ppi entsprechen 3,77952755905512 Pixel je mm. Wenn man eine Genauigkeit von 0,1 mm haben möchte braucht man quasi 10 Pixel je mm, also bei einem 96 ppi Monitor einen Zoom von 10/3,77952755905512 * 100 % = 264,583333333333 % (oder halt einen Monitor mit 254 ppi).

Schönes WE.

Jens01 3. Jan 2014 19:19

AW: PaintBoxRaster
 
Was willst Du damit denn machen?

Popov 3. Jan 2014 19:37

AW: PaintBoxRaster
 
ppi? Preußen pro Indianer?

Ein Zoll (Inch) entspricht 25,4mm und 254 dpi (oder ppi) entsprechen 10 Punkte pro 1mm.

Nehmen wir mal an der Monitor ist 96 ppi, was vermutlich nur annähernd stimmt, aber gehen wir davon aus, dann dann sind

254/25,4 = 10 Punkte pro mm
096/25,4 = 3,78 Punkte pro mm (oder 1 Punkt ist 0,265mm)

Bjoerk 3. Jan 2014 21:04

AW: PaintBoxRaster
 
Zitat:

Zitat von Jens01 (Beitrag 1241986)
Was willst Du damit denn machen?

Hi Kollege, ich versuche mich gerade an einem Positionsplan (Statik).

Jens01 3. Jan 2014 21:38

AW: PaintBoxRaster
 
Na, ich weiss nicht genau, ob das Dein Problem ist, aber ich tippe mal ins Blaue:

Du willst die Darstellung so einstellen, dass der Anwender die Maße mit einem Maßstab vom Monitor abgreifen kann. Ich habe sowas mal bei einem Cad-Programm gesehen. Da mußte der Anwender ein Quadrat auf dem Monitor so einmessen, dass es 10x10cm groß war. Mit dieser Einstellung hatte die Software dann die Korrekturwerte für die maßstabsgerechte Monitorausgabe. Vielleicht bring es Dich weiter.
Gruss Jens

Bjoerk 3. Jan 2014 22:48

AW: PaintBoxRaster
 
Ne ne ne, das meinte ich nicht. Du kennst ja Positionspläne? Da wird entweder der Architektenplan eingescannt und drüber gemalt oder falls es ein "ordentlicher" Ingenieur ist, dann erstellt er einen eigenen neuen Plan.

Das ist aber auch nix weltbewegendes. Ist quasi ein Paint mit Maßstab. Der User malt halt keine Line von 10/10 nach 100/20 Pixel sondern von 5/5 mm eine Line von 3,65 m z.B. im Maßstab 1:100 im Winkel 45 Grad, genauso wie früher am Zeichenbrett. :-D

Ich hab meinen Usern versprochen: keine Einarbeitungszeit und genauso wie früher. Andernfalls hat mein Programm auf dem Markt auch keine Chance. Was es da alles gibt? Wahnsinn. Da kommst du mit 5 Leuten in 5 Jahren nicht hin. Nur bedienen kannst du die Dinger ohne Seminar nicht und die kosten auch teilweise so schlappe 1000 € pro Tag.

Das Prog ist soweit auch schon fast fertig. Mir geht es jetzt darum, meine Grafikobjekte aufs Canvas zu bringen und um das Punktefangen. Hierzu brauch ich sozusagen ein Tetrisspielfeld im DIN A0 Format mit einem Raster von 0,1 mm.

Die eigentliche Frage istt. Was mach ich, wenn das Cliprect des Canvas so eingstellt ist, daß die Genauigkeit von 0,1 mm gar nicht gezeichnet werden kann? Wie könnte man denn sowas machen? Die anderen können das ja auch? Ich hab aber keinen Plan wie?

Jens01 3. Jan 2014 23:15

AW: PaintBoxRaster
 
Ich kenne den Positionsplan von MB (Video:wink:).
Einige günstige gibt es aber auch ..Harzer. Die Konkurrenz ist hart, aber die Anzahl ist mE überschaubar.
Auf Deiner Seite kann man nicht so viele Beschreibungen der Programme finden. Schade:-D

So ganz habe ich Deine Problem aber nicht verstanden. Willst Du ein Raster auf den Bildschirm bringen, wo Raster angezeigt werden 5mm/5mm so wie die Leisten bei vielen Grafikprogrammen? Oder soll das Raster reale/ gemessene 5/5mm auf den Monitor anzeigen? Das erste ist doch nur relatives Umrechnen von einer Länge zu Pixelanzahl mit etwas Runden. Oder wie?

Zitat:

Die eigentliche Frage istt. Was mach ich, wenn das Cliprect des Canvas so eingstellt ist, daß die Genauigkeit von 0,1 mm gar nicht gezeichnet werden kann? Wie könnte man denn sowas machen? Die anderen können das ja auch? Ich hab aber keinen Plan wie?
Das mußt Du mir genauer erklären.

Guck Dir das Beispiel ObjectsSample aus dem Zip mal an. Bringt Dir das was?

Sir Rufo 3. Jan 2014 23:19

AW: PaintBoxRaster
 
Löse dich von der Canvas Darstellung und berechne alles in der echten Auflösung.

Auf dem Canvas wird einfach nur skaliert dargestellt.

So machen es die "Anderen" auch

Bjoerk 4. Jan 2014 00:33

AW: PaintBoxRaster
 
Treffer. MB ist mein härtester Konkurrent. Mein Vorbild ist aber DigCad 5.0 (find ich ziemlich genial, ist übrigens in Delphi geschrieben, vermute aber mal, daß die VDraw o. ä. drunter laufen haben, weiß es aber nicht).

Hallo Sir Rufo, ich hab intern alle Objekte in mm FloatPoint und berechne auch brav alles bezüglich dieser Koordinaten z.B. auch die Schnittpunkte. Mein Problem ist aber, daß z.B. die MouseDown-Koordinate viel zu ungenau ist?
Delphi-Quellcode:
procedure TCeCadForm.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    if (FCECad.CadDrawing in [cadLine..cadGraphic]) and (FCECad.CadMouseStatus = cmsWaitForMouseDown) then
    begin
      FCECad.CadMouseStatus := cmsWaitForMouseMove;
      FCECad.Drawing := true;
    end;
    FCECad.MMP1 := PointToMMFloatPoint(Point(X, Y));
  end;
end;

Sir Rufo 4. Jan 2014 01:26

AW: PaintBoxRaster
 
Ja, das ist halt erstmal so ...

Nimm mal einen Globus und versuche dort mit dem Finger ganz genau die Straße zu treffen, in der du wohnst.

Du hast aber die Möglichkeit Raster, Mittellinien, Schnittpunkte, etc. anzuwenden, wobei du die aktuelle Position (Pixel) wieder umrechnest und dann den am nächsten liegenden Fangpunkt heraussuchst.

Bjoerk 4. Jan 2014 12:01

AW: PaintBoxRaster
 
So, jetzt, ja, eine Insel. :)

Stimmt. Anders ist das ja gar nicht zu machen.

Ich hab jetzt auch nochmal den Weg eines Fangpunktes von der Berechnung zur Gui und wieder zurück verfolgt (Wahnsinn, kenn mich in meinem eigenen Code fast schon wieder nicht aus). Hab aber gesehen, daß ich da noch n Bock drin hab, weil die Gui daraus temporär (zur Anzeige) einen TPoint macht und den wieder (in mm umgerechnet) zurück an die Komponente liefert und genau das geht natürlich nicht. Das zerstört die Genauigkeit.

Ich werd jetzt zur Kommunikation von Gui und Komponente einen neuen Typ einführen. Falls OwnerDraw ist der Punkt durch die Komponente berechnet worden (z.B. Fangpunkt), falls nicht dann kommt der Punkt vom User z.B. via MouseDown /MouseMove.
Delphi-Quellcode:
  TCadFloatPoint = record
    X1, Y1: integer; // CanvasPoint, OwnerDraw FALSE expected;
    MMX1, MMY1: double; // MMComponentFloatPoint, OwnerDraw TRUE expected;
    OwnerDraw: boolean;
    procedure CanvasPointToComponentMMFloatPoint; // X1,Y1 TO MMX1,MMY1;
    procedure MMComponentFloatPointToCanvasPoint;// OwnerDraw: MMX1,MMY1 TO X1,Y1;
    procedure Clear;
  end;

Jens01 4. Jan 2014 12:29

AW: PaintBoxRaster
 
Aah, das Fangen war Dein Problem.

Zitat:

MB ist mein härtester Konkurrent.
Meiner nicht!:-D
Zitat:

Mein Vorbild ist aber DigCad 5.0 (find ich ziemlich genial, ist übrigens in Delphi geschrieben, vermute aber mal, daß die VDraw o. ä. drunter laufen haben, weiß es aber nicht).
Das Cad sieht auf den ersten Blick auch gut aus. Sind das TMS-Menue-Komponenten, scheinbar. VDraw glaube ich aber nicht. Du mußt Dir die Lizenz genau angucken, die sind wahnsinnig teuer. Vielleicht Graphics32 oder etwas eigenes, da die laut Beschreibung auch schon lange dran programmieren.

Bjoerk 4. Jan 2014 13:09

AW: PaintBoxRaster
 
Kann sein, sieht mir aber eher wie Ribboncontrols aus. Find ich auch genial, hab ich aber leider nicht. Na ja, wenigsten hab ich den stufenlosen Zoom um einen Punkt drin (wie CorelDraw).

Bjoerk 4. Jan 2014 14:00

AW: PaintBoxRaster
 
Ah, vielleicht noch was. Das erste, was versierte User fragen werden, "wie kann ich denn in ihr Programm eine dxf Datei einlesen"? Zumindest muß ich dann eine bezahlbare Alternative DxfToEmf o.ä. sagen können. Wisst ihr da was? :angel2:

Jens01 4. Jan 2014 14:12

AW: PaintBoxRaster
 
http://www.delphipraxis.net/160200-d...arstellen.html

Bjoerk 4. Jan 2014 14:33

AW: PaintBoxRaster
 
Hallo Jens, diesen Thread hatte ich ja schon durchgelesen. Eine wirkliche Lösung für TE konnte da ja auch nicht gefunden werden oder was meinst du?

Jens01 4. Jan 2014 14:43

AW: PaintBoxRaster
 
Naja, ich benötige nicht unbedingt ein DXF-Import für mein Projekt, habe mich damit aber kurz beschäftigt. Es gibt von John Biddiscombe ein OpenSource-Projekt das ist aber schon von 1997 und soll nicht mehr ganz kompatibel sein. Ansonsten habe ich nur Komponenten für Geld gesehen. Das sieht in Delphi ganz dürftig aus.

Jens01 4. Jan 2014 15:18

AW: PaintBoxRaster
 
Hier ist noch eins von 2000

Bjoerk 4. Jan 2014 15:33

AW: PaintBoxRaster
 
Cool. Schau ich mir an. Danke Kumpel. BTW, wenn das Prog ganz fertig ist würdest du’s dann mal testen und mir sagen wie du’s findest ("kacke, ganz nett, geil" ect..)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz