FastFiber

Bepalen waar op te slaan

Gestart door thomas151283, ma 18 04 2005, 14:04:39

Vorige topic - Volgende topic

thomas151283

Ik heb een vraag / probleem;

Ik ben bezig met het commado -eattext om bepaalde attributes te exporteren naar Excel in de vorm van een *.CSV bestand.
Een van de bijhorende vragen is: enter output file path.
Hier zou ik graag ingeven in welke map het MOET komen, zodat alles een beetje geordend blijft.

Een bijkomend probleem is dat de bestandsnaam een variabele is, deze moet er dus ook ergens bijkomen.


(defun c:exportatt ()
 (setq teknaam (getvar "dwgname"))
 (command "-eattext"
      "C"
      "Y"
      "Y"
      ""
      "CSV"
      (strcat teknaam ".CSV")
      "Y"
 )
)



MVG,
Thomas

Kenny H

Citeer(defun c:exportatt ()
 (setq   teknaam
   (getvar "dwgname"))
 (command "-eattext"
      "C"
      "Y"
      "Y"
      ""
      "CSV"
;;;      (("C:\DWG\ACADTDBO\VLISP\CSV") ("teknaam" ".CSV"))
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\"teknaam)
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\")
;;;       ("C:\\DWG\\hout3\\VLISP\\CSV\\")
      (strcat teknaam ".CSV")
           ;;; Ge kunt die extentie veranderen als hij u vraag
;;;      Do you want to write to: c:........
;;;      dan zet ge N
;;;      dan typt ge de extentie in zoals bv hieronder maar de naam kunt ge niet wijzigen!!!
;;;      de teknaam die hier staat is de bestandsnaam. Ik heb al gezocht in de help funtie maar niets gevonden om dit variabel te kunnen zetten
;;;      Eattext staat trouwens ook niet verder uitgelegd in de help van vlisp in dat van cad wel.
       "N"
      "C:/...../VLISP/CSV/teknaam"
;;;      "C:\......\VLISP\\CSV\\teknaam"
 )
)

Misschien weet iemand anders dit op te lossen . Maar als ik die filepath ingeef is het laatste automatisch de bestandnaam.

"C:/...../VLISP/CSV/" als ge dit zet is de bestandsnaam niets. Vb  .csv
8) Volvo 4 Life 8)

HofCAD

Citaat van: Kenny H
Citeer(defun c:exportatt ()
 (setq   teknaam
   (getvar "dwgname"))
 (command "-eattext"
      "C"
      "Y"
      "Y"
      ""
      "CSV"
;;;      (("C:\DWG\ACADTDBO\VLISP\CSV") ("teknaam" ".CSV"))
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\"teknaam)
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\")
;;;       ("C:\\DWG\\hout3\\VLISP\\CSV\\")
      (strcat teknaam ".CSV")
           ;;; Ge kunt die extentie veranderen als hij u vraag
;;;      Do you want to write to: c:........
;;;      dan zet ge N
;;;      dan typt ge de extentie in zoals bv hieronder maar de naam kunt ge niet wijzigen!!!
;;;      de teknaam die hier staat is de bestandsnaam. Ik heb al gezocht in de help funtie maar niets gevonden om dit variabel te kunnen zetten
;;;      Eattext staat trouwens ook niet verder uitgelegd in de help van vlisp in dat van cad wel.
       "N"
      "C:/...../VLISP/CSV/teknaam"
;;;      "C:\......\VLISP\\CSV\\teknaam"
 )
)

Misschien weet iemand anders dit op te lossen . Maar als ik die filepath ingeef is het laatste automatisch de bestandnaam.

"C:/...../VLISP/CSV/" als ge dit zet is de bestandsnaam niets. Vb  .csv

Beste Kenny,

Nu ga ik iets heel doms doen, want op dit moment heb ik geen AutoCAD
tot mijn beschikking om wat ik opper te controleren.
Moet (setq teknaam (getvar "dwgname"))
niet vervangen worden door:
(setq teknaam (getvar "dwgname") teklen (strlen teknaam))
(setq teknaam (substr teknaam 1 (- teklen 4)))

Als het standaardzoekpad het templatefilesearchpad is daar geen
AutoCADvariabele voor, maar misschien wel een environment variable
die men bijv. als volgt zou kunnen lezen:(getenv "TemplatePath") en misschien als volgt zou kunnen
veranderen:(setenv "TemplatePath" "c:\\mytek").
Morgen kan ik weer iets echt proberen.

Groetjes HofCAD CSI
ACADcadabra

Kenny H

Hij plaatst die .csv in de zelfde map als waar ik mijn .dwg opsla.


Die (setenv "TemplatePath" "C:/........./CSV/") heeft daar geen invloed op. Hij selecteerd automatisch de map waar die .dwg staat.
De wblock dus.

Dat voor die bestandsnaam blijft gelijk. Thomas zijn manier of die van u.

Toch al bedankt voor de moeite :wink:

Kenny
8) Volvo 4 Life 8)

HofCAD

Citaat van: thomas151283Ik heb een vraag / probleem;

Ik ben bezig met het commado -eattext om bepaalde attributes te exporteren naar Excel in de vorm van een *.CSV bestand.
Een van de bijhorende vragen is: enter output file path.
Hier zou ik graag ingeven in welke map het MOET komen, zodat alles een beetje geordend blijft.

Beste Thomas,

Een aantal wilde ideeen, je wilt de waarde van de attributen in een
excelbestand krijgen, hoe je dit ook anders kan bereiken.
1)Zoals in je vraag over APPINT gestelt, kan dat met Visual lisp en met
Visual basic.
2)Je kunt dit echter ook doen met ipv het commando -EATTEXT met het
commando ATTEXT.
3)In de Sample directory van AutoCAD zit de map AxtiveX en daarin zit de map ExtAttr met het bestand ExtAttr.
Indien je dit bestand met Excel opent, zie via Extra->macro->macro's
dat er een Macro Extract in zit.
Als je deze macro laat lopen, zullen ook je attribuutwaarden in het
excelbestand komen te staan.

Groetjes HofCAD CSI

PS Voor mij geldt: 'To be or not to be crazy'.
ACADcadabra

HofCAD

Citaat van: thomas151283Ik heb een vraag / probleem;

Ik ben bezig met het commado -eattext om bepaalde attributes te exporteren naar Excel in de vorm van een *.CSV bestand.
Een van de bijhorende vragen is: enter output file path.
Thomas

Beste Tomas,

Waarschijnlijk heb je geen vertrouwen in mij, omdat ik blond ben. :oops:
Dat is natuurlijk de normaalste zaak van de wereld, en ik heb er begrip
voor. :D
Nogmaals als je het echt goed wil doen, moet je Visual Lisp of Visual
Basic gebruiken. 8)
Zoals in mijn vorig bericht gestelt, zijn er ook tussenoplossingen.
Dus wil je AUB het programma attpl5 een paar maal uitproberen,
en daarna in dezelfde tekening attExport draaien.
Wel eerst natuurlijk controleren dat op schijf C de map C:\temp bestaat
en dat excel in de map c:\progra~1\micros~1\office zit.
Zoniet verander dan in het programma attExport
wat er respectievelijk achter DirOutput en DirExcel staat.

Groetjes HofCAD CSI

(defun c:attExport()
(defun wfil(file flist / i f1)
(setq f1 (open file "w") i 0)
(repeat (length flist)
(write-line (nth i flist) f1)
(setq i (1+ i)))
(close f1)
)
(setq ~fdia (getvar "FILEDIA"))
(setvar "FILEDIA" 0)
(setq DirOutput "c:\\Temp\\")
(setq DirExcel "c:/progra~1/micros~1/office/")
(setq TemplFile (strcat DirOutput "TEMPLL.TXT"))
(setq AttFile (strcat DirOutput "ATTFILE.TXT"))
(setq TemplLST '("PARTMAT C008000" "PARTREF C008000" "PARTL N008000" "PARTW N008000"))
(wfil TemplFile TemplLST)
(command "ATTEXT" "C" TemplFile AttFile)    
(setvar "FILEDIA" 1)
(Startapp (strcat DirExcel "Excel.exe") AttFile)
)

(defun c:attpl5 (/ ~cmd ~afl ~atr NOToke e1 e2 e3 e4 s1 s2 s3 s4 sh)
(setq ~cmd (getvar "CMDECHO") ~afl (getvar "AFLAGS") ~atr (getvar "ATTREQ"))
(setvar "CMDECHO" 0)(setvar "ATTMODE" 1)(setvar "ATTREQ" 1)
;;; style maakt een nieuwe tekststijl aan: genaamd "attributes"
(command "style" "attributes" "tahoma" "15" "" "" "" "")
;;; layer maakt een nieuw laag aan: genaamd "attributes"
(command "layer" "m" "attributes" "c" "8" "" "")
;;; Selecteren van hoekpunten
(setq lop (getpoint "\nLinker benedenhoekpunt aub.: "))
(setq rbp (getcorner lop "\nRechter bovenhoekpunt aub.: "))
(setq rop (list (car rbp) (cadr lop)))
(setq lbp (list (car lop) (cadr rbp)))
;;; Breedte en Hoogte bepalen
(setq breedte (distance lop rop))
(setq hoogte (distance lop lbp))
(setq afrondbreedte (fix breedte))
(setq afrondhoogte (fix hoogte))
;;; Inserteerpunt Attribute Materiaal (PartMat)
(setq insertmat
(getpoint
"\nDuid een invoegpunt voor de attributes aan aub: "
)
)
(setvar "AFLAGS" 0);Geen Verify meer?
;;; Definieren attribuut PartMat
(command "attdef" ""
"PartMat" "Geef de Materiaalsoort op:"
"" insertmat "0"
)
(setq e1 (entlast))
;;; Definieren attribuut PartRef
(command "attdef" ""
"PartRef" "Geef een referentienaam op: ?"
"" ""
)
(setq e2 (entlast))
;;; Definieren attribuut PartL (Lengte =hoogte)
(command "attdef" ""
"PartL" "Geef de hoogte op: "
afrondhoogte ""
)
(setq e3 (entlast))
;;; Definieren attribuut PartW
(command "attdef" ""
"PartW" "Geef de breedte op: "
afrondbreedte ""
)
(setq e4 (entlast))
;;; Maken block
(setq NOToke T)
(while NOToke
(setq blocknaam
(getstring 7 "\nGeef een naam voor het block op aub: "))
(setq NOToke nil)
(if (tblsearch "BLOCK" blocknaam)
(setq NOToke T))
)
(command "block" blocknaam lop e1 e2 e3 e4 "")
;;;;;1)Misschien mag je (ssget "c" rop lbp) wel laten vervallen?  
;insert wblock
(if (= (getvar "ATTDIA") 0)
(progn
(setq NOToke T)
(while NOToke
(setq s1 (getstring "\nGeef de Materiaalsoort op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Materiaalsoort <" s1 "> op: ")))
(setq NOToke nil)
(if (/= s1 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s2 (getstring "\nGeef de Referentienaam op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Referentienaam <" s2 "> op: ")))
(setq NOToke nil)
(if (/= s2 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s3 (getstring (strcat "\nGeef de Hoogte <" (itoa afrondhoogte) "> op: ")))
(if (= s3 "")(setq s3 (itoa afrondhoogte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Hoogte <" s3 "> op: ")))
(setq NOToke nil)
(if (/= s3 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s4 (getstring (strcat "\nGeef de Breedte <" (itoa afrondbreedte) "> op: ")))
(if (= s4 "")(setq s4 (itoa afrondbreedte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Breedte <" s4 "> op: ")))
(setq NOToke nil)
(if (/= s4 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(command "insert" blocknaam lop "1" "1" "0" s1 s2 s3 s4)
);end progn
(command "insert" blocknaam lop "1" "1" "0"));end if
(command "regenall")
(command "zoom" "e")
(setvar "AFLAGS" ~afl)(setvar "ATTREQ" ~atr)(setvar "CMDECHO" ~CMD)
(princ)
)
(princ "\n ATTPL5 is geladen; Start met ATTPL5 bij Attdia= 0 of 1")(princ)
ACADcadabra

thomas151283

Beste HofCAD,

Ik heb wél vertrouwen in u!
Het enige probleem is dat ik niet rap van snap ben als het op Lisp begrijpen aankomt.  :oops:
En ik ben dan niet blond  :wink:

Hoe dan ook,
thx om zoveel moeite te doen!!!

HofCAD

Citaat van: thomas151283Beste HofCAD,
Ik heb wél vertrouwen in u!
En ik ben dan niet blond  :wink:

Beste Thomas,

Maar wil het het programma attpl5 en attExport een beetje werken?
Heb je verder ook naar het bestand ExtAttr.xls gekeken, en wat vindt
je daarvan?

HofCAD CSI
ACADcadabra

thomas151283

Beste HofCAD,

De programmatjes attpl5 en attExport werken perfect.
Heb ze een aantal keren uitgetest, en keer op keer kom ik uit hetgeen ik moest uitkomen !!

Verder vind ik de werkwijze via ExtAttr.xls  niet zo praktisch omdat ik het gevoel heb dat er nogal wat bijkomend werk bij komt kijken; en doel van lisp is toch automatiseren?!

Grtz, Thomas

HofCAD

Citaat van: HofCAD
Citaat van: Kenny H
Citeer(defun c:exportatt ()
 (setq   teknaam
   (getvar "dwgname"))
 (command "-eattext"
      "C"
      "Y"
      "Y"
      ""
      "CSV"
;;;      (("C:\DWG\ACADTDBO\VLISP\CSV") ("teknaam" ".CSV"))
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\"teknaam)
;;;      ("C:\\DWG\\ACADTDBO\\VLISP\\CSV\\")
;;;       ("C:\\DWG\\hout3\\VLISP\\CSV\\")
      (strcat teknaam ".CSV")
           ;;; Ge kunt die extentie veranderen als hij u vraag
;;;      Do you want to write to: c:........
;;;      dan zet ge N
;;;      dan typt ge de extentie in zoals bv hieronder maar de naam kunt ge niet wijzigen!!!
;;;      de teknaam die hier staat is de bestandsnaam. Ik heb al gezocht in de help funtie maar niets gevonden om dit variabel te kunnen zetten
;;;      Eattext staat trouwens ook niet verder uitgelegd in de help van vlisp in dat van cad wel.
       "N"
      "C:/...../VLISP/CSV/teknaam"
;;;      "C:\......\VLISP\\CSV\\teknaam"
 )
)

Misschien weet iemand anders dit op te lossen . Maar als ik die filepath ingeef is het laatste automatisch de bestandnaam.

"C:/...../VLISP/CSV/" als ge dit zet is de bestandsnaam niets. Vb  .csv

Beste Kenny,

Nu ga ik iets heel doms doen, want op dit moment heb ik geen AutoCAD
tot mijn beschikking om wat ik opper te controleren.
Moet (setq teknaam (getvar "dwgname"))
niet vervangen worden door:
(setq teknaam (getvar "dwgname") teklen (strlen teknaam))
(setq teknaam (substr teknaam 1 (- teklen 4)))


Morgen kan ik weer iets echt proberen.

Groetjes HofCAD CSI

Beste Thomas en Kenny,

Ik ben maar weer eens aan het programeren geslagen, om mijn
frustraties af te reageren. :twisted:
Hopelijk gaan julie wel onderstaande 3 programma's eens goed uittesten,
om zo wel tot een eerlijk oordeel te komen. 8)
Nogmaals als ik het echt goed had willen doen, had ik Visual Lisp of Visual
Basic gebruiken.  
Willen jullie AUB het programma attpl6 een paar maal uitproberen,
en daarna in dezelfde tekening AttExp1 en AttExp2 draaien.
Het programma AttExp1 gebruikt ATTEXT en het programma AttExp2
gebruikt -EATTEXT.
In de reeds aangeleverde programma's heb ik ook wijzigingen
aangebracht.
Wel eerst natuurlijk controleren dat op schijf C de map C:\temp bestaat
en dat excel in de map c:\progra~1\micros~1\office zit.
Zoniet verander dan in het programma's AttExp1 en AttExp2
wat er respectievelijk achter DirOutput, DirTemplate en DirExcel staat.

Groetjes HofCAD CSI

PS Als U AttExp2 draait, zonder eerst met EATTEXT een template
aangemaakt te hebben en in de juiste directory, dan krijgt U een
waarschuwingsvenster.

(defun c:AttExp2(/ ~CMD teknaam TemplateFil DirTemplate DirOutput DirExcel
Template num strNum NOToke Outfile)
(setq ~CMD (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(setq teknaam (getvar "dwgname"))
(setq teknaam (substr teknaam 1 (- (strlen teknaam) 4)))
(setq TemplateFil "atttempl.blk")
(setq DirTemplate "C:\\temp\\")
(setq DirOutput "C:\\temp\\")
(setq DirExcel "c:\\progra~1\\micros~1\\office\\")
(setq Template (strcat DirTemplate TemplateFil))
(if (findfile Template)
(progn
(setq Num 0 strNum "")
(setq NOToke T)
(while NOToke
(setq OutFile (strcat DirOutput teknaam strNum ".csv"))
(setq NOToke nil)
(if (findfile OutFile)(setq NOToke T))
(setq Num (1+ Num) strNum (itoa num))
)
(command "-eattext"
"C";Objects/Currentdwg/Selectdwg
"Y";Xref Yes/No
"Y";Nested blocks Yes/No
template  
"CSV";Csv/Txt/Xls/Mdb
OutFile
)
(if (findfile Outfile)
(progn
(princ (strcat " \n\n" Outfile " is aangemaakt."))
(Startapp (strcat DirExcel "Excel.exe") OutFile)
))
)
(progn
(load "AI_UTILS")
(ai_abort Template "is niet gevonden, maak die eerst aan met EATTEXT")
(princ (strcat Template " is niet gevonden,"))
(princ  "maak die eerst aan met EATTEXT"))
)
(setvar "CMDECHO" ~CMD) (princ)
)
(defun c:AttExp1(/ wfil ~CMD ~FDIA teknaam TemplateFil DirOutput DirExcel
DirTemplate Template Num strNum NOToke OutFile)
(defun wfil(file flist / i f1)
(setq f1 (open file "w") i 0)
(repeat (length flist)
(write-line (nth i flist) f1)
(setq i (1+ i)))
(close f1)
)
(setq ~CMD (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(setq ~FDIA (getvar "FILEDIA"))
(setq teknaam (getvar "dwgname"))
(setq teknaam (substr teknaam 1 (- (strlen teknaam) 4)))
(setq TemplateFil "atttempl.txt")
(setq DirOutput "c:\\Temp\\")
(setq DirExcel "c:/progra~1/micros~1/office/")
(setq DirTemplate "C:\\temp\\")
(setq Template (strcat DirTemplate TemplateFil))
(setq Num 0 strNum "")
(setq NOToke T)
(while NOToke
(setq OutFile (strcat DirOutput teknaam strNum ".txt"))
(setq NOToke nil)
(if (findfile OutFile)(setq NOToke T))
(setq Num (1+ Num) strNum (itoa num))
)
(setq TemplLST '("PARTMAT C008000" "PARTREF C008000" "PARTL N008000" "PARTW N008000"))
(wfil Template TemplLST)
(setvar "FILEDIA" 0)
(command
"ATTEXT"
"C" ;;Cdf/Sdf/Dxf
Template
OutFile)    
(setvar "FILEDIA" ~FDIA)
(princ (strcat " \n\n" Outfile " is aangemaakt."))
(Startapp (strcat DirExcel "Excel.exe") OutFile)
)
(defun c:attpl6 (/ ~cmd ~clay ~afl ~atr lay collay NOToke e1 e2 e3 e4 s1 s2 s3 s4 sh)
(setq ~cmd (getvar "CMDECHO") ~clay (getvar "CLAYER")
~afl (getvar "AFLAGS") ~atr (getvar "ATTREQ"))
(setvar "CMDECHO" 0)(setvar "ATTMODE" 1)(setvar "ATTREQ" 1)
;;; style maakt een nieuwe tekststijl aan: genaamd "attributes"
(command "style" "attributes" "tahoma" "15" "" "" "" "")
;;; layer maakt een nieuw laag aan: genaamd "attributes"  
(setq lay "attributes" collay "8")
(if (not (tblsearch "LAYER" lay))
(command "_LAYER" "M" lay "C" collay "" "")
(command "_LAYER" "T" lay "ON" lay "S" lay ""))
;;; Selecteren van hoekpunten
(setq lop (getpoint "\nLinker benedenhoekpunt aub.: "))
(setq rbp (getcorner lop "\nRechter bovenhoekpunt aub.: "))
(setq rop (list (car rbp) (cadr lop)))
(setq lbp (list (car lop) (cadr rbp)))
;;; Breedte en Hoogte bepalen
(setq breedte (distance lop rop))
(setq hoogte (distance lop lbp))
(setq afrondbreedte (fix breedte))
(setq afrondhoogte (fix hoogte))
;;; Inserteerpunt Attribute Materiaal (PartMat)
(setq insertmat
(getpoint
"\nDuid een invoegpunt voor de attributes aan aub: "
)
)
(setvar "AFLAGS" 0);Geen Verify meer?
;;; Definieren attribuut PartMat
(command "attdef" ""
"PartMat" "Geef de Materiaalsoort op:"
"" insertmat "0"
)
(setq e1 (entlast))
;;; Definieren attribuut PartRef
(command "attdef" ""
"PartRef" "Geef een referentienaam op: ?"
"" ""
)
(setq e2 (entlast))
;;; Definieren attribuut PartL (Lengte =hoogte)
(command "attdef" ""
"PartL" "Geef de hoogte op: "
afrondhoogte ""
)
(setq e3 (entlast))
;;; Definieren attribuut PartW
(command "attdef" ""
"PartW" "Geef de breedte op: "
afrondbreedte ""
)
(setq e4 (entlast))
;;; Maken block
(setq NOToke T)
(while NOToke
(setq blocknaam
(getstring 7 "\nGeef een naam voor het block op aub: "))
(setq NOToke nil)
(if (tblsearch "BLOCK" blocknaam)
(setq NOToke T))
)
(command "block" blocknaam lop e1 e2 e3 e4 "")
;insert block
(if (= (getvar "ATTDIA") 0)
(progn
(setq NOToke T)
(while NOToke
(setq s1 (getstring "\nGeef de Materiaalsoort op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Materiaalsoort <" s1 "> op: ")))
(setq NOToke nil)
(if (/= s1 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s2 (getstring "\nGeef de Referentienaam op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Referentienaam <" s2 "> op: ")))
(setq NOToke nil)
(if (/= s2 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s3 (getstring (strcat "\nGeef de Hoogte <" (itoa afrondhoogte) "> op: ")))
(if (= s3 "")(setq s3 (itoa afrondhoogte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Hoogte <" s3 "> op: ")))
(setq NOToke nil)
(if (/= s3 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s4 (getstring (strcat "\nGeef de Breedte <" (itoa afrondbreedte) "> op: ")))
(if (= s4 "")(setq s4 (itoa afrondbreedte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Breedte <" s4 "> op: ")))
(setq NOToke nil)
(if (/= s4 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(command "insert" blocknaam lop "1" "1" "0" s1 s2 s3 s4)
);end progn
(command "insert" blocknaam lop "1" "1" "0"));end if
(command "regenall")
(command "zoom" "e")
(setvar "AFLAGS" ~afl)(setvar "ATTREQ" ~atr)
(setvar "CLAYER" ~CLAY)(setvar "CMDECHO" ~CMD)
(princ)
)
(princ "\n ATTPL6 is geladen; Start met ATTPL6 bij Attdia= 0 of 1")(princ)
ACADcadabra

Kenny H

Ik heb die attpl6 een paar keer uitgeprobeert.
Hij gaf mij bij de eerste 3 keer een dialoogbox weer waar ik mijn materiaal en referentienaam moest invullen. Mijn blocknaam ging wel via de commando regel.

De andere keren ging alles via de commando regel.  :roll:  :?:  :?:
Dan heb ik nog toegevoegd dat hij die rechthoek tekend, want nu is die enkel van toepassing om de maten te bekomen.
Deze rechthoek had thomas liefst staan.

De ene keer staan er enkel mijn gegevens die ik in vul in de commando regel, en de andere keer staat er ook de partref, partmat, enz  bij :!:  :!:

:?  :?
8) Volvo 4 Life 8)

Kenny H

Nu de laatste keren blijft deze Part... steeds weg.
Alles gaat terug via de commando regel.

Terinfo
Die Part.. springen bij mij weg na het opgeven van de blocknaam.
8) Volvo 4 Life 8)

Kenny H

(defun c:AttExp2(/ ~CMD teknaam TemplateFil DirTemplate DirOutput DirExcel
Template num strNum NOToke Outfile)
(setq ~CMD (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(setq teknaam (getvar "dwgname"))
(setq teknaam (substr teknaam 1 (- (strlen teknaam) 4)))
(setq TemplateFil "atttempl.blk")
(setq DirTemplate "C:\\temp\\")
(setq DirOutput "C:\\temp\\")
(setq DirExcel "c:\\progra~1\\micros~1\\office\\")
(setq Template (strcat DirTemplate TemplateFil))
(if (findfile Template)
(progn
(setq Num 0 strNum "")
(setq NOToke T)
(while NOToke
(setq OutFile (strcat DirOutput teknaam strNum ".csv"))
(setq NOToke nil)
(if (findfile OutFile)(setq NOToke T))
(setq Num (1+ Num) strNum (itoa num))
)
(command "-eattext"
"C";Objects/Currentdwg/Selectdwg
"Y";Xref Yes/No
"Y";Nested blocks Yes/No
template
"CSV";Csv/Txt/Xls/Mdb
OutFile
)
(if (findfile Outfile)
(progn
(princ (strcat " \n\n" Outfile " is aangemaakt."))
(Startapp (strcat DirExcel "Excel.exe") OutFile)
))
)
(progn
(load "AI_UTILS")
(ai_abort Template "is niet gevonden, maak die eerst aan met EATTEXT")
(princ (strcat Template " is niet gevonden,"))
(princ "maak die eerst aan met EATTEXT"))
)
(setvar "CMDECHO" ~CMD) (princ)
)
(defun c:AttExp1(/ wfil ~CMD ~FDIA teknaam TemplateFil DirOutput DirExcel
DirTemplate Template Num strNum NOToke OutFile)
(defun wfil(file flist / i f1)
(setq f1 (open file "w") i 0)
(repeat (length flist)
(write-line (nth i flist) f1)
(setq i (1+ i)))
(close f1)
)
(setq ~CMD (getvar "CMDECHO")) (setvar "CMDECHO" 0)
(setq ~FDIA (getvar "FILEDIA"))
(setq teknaam (getvar "dwgname"))
(setq teknaam (substr teknaam 1 (- (strlen teknaam) 4)))
(setq TemplateFil "atttempl.txt")
(setq DirOutput "c:\\Temp\\")
(setq DirExcel "c:/progra~1/micros~1/office/")
(setq DirTemplate "C:\\temp\\")
(setq Template (strcat DirTemplate TemplateFil))
(setq Num 0 strNum "")
(setq NOToke T)
(while NOToke
(setq OutFile (strcat DirOutput teknaam strNum ".txt"))
(setq NOToke nil)
(if (findfile OutFile)(setq NOToke T))
(setq Num (1+ Num) strNum (itoa num))
)
(setq TemplLST '("PARTMAT C008000" "PARTREF C008000" "PARTL N008000" "PARTW N008000"))
(wfil Template TemplLST)
(setvar "FILEDIA" 0)
(command
"ATTEXT"
"C" ;;Cdf/Sdf/Dxf
Template
OutFile)
(setvar "FILEDIA" ~FDIA)
(princ (strcat " \n\n" Outfile " is aangemaakt."))
(Startapp (strcat DirExcel "Excel.exe") OutFile)
)
(defun c:attpl6 (/ ~cmd ~clay ~afl ~atr lay collay NOToke e1 e2 e3 e4 s1 s2 s3 s4 sh)
(setq ~cmd (getvar "CMDECHO") ~clay (getvar "CLAYER")
~afl (getvar "AFLAGS") ~atr (getvar "ATTREQ"))
(setvar "CMDECHO" 0)(setvar "ATTMODE" 1)(setvar "ATTREQ" 1)
;;; style maakt een nieuwe tekststijl aan: genaamd "attributes"
(command "style" "attributes" "tahoma" "15" "" "" "" "")
;;; layer maakt een nieuw laag aan: genaamd "attributes"
(setq lay "attributes" collay "8")
(if (not (tblsearch "LAYER" lay))
(command "_LAYER" "M" lay "C" collay "" "")
(command "_LAYER" "T" lay "ON" lay "S" lay ""))
;;; Selecteren van hoekpunten
(setq lop (getpoint "\nLinker benedenhoekpunt aub.: "))
(setq rbp (getcorner lop "\nRechter bovenhoekpunt aub.: "))
(setq rop (list (car rbp) (cadr lop)))
(setq lbp (list (car lop) (cadr rbp)))
 (command "rectangle" lop rbp)
(setq breedte (distance lop rop))
(setq hoogte (distance lop lbp))
(setq afrondbreedte (fix breedte))
(setq afrondhoogte (fix hoogte))
;;; Inserteerpunt Attribute Materiaal (PartMat)
(setq insertmat
(getpoint
"\nDuid een invoegpunt voor de attributes aan aub: "
)
)
(setvar "AFLAGS" 0);Geen Verify meer?
;;; Definieren attribuut PartMat
(command "attdef" ""
"PartMat" "Geef de Materiaalsoort op:"
"" insertmat "0"
)
(setq e1 (entlast))
;;; Definieren attribuut PartRef
(command "attdef" ""
"PartRef" "Geef een referentienaam op: ?"
"" ""
)
(setq e2 (entlast))
;;; Definieren attribuut PartL (Lengte =hoogte)
(command "attdef" ""
"PartL" "Geef de hoogte op: "
afrondhoogte ""
)
(setq e3 (entlast))
;;; Definieren attribuut PartW
(command "attdef" ""
"PartW" "Geef de breedte op: "
afrondbreedte ""
)
(setq e4 (entlast))
;;; Maken block
(setq NOToke T)
(while NOToke
(setq blocknaam
(getstring 7 "\nGeef een naam voor het block op aub: "))
(setq NOToke nil)
(if (tblsearch "BLOCK" blocknaam)
(setq NOToke T))
)
(command "block" blocknaam lop e1 e2 e3 e4 "")
;insert block
(if (= (getvar "ATTDIA") 0)
(progn
(setq NOToke T)
(while NOToke
(setq s1 (getstring "\nGeef de Materiaalsoort op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Materiaalsoort <" s1 "> op: ")))
(setq NOToke nil)
(if (/= s1 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s2 (getstring "\nGeef de Referentienaam op: "))
(setq sh (getstring (strcat "\nGeef nogmaals de Referentienaam <" s2 "> op: ")))
(setq NOToke nil)
(if (/= s2 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s3 (getstring (strcat "\nGeef de Hoogte <" (itoa afrondhoogte) "> op: ")))
(if (= s3 "")(setq s3 (itoa afrondhoogte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Hoogte <" s3 "> op: ")))
(setq NOToke nil)
(if (/= s3 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(setq NOToke T)
(while NOToke
(setq s4 (getstring (strcat "\nGeef de Breedte <" (itoa afrondbreedte) "> op: ")))
(if (= s4 "")(setq s4 (itoa afrondbreedte)))
(setq sh (getstring (strcat "\nGeef nogmaals de Breedte <" s4 "> op: ")))
(setq NOToke nil)
(if (/= s4 sh) (setq NOToke T))
(if (= sh "")(setq NOToke nil))
)
(command "insert" blocknaam lop "1" "1" "0" s1 s2 s3 s4)
);end progn
(command "insert" blocknaam lop "1" "1" "0"));end if
(command "regenall")
(command "zoom" "e")
(setvar "AFLAGS" ~afl)(setvar "ATTREQ" ~atr)
(setvar "CLAYER" ~CLAY)(setvar "CMDECHO" ~CMD)
(princ)
)
(princ "\n ATTPL6 is geladen; Start met ATTPL6 bij Attdia= 0 of 1")(princ)
8) Volvo 4 Life 8)

HofCAD

Citaat van: Kenny HIk heb die attpl6 een paar keer uitgeprobeert.
Hij gaf mij bij de eerste 3 keer een dialoogbox weer waar ik mijn materiaal en referentienaam moest invullen. Mijn blocknaam ging wel via de commando regel.

De andere keren ging alles via de commando regel.  :roll:  :?:  :?:
Dan heb ik nog toegevoegd dat hij die rechthoek tekend, want nu is die enkel van toepassing om de maten te bekomen.
Deze rechthoek had thomas liefst staan.

De ene keer staan er enkel mijn gegevens die ik in vul in de commando regel, en de andere keer staat er ook de partref, partmat, enz  bij :!:  :!:

:?  :?
Citaat van: Kenny Hny H"]Nu de laatste keren blijft deze Part... steeds weg.
Alles gaat terug via de commando regel.

Terinfo
Die Part.. springen bij mij weg na het opgeven van de blocknaam.


Beste Kenny,

Ik ben blij dat je zo snel gereageerd hebt, want vandaar uit kan Thomas ook weer op ideeen komen. :D  :lol:  :o
Het grootste stuk van het eerste gedeelte van attpl6  is nog van Thomas, en ik weet
niet goed wat hij daar eigenlijk mee wil. :oops:
Zie zijn eerste vraagstelling 'Lisp routine maken....." met attpl2 op:
http://www.cadsite.be/forum/viewtopic.php?t=609
en
http://www.cadsite.be/forum/viewtopic.php?t=620
In drie onderwerpen heeft hij het over hetzelfde programma, zonder
eigenlijk precies te zijn en de wezenlijke definitieve doelstelling te formuleren.
Waarschijnlijk ook nog in:
http://www.cadsite.be/forum/viewtopic.php?t=626

Jij schrijft dat hij in het block een rechthoek wil, maar daar heb ik nooit iets van
gezien of gelezen; hoewel het toch wel zo zou kunnen zijn, gezien wat hij
geprogrameerd heeft.
Ik dacht eigenlijk eerder dat hij een kamer of een blok wilde opmeten,
gezien hij de afgeronde waarden gebruikt als default bij z'n attributen.  8)
Ik ben begonnen aan attpl2 over vragen van WBLOCK,
en daarna ben ik van het ene probleem in het andere gerold,
en als laatste dat van -EATTEXT.
Bijvoorbeeld: Ik weet niet hoe z'n block er uiteindelijk uit moet zien, en ook niet hoe hij de invoer wil verzorgen. :oops:
Gezien de invoerregels die hij gemaakt, ben ik er vanuit gegaan dat bij
hem de variabele ATTDIA op 0 staat.  8)

Dit snap ik niet:
De andere keren ging alles via de commando regel.  :roll:  :?:  :?:
of heb je ATTDIA op 0 gezet.

Bedoel je:
De ene keer staan er enkel mijn gegevens die ik in vul in de commando regel,
en de andere keer staat er ook de partref, partmat, enz  bij :!:  :!:

met dit dat de vraagstelling voor bijvoorbeeld  Materiaal twee keer
herhaald wordt.
Als dat zo is, dat komt omdat Thomas in eerste instantie zijn attributen
aanmaakte met de mode Verify, en Ja dat moet je als je netjes bent er
ook twee keer na vragen en bij de tweede keer de default geven.

Kun je dit verduidelijken:
Nu de laatste keren blijft deze Part... steeds weg.
Alles gaat terug via de commando regel.


Dit onderste komt nog van Thomas:
Die Part.. springen bij mij weg na het opgeven van de blocknaam.

Groetjes HofCAD CSI

PS1 Ook de andere twee (AttExp1 en AttExp2) al uitgetest, want daar ging het volgens mij om?

PS2 Moet die rechthoek, die je wenst en laat tekenen , niet opgenomen worden in het block?

PS3 Gebruik je AttExp1 dan moet je eigenlijk in EXCEL het Txtbestand
opnieuw openen en via de Wizard tekst importeren de waarden in de verschillende
kolommen laten komen.
Bestand->Openen->Bestandstype->Alle bestanden->

PS4 Thomas kan in de template voor AttExp1 natuurlijk ook onderstaand gebruiken:
 
BL:NAME Cwww000 (Block name)

BL:LEVEL Nwww000 (Block nesting level)

BL:X Nwwwddd (X coordinate of block insertion point)

BL:Y Nwwwddd (Y coordinate of block insertion point)

BL:Z Nwwwddd (Z coordinate of block insertion point)

BL:NUMBER Nwww000 (Block counter; the same for MINSERT)

BL:HANDLE Cwww000 (Block handle; the same for MINSERT)

BL:LAYER Cwww000 (Block insertion layer name)

BL:ORIENT Nwwwddd (Block rotation angle)

BL:XSCALE Nwwwddd (X scale factor)

BL:YSCALE Nwwwddd (Y scale factor)

BL:ZSCALE Nwwwddd (Z scale factor)

BL:XEXTRUDE Nwwwddd (X component of block extrusion direction)

BL:YEXTRUDE Nwwwddd (Y component of block extrusion direction)

BL:ZEXTRUDE Nwwwddd (Z component of block extrusion direction)

numeric Nwwwddd (Numeric attribute tag)

character Cwww000 (Character attribute tag)
ACADcadabra

Kenny H

Citeer
;;; Plaatsen van attributes 3a
;;; Tekenen van rechthoek met ingave van Lengte en Breedte
;;; Gemaakt op: maandag 18 april 2005
;;; Laatste wijziging: woensdag 20 april 2005


(defun c:attpl3la (/ ~cmd ~afl NOToke e1 e2 e3 e4 s1 s2 s3 s4 sh)
 (setq   ~cmd (getvar "CMDECHO")
   ~afl (getvar "AFLAGS")
 )
 (setvar "CMDECHO" 0)
;;; style maakt een nieuwe tekststijl aan: genaamd "attributes"
 (command "style" "attributes" "tahoma" "15" "" "" "" "")
;;; layer maakt een nieuw laag aan: genaamd "attributes"
 (command "layer" "m" "zijkant" "c" "red" "" "")

;;; Tekenen van een rechthoek adhv Lengte en breedte
 (setq lop (getpoint "\nLinker benedenhoekpunt aub: "))
 (setq breedte (getreal "\nGeef breedte in :"))
 (setq hoogte (getreal "\nGeef hoogte in :"))
 (setq rop (polar lop 0 breedte))
 (setq rbp (polar rop (dtr 90) hoogte))
 (setq lbp (polar rbp pi breedte))
 (command "rectangle" lop rbp)
;;; Breedte en Hoogte bepalen
 (setq afrondbreedte (fix (+ breedte 0.5)))
 (setq afrondhoogte (fix (+ hoogte 0.5)))

;;; Inserteerpunt Attribute Materiaal (PartMat)
 (setq   insertmat
    (getpoint
      "\nDuid een invoegpunt voor de attributes aan aub: "
    )
 )
 (setvar "AFLAGS" 0)
;;; Definieren attribuut PartMat
 (command "attdef"         ""       "PartMat"
      "Geef de Materiaalsoort op:"       ""
      insertmat         "0"
     )
 (setq e1 (entlast))
;;; Definieren attribuut PartRef
 (command "attdef"          ""         "PartRef"
      "Geef een Referentienaam op: "      ""
      ""
     )
 (setq e2 (entlast))
;;; Definieren attribuut PartL (Lengte =hoogte)
 (command "attdef"       ""           "PartL"
      "Geef de Hoogte op: "        afrondhoogte
      ""
     )
 (setq e3 (entlast))
;;; Definieren attribuut PartW
 (command "attdef"        ""             "PartW"
      "Geef de Breedte op: "          afrondbreedte
      ""
     )
 (setq e4 (entlast))
;;; Definieren attribuut PartQTY
 (command "attdef"          ""         "PartQTY"
      "Geef het aantal stukken op: "      ""
      ""
     )
 (setq e5 (entlast))

;;; Maken block
 (setq notoke T)
 (while NOToke
   (setq bestandsnaam
      (getstring 7
            "\nGeef een bestandsnaam voor het block op aub: "
      )
   )
   (setq NOToke nil)
   (if   (tblsearch "block" bestandsnaam)
     (setq NOToke T)
   )
 )
 (setq   blocknaam
    (strcat bestandsnaam)
 )
 (command "block"
      blocknaam
      lop
      e1
      e2
      e3
      e4
      e5
      (setq crossing (ssget "w" lbp rop))
      ""
 )

;;; Insert block
 (if (= (getvar "ATTDIA") 0)
   (progn
     (setq notoke T)
     (while NOToke
   (setq s1 (getstring "\nGeef de Materiaalsoort op: "))
   (setq
     sh (getstring   (strcat   "\nGeef nogmaals de Materiaalsoort <"
            s1
            "> op: "
         )
        )
   )
   (setq NOToke nil)
   (if (/= s1 sh)
     (setq NOToke T)
   )
   (if (= sh "")
     (setq NOToke nil)
   )
     )
;;;      (setq notoke T)
;;;      (while NOToke
     (setq s2 (strcat blocknaam))
;;;   (setq
;;;     sh (strcat s2
;;;        )
;;;   )
;;;   (setq NOToke nil)
;;;   (if (/= s2 sh)
;;;     (setq NOToke T)
;;;   )
;;;   (if (= sh "")
;;;     (setq NOToke nil)
;;;   )
;;;      )
     (setq notoke T)
     (while NOToke
   (setq s3 (getstring (strcat "\nGeef de Hoogte <"
                (itoa afrondhoogte)
                "> op: "
             )
       )
   )
   (if (= s3 "")
     (setq s3 (itoa afrondhoogte))
   )
   (setq sh (getstring
         (strcat "\nGeef nogmaals de Hoogte <" s3 "> op: ")
       )
   )
   (setq NOToke nil)
   (if (/= s3 sh)
     (setq NOToke T)
   )
   (if (= sh "")
     (setq NOToke nil)
   )
     )
     (setq notoke T)
     (while NOToke
   (setq s4 (getstring (strcat "\nGeef de Breedte <"
                (itoa afrondbreedte)
                ">op: "
             )
       )
   )
   (if (= s4 "")
     (setq s4 (itoa afrondbreedte))
   )
   (setq sh (getstring
         (strcat "\nGeef nogmaals de Breedte <" s4 "> op: ")
       )
   )
   (setq NOToke nil)
   (if (/= s4 sh)
     (setq NOToke T)
   )
   (if (= sh "")
     (setq NOToke nil)
   )
     )
     (setq notoke T)
     (while NOToke
   (setq s5 (getstring "\nGeef het aantal stukken op: "))
   (setq
     sh (getstring
          (strcat "\nGeef nogmaals het aantal stukken op: <"
             s5
             "> op: "
          )
        )
   )
   (setq NOToke nil)
   (if (/= s5 sh)
     (setq NOToke T)
   )
   (if (= sh "")
     (setq NOToke nil)
   )
     )
     (command "insert"   bestandsnaam lop "1" "1" "0" s1   s2 s3 s4 s5)
   )               ; End progn
   (command "insert" bestandsnaam lop "1" "1" "0")
 )               ; End if
 (command "filedia" 1)
 (command "regenall")
 (command "zoom" "e")
 (setvar "AFLAGS" ~afl)
 (setvar "CMDECHO" ~CMD)
 (setvar "osmode" 1)
 (princ)
)

Thomas in dit programma is de blocknaam = de referentienaam. Dat wou je toch bereiken. Hij vraag u dus ook maar 1 keer een naam in te geven en zet deze direct ook als refnaam voor de block.
Moet ge zelf die refnaam nog kunnen veranderen? Ik denk van niet aangezien ge wilt dat de blocknaam gelijk is aan de refnaam.
8) Volvo 4 Life 8)

Kenny H

8) Volvo 4 Life 8)