Deutsch
Forum

HPGL File in Profan laden und Grafik auf Fenster ausgeben

 
- Seite 1 -



Web
Scanner
Hallo Freunde,

mein CNC Programm läuft soweit schon ganz gut, nun möchte ich dran weitermachen

Also:
ich bin auf der Suche nach folgendem. Es gibt sogenannte HPGL Files, das sind Anweisungen
die z.B auf Plotter ausgegeben werden können und dann schöne Sachen zeichnen, oder eben plotten.
Ev. kennt das jemand schon? Diese Files haben ein ganz bestimmtes Format (ich glaube xxx.hgl).

Ich möchte nun:
1. Ein beliebiges HPGL-File in XProfan 10 laden
2. Die Zeichnung ( = den Plot skaliert) in einem Fenster entstehen lassen.

So theoretisch hab ich schon ne Idee, aber ev. kann ich mich an einem Beispiel von
Euch festhalten und daran weiterproggen?

Viele Grüße

Euer Web
 
Xprofan X3.1
Win7 auf AMDX6
27.06.2008  
 



 
- Seite 3 -



E.T.
Ein bekannter von mir hat auch eine Fräse selbst gebaut (X,Y UND Z-Steuerung). Da könnt ich ja auch mal nachfragen, wie er das alles gemacht hat. Wenn ich mich richtig erinnere, bearbeitet er alles mit Corel, die Steuerung ist dann ein DOS-Programm.

Mario
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
05.07.2008  
 



Ah, ich hatte im Paket auf einen Screentshot gehofft weshalb mir die Dateigröße Spanisch vorkam.
 
05.07.2008  
 




GDL
Hi Web

Es geht um Europlatinen (100*160 mm).
- Isolationsfräsen
- 0,6 mm Durchm. Bohren bei 1mm Kupferauge
- 0,8 mm Durchm. Bohren bei 1,5 mm Kupferauge
- 1,3 mm Durchm. Bohren bei 2 mm Kupferauge

Bei 2seitigen Platinen obige Schritte doppelt (Löcher müssen exakt die Lötaugen auf beiden Seiten treffen).

Derzeit stelle ich die Platinen so her
- UV Belichtung
- Entwickeln
- Ätzen
- Bohren mit einer Hochdrehzahl-Ständerbohrmaschine mit Spezialspannfutter.

Da dies sehr zeitraubend und Bohrer-Abbrech intensiv ist, wurde mal über Alternativen nachgedacht.

Servus
Georg

 
Windows7 Xprofan 8,9,10 [...]  [...] 
05.07.2008  
 




Web
Scanner
Hi Georg,

für Leiterplatten in kleinen Serien gibt es doch eigentlich preiswerte Anbieter,
oder bin ich da falsch informiert?

Die Fräserei von Leiterplatten lohnt sich (wahrscheinlich) für Serien eher nicht,
da das Isolationsfräsen doch recht lange dauert und ziemlich
Fräserverschleissend (bei FR4) ist. Dasselbe gilt auch für die Bohrer.
Bei Ebay gibts dann immer die aussortierten Fräser ud Bohrer, die noch für Holz und
Kunststoff scharf genug sind.

Für einzelne Muster kann es wieder passend sein, da man nicht den ganzen
Weg der Herstellung über das Ätzen gehen muß.

Das Bohren ist natürlich mit eine CNC ein Klacks, solange der Boher hält.
Besser wäre es (wenn möglich) sich auf einen mittleren Bohr Durchmesser festzulegen.
Die Umspannerei ist nicht gerade beliebt, und man muß nicht so viele verschiedene
Bohrergrößen vorhalten.

Grüße

Web
 
Xprofan X3.1
Win7 auf AMDX6
05.07.2008  
 




GDL
Hi,

habe es fast schon befürchtet.Platinendienst ist zu teuer.Brauchen ca. 300 Platinen mit untershiedlichem Layout.
Mit der Ätztechnik kann ich ja noch leben.Für das Bohren muss ich mir halt was überlegen.

Servus
Georg

Edit: Die Bohrergrößen sind Bauteile bedingt.
 
Windows7 Xprofan 8,9,10 [...]  [...] 
06.07.2008  
 




Web
Scanner
Hi Georg,

kennst Du die Tanbo von Elektor?

= Tangential - Bohr - Maschine

Das wäre ev. was zum Leiterplattenbohren ?
Ich weiß allerdings nicht was das Ding kostet. Ev. Selbstbau möglich?
Als das Gerät neu war, fand ich das Konzept sehr interessant.

[...] 

Grüße

Web
 
Xprofan X3.1
Win7 auf AMDX6
07.07.2008  
 




RGH
RGH

Web Scanner
@Roland, hast Du eventuell schon was in Deinem Archiv gefunden?
Web


Gib mir bitte noch etwas Zeit bis zum Wochenende!

Gruß
Roland


Hallo,
es tut mir leid, aber offensichtlich habe ich den erwähnten Quellcode nicht mehr.
Da das HPGL-Format aber ein reines ASCII-Format ist, sollte es in XProfan nicht allzu schwer sein, ein Programm zu schreiben, dass die Datei einliest und auf dem Bildschirm darstellt.
Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
07.07.2008  
 




Web
Scanner
Hallo Roland,

kein Problem,
vielen Dank fürs Suchen.

Ich warte mal noch ab, was IF vorhat dazu zu proggen,
Ansonsten lege ich erstmal los und werde weitere Fragen haben

Grüße

Web
 
Xprofan X3.1
Win7 auf AMDX6
07.07.2008  
 



@Georg: Schau mal [...]  vom Mitglied [...]  - vlt. ensteht da etwas?

@WebS: Einen Loadergrundstock kann ich dafür gerne heute Abend (zuhause) aufbereiten und hier posten.
 
10.07.2008  
 



Funktioniert

Orignalsource im Paket, hier die enh:
KompilierenMarkierenSeparieren
SET(errorLevel,-1)

proc LASTSUBSTR

    PARAMETERS S$,D$
    RETURN (SUBSTR$(S$,LEN(S$,D$),D$))

endproc

proc NOTLASTSUBSTR

    PARAMETERS S$,D$
    RETURN DEL$(S$,LEN(S$,D$),1,D$)

endproc

proc NOTFIRSTSUBSTR

    PARAMETERS S$,D$
    RETURN DEL$(S$,1,1,D$)

endproc

proc SETSUBSTR

    PARAMETERS S$,N&,D$,NS$
    RETURN INS$(NS$,DEL$(S$,N&,1,D$),N&,D$)

endproc

proc FTOA

    PARAMETERS F!
    RETURN +SUBSTR$(STR$(F!),1,.)

endproc

proc STRI

    PARAMETERS F!
    RETURN SUBSTR$(STR$(F!),1,.)

endproc

proc TSND

    PARAMETERS V&
    var S$=STRI(V&)
    var L&=LEN(S$)
    var T&=(L&-1)3

    WHILELOOP T&

        S$=INS$(.,S$,L&-&LOOP*3+1)

    ENDWHILE

    RETURN S$

endproc

proc STOALLOWEDCHARS

    PARAMETERS S$,ALWDCHRS$
    var C&=LEN(S$)
    var I&=0

    IFNOT C&

        RETURN

    ENDIF

    WHILE 1

        INC I&

        IFNOT INSTR(SUBSTR$(S$,I&),ALWDCHRS$)

            S$=DEL$(S$,I&,1)
            DEC I&
            DEC C&

        ENDIF

        IF I&=C&

            BREAK

        ENDIF

    ENDWHILE

    RETURN S$

endproc

proc WHILE_REPLACE

    PARAMETERS S$,FROM$,_TO$

    WHILE INSTR(FROM$,S$)

        S$=TRANSLATE$(S$,FROM$,_TO$)

    ENDWHILE

    RETURN S$

endproc

proc SARRTOSTRING

    PARAMETERS ARR$[],E$
    var C&=SIZEOF(ARR$[])-1

    IF C&<0

        RETURN

    ENDIF

    var S$=

    WHILELOOP 0,C&

        S$=S$+ARR$[&LOOP]+E$

    ENDWHILE

    RETURN S$

endproc

proc FGETFILEEXT

    PARAMETERS FLE$

    IFNOT INSTR(.,FLE$)

        RETURN

    ENDIF

    RETURN LASTSUBSTR(FLE$,.)

endproc

proc FGETFNAMEFROM

    PARAMETERS S$
    RETURN LASTSUBSTR(S$,\)

endproc

proc FGETPATHFROM

    PARAMETERS S$
    RETURN NOTLASTSUBSTR(S$,\)+\

endproc

proc FGC

    PARAMETERS FLE$

    IF %PCOUNT<1

        RETURN

    ENDIF

    var B&=FILESIZE(FLE$)

    IF B&<1

        RETURN

    ENDIF

    DECLARE MEM#
    DIM MEM#,B&
    var R&=BLOCKREAD(FLE$,MEM#,0,B&)
    var S$=CHAR$(MEM#,0,R&)
    DISPOSE MEM#
    RETURN S$

endproc

proc FPC

    PARAMETERS FLE$,S$

    IF %PCOUNT<1

        RETURN

    ENDIF

    IF %PCOUNT<2

        S$=

    ENDIF

    var L&=LEN(S$)

    IF L&=0

        var FH&=ASSIGN(FLE$)
        REWRITE FH&
        CLOSE FH&
        ASSIGN FH&,
        RETURN

    ENDIF

    DECLARE MEM#
    DIM MEM#,L&+1
    STRING MEM#,0=S$
    BLOCKWRITE FLE$,MEM#,0,L&
    DISPOSE MEM#

endproc

proc FMKDIR

    PARAMETERS DNAME$

    IF %PCOUNT<1

        RETURN

    ENDIF

    IF DIREXISTS(DNAME$)

        RETURN 2

    ENDIF

    MKDIR DNAME$
    RETURN DIREXISTS(DNAME$)

endproc

proc FDELETE

    :!>Löscht die Datei fname$ und liefert als Rückgabewert den Erfolg der Operation.
    PARAMETERS FNAME$

    IF %PCOUNT<1

        RETURN

    ENDIF

    IFNOT FILEEXISTS(FNAME$)

        RETURN 2

    ENDIF

    var FH%=ASSIGN(FNAME$)

    IFNOT FH%

        RETURN 0

    ENDIF

    ERASE #FH%
    ASSIGN #FH%,
    RETURN 1-FILEEXISTS(FNAME$)

endproc

proc FTRYDELETE

    PARAMETERS FLE$,MSTIMEOUT&

    IF %PCOUNT<1

        RETURN

    ENDIF

    IF %PCOUNT<2

        MSTIMEOUT&=8000

    ENDIF

    IFNOT FILEEXISTS(FLE$)

        RETURN 1

    ENDIF

    IF FDELETE(FLE$)

        RETURN 1

    ENDIF

    MSTIMEOUT&=MSTIMEOUT&+&GETTICKCOUNT

    WHILE 1

        SLEEP 100

        IF FDELETE(FLE$)

            BREAK

        ENDIF

        IF &GETTICKCOUNT>MSTIMEOUT&

            BREAK

        ENDIF

    ENDWHILE

    RETURN 1-FILEEXISTS(FLE$)

endproc

proc FCHDIR

    PARAMETERS DNAME$
    var OP$=LOWER$(GETDIR$(@))

    IF DIREXISTS(DNAME$)

        CHDIR DNAME$

    ENDIF

    RETURN IF(LOWER$(GETDIR$(@))=DNAME$,1,0)

endproc

WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
CLS
USERMESSAGES $0010,$0014
var HPIC&=CREATE(hHPGLPic,FGC(1.plt),400,400,$FFAA99)

IFNOT HPIC&

    MESSAGEBOX(Bild konnte nicht erzeugt werden.,,4096)

ENDIF

DRAWPIC HPIC&,10,10;0

WHILE 1

    WAITINPUT

    SELECT %UMESSAGE

        CASEOF $0010

        BREAK

    ENDSELECT

ENDWHILE

end

subproc CREATE.HHPGLPIC

    PARAMETERS __HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&
    RETURN HPGL.CREATEHPIC(__HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&)

endproc

proc HPGL.CREATEHPIC

    PARAMETERS __HPGLDATA$,PICWIDTH&,PICHEIGHT&,BGCOLOR&
    DECLARE CMDS$[]
    CMDS$[]=EXPLODE(TRIM$(WHILE_REPLACE(TRANSLATE$(TRANSLATE$(__HPGLDATA$,;,x0A),x0D,x0A),x0A+x0A,x0A)),x0A)
    var C&=SIZEOF(CMDS$[])

    IFNOT C&

        RETURN 0

    ENDIF

    IF (C&=1) AND (CMDS$[0]=)

        RETURN 0

    ENDIF

    var PEN.ISDOWN%=0
    var PEN.CURRENT%=0
    var PEN.LINETYP%=0
    var PEN.X!=0
    var PEN.Y!=0
    DECLARE CMDLINE$[]
    var I&=0
    DECLARE PAINTLIST$[]
    var S$=

    WHILELOOP 0,C&-1

        S$=INS$(,,TRANSLATE$(TRIM$(WHILE_REPLACE(CMDS$[&LOOP],  , )), ,,),3)

        IF LEN(S$)=3

            S$=DEL$(S$,3,1)

        ENDIF

        CMDLINE$[]=EXPLODE(S$,,)

        SELECT UPPER$(CMDLINE$[0])

            CASEOF IN

            CASEOF WU

            CASEOF VS

            CASEOF PW

            CASEOF SP

            PEN.CURRENT%=VAL(CMDLINE$[1])

            CASEOF LT

            IF SIZEOF(CMDLINE$[])>1

                PEN.LINETYP%=CMDLINE$[1]

                SELECT CMDLINE$[1]

                    CASEOF 1,2,3,4,5,6

                    USEPEN 0,0,1
                    OTHERWISE
                    USEPEN 0,0,1

                ENDSELECT

            ENDIF

            CASEOF PA

            IF SIZEOF(CMDLINE$[])>1

                WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1

                    HPGL.CREATEHPIC.PEN.MOVETO(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))

                ENDWHILE

            ENDIF

            CASEOF PU

            PEN.ISDOWN%=0

            IF SIZEOF(CMDLINE$[])>1

                WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1

                    HPGL.CREATEHPIC.PEN.MOVE(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))

                ENDWHILE

            ENDIF

            CASEOF PD

            PEN.ISDOWN%=1

            IF SIZEOF(CMDLINE$[])>1

                WHILELOOP 0,(SIZEOF(CMDLINE$[])-1)*0.5-1

                    HPGL.CREATEHPIC.PEN.MOVE(VAL(CMDLINE$[&LOOP*2+1]),VAL(CMDLINE$[&LOOP*2+2]))

                ENDWHILE

            ENDIF

        ENDSELECT

    ENDWHILE

    C&=SIZEOF(PAINTLIST$[])

    IFNOT C&

        RETURN 0

    ENDIF

    DECLARE PAINTDATA$[]
    var VMINX!=0
    var VMINY!=0
    var VMAXX!=0
    var VMAXY!=0
    var FX!=0
    var FY!=0
    var FXX!=0
    var FYY!=0
    var VSET%=0

    WHILELOOP 0,C&-1

        PAINTDATA$[]=EXPLODE(PAINTLIST$[&LOOP],x0A)

        SELECT PAINTDATA$[0]

            CASEOF line

            FX!=VAL(PAINTDATA$[1])
            FY!=VAL(PAINTDATA$[2])
            FXX!=VAL(PAINTDATA$[3])
            FYY!=VAL(PAINTDATA$[4])
            HPGL.CREATEHPIC.PAINTDATA.SETMINMAX(FX!,FY!)
            HPGL.CREATEHPIC.PAINTDATA.SETMINMAX(FXX!,FYY!)

            CASEOF arc

        ENDSELECT

    ENDWHILE

    var XD!=VMAXX!-VMINX!
    var YD!=VMAXY!-VMINY!

    IF VMAXX!=0

        RETURN 0

    ENDIF

    IF VMAXY!=0

        RETURN 0

    ENDIF

    var SX!=(PICWIDTH&-10)/XD!
    var SY!=(PICHEIGHT&-10)/YD!
    var VSX!=VMINX!*SX!
    var VSY!=VMINY!*SY!
    var HPIC&=CREATE(hNewPic,PICWIDTH&,PICHEIGHT&,BGCOLOR&)

    IFNOT HPIC&

        RETURN 0

    ENDIF

    STARTPAINT HPIC&

    WHILELOOP 0,C&-1

        PAINTDATA$[]=EXPLODE(PAINTLIST$[&LOOP],x0A)

        SELECT PAINTDATA$[0]

            CASEOF line

            FX!=VAL(PAINTDATA$[1])*SX!-VSX!+5
            FY!=VAL(PAINTDATA$[2])*SY!-VSY!+5
            FXX!=VAL(PAINTDATA$[3])*SX!-VSX!+5
            FYY!=VAL(PAINTDATA$[4])*SY!-VSY!+5
            USEPEN 0,0,0
            LINE FX!,FY! - FXX!,FYY!

            CASEOF arc

        ENDSELECT

    ENDWHILE

    ENDPAINT
    RETURN HPIC&

    proc HPGL.CREATEHPIC.PAINTDATA.SETMINMAX

        PARAMETERS X!,Y!

        IFNOT VSET%

            VSET%=1
            VMINX!=X!
            VMAXX!=X!
            VMINY!=Y!
            VMAXY!=Y!
            RETURN

        ENDIF

        IF VMINX!>X!

            VMINX!=X!

        ENDIF

        IF VMAXX!<X!

            VMAXX!=X!

        ENDIF

        IF VMINY!>Y!

            VMINY!=Y!

        ENDIF

        IF VMAXY!<Y!

            VMAXY!=Y!

        ENDIF

    endproc

    proc HPGL.CREATEHPIC.PEN.MOVE

        PARAMETERS X!,Y!

        IF PEN.ISDOWN%

            HPGL.CREATEHPIC.PAINTLIST.ADD(line+x0A+STR$(PEN.X!)+x0A+STR$(PEN.Y!)+x0A+STR$(PEN.X!+X!)+x0A+STR$(PEN.Y!+Y!))

        ENDIF

        PEN.X!=PEN.X!+X!
        PEN.Y!=PEN.Y!+Y!

    endproc

    proc HPGL.CREATEHPIC.PEN.MOVETO

        PARAMETERS X!,Y!

        IF PEN.ISDOWN%

            HPGL.CREATEHPIC.PAINTLIST.ADD(line+x0A+STR$(PEN.X!)+x0A+STR$(PEN.Y!)+x0A+STR$(X!)+x0A+STR$(Y!))

        ENDIF

        PEN.X!=X!
        PEN.Y!=Y!

    endproc

    proc HPGL.CREATEHPIC.PAINTLIST.ADD

        PARAMETERS TODO$
        TODO$=TODO$+x0A+STR$(PEN.CURRENT%)+x0A+STR$(PEN.LINETYP%)
        PAINTLIST$[SIZEOF(PAINTLIST$[])]=TODO$

    endproc

endproc

end

468 kB
Hochgeladen:10.07.2008
Ladeanzahl98
Herunterladen
 
10.07.2008  
 




Dieter
Zornow
Was geht an deinem Programm, 1.plt ist ein perfekter Kreis, den ich bei deinem Prog nicht erkennen kann.
Vielleicht nach 20 Schnaps

Anbei Screenshoot von der Orginaldatei 1.plt

3 kB
Hochgeladen:11.07.2008
Ladeanzahl131
Herunterladen
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
11.07.2008  
 




Web
Scanner
@IF
das Programm hat viel Arbeit gemacht...ich weiß es genau
-..nur bei mir erscheint ein Kringel und kein Kreis- beim Programmstart

Weil ich es wieder mal nicht erwarten konnte, habe ich mir inzwischen eine eigene Inputroutine geschrieben. Meine Version ist sicher nicht ganz so profi, wie die deine gemacht, aber funktioniert ganz gut.

Es geht auch für mehrere Elemente - also 100 Kreise oder Quadrate usw .usf.
Ich denke auch, es ist bei so einer komplexen Thematik nicht so einfach, ganze Programmteile dazuzunehmen, deren Funktion man nicht 100% blickt.

Das Nächste wird sein, das man:

1. das angezeigte Bild verschieben kann
2. in das Bild zoomen kann
3. die verschiedene Vektoren anclicken kann und an den Endpunkten in verschiedene Richtungen ziehen kann und das ganze wiederum speichern kann....

Es gibt noch viel zu tun

Grüße

Web
 
Xprofan X3.1
Win7 auf AMDX6
11.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.865 Betrachtungen

Unbenanntvor 0 min.
Manfred Barei09.01.2021
Normann Strübli31.03.2020
Michael W.09.01.2017
iF30.12.2015
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie