FastFiber

Foutmelding: Overschrijven ve bestaand document

Gestart door thomas151283, ma 11 04 2005, 14:55:56

Vorige topic - Volgende topic

thomas151283

Hoe kan er met lisp een foutmelding geschreven als men van plan is om een bestaand document te overschrijven?

Gebeurt dit adhv if en while?

MVG, Thomas

Joop

Overschrijf je een tekening of een text bestand?

Als je mbv Lisp de inhoud van een text bestand wilt wijzigen moet je eerst het bestand openen:

(setq f (open "c:\\my documents\\new.tst" "w"))

De W zorgt ervoor dat de inhoud wordt overschreven.
Gebruik je de A dan wordt de text toegevoegd.
Gebruik je de R dan open het bestand alleen om te lezen.
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

thomas151283

Bedoeling is vermijden dat een tekening wordt overschreven.

Thomas

Joop

Als de tekening niet geopend is moet je als voorwaarde bij de save opdracht meegeven dat de bestandsnaam niet reeds bestaat.
Dit kun je doen met de FINDFILE opdracht.
Deze zoekt in het AutoCAD zoekpad naar een opgegeven bestandsnaam.

(if (/= bestandsnaam (findfile bestandsnaam))
   (command "save" bestandsnaam)
   (alert "TEKENING BESTAAT REEDS")
)
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

thomas151283

Joop,

Ik zit een beetje vast; het principe heb ik vast van hoe ik die foutmelding moet programmeren.
Maar het is de bedoeling dat deze erop komt tijdens mijn bewerking.
Misschien zie jij wel hoe het moet, of wat er juist vantussen moet laten.


(defun c:attpl3   ()
;;; 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: "
    )
 )
 (command "attdef"       "V"           ""
      "PartMat"       "Geef de Materiaalsoort op: "
      ""          insertmat        "0"
      ""
     )
;;; Inserteren Referentie
 (setq   insertref
    (command
      "attdef"         "V"       ""
      "PartRef"         "Geef een referentienaam op: "
      ""            ""
     )
 )
;;; Inserteren Lengte (=hoogte)
 (setq   insertl
    (command "attdef"     "V"        ""
        "PartL"     "Geef de hoogte op: "
        afrondhoogte     ""
       )
 )
;;; Inserteren Breedte
 (setq   insertw
    (command "attdef"     "V"        ""
        "PartW"     "Geef de breedte op: "
        afrondbreedte     ""
       )
 )
;;; Maken wblock
 (command "filedia" "1")
 (command "wblock"
      (setq bestandsnaam
        (getstring 7
              "\nGeef een bestandsnaam voor het wblock op aub: "
        )
      )
      (if (/= bestandsnaam (findfile bestandsnaam))
        (command "save" bestandsnaam)
        (alert "Wblock bestaat reeds!")
      )
      ""
      lop
;;; basispunt wblock
      (setq crossing (ssget "c" rop lbp))
      ""
 )
;;; Inserteren wblock
 (command "insert" bestandsnaam lop "1" "1" "0")
 (command "regen" "all")
 (command "zoom" "e")
 (princ)
)


Daar in het rode gedeelte vermoed ik dat die melding erbij moet.
Grtz Thomas

HofCAD

Citaat van: thomas151283Joop,

Ik zit een beetje vast; het principe heb ik vast van hoe ik die foutmelding moet programmeren.
Maar het is de bedoeling dat deze erop komt tijdens mijn bewerking.
Misschien zie jij wel hoe het moet, of wat er juist vantussen moet laten.

Beste Thomas151283,

Bedoel je de onderstaande gele tekst?

Groetjes HofCAD CSI.




(defun c:attpl3 ()
;;; 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: "
)
)
(command "attdef" "V" ""
"PartMat" "Geef de Materiaalsoort op: "
"" insertmat "0"
""
)
;;; Inserteren Referentie
(setq insertref
(command
"attdef" "V" ""
"PartRef" "Geef een referentienaam op: "
"" ""
)
)
;;; Inserteren Lengte (=hoogte)
(setq insertl
(command "attdef" "V" ""
"PartL" "Geef de hoogte op: "
afrondhoogte ""
)
)
;;; Inserteren Breedte
(setq insertw
(command "attdef" "V" ""
"PartW" "Geef de breedte op: "
afrondbreedte ""
)
)
;;; Maken wblock
(setq NOToke T)
(while NOToke
(setq bestandsnaam
(getstring 7 "\nGeef een bestandsnaam voor het wblock op aub: "))
(setq NOToke nil)
(if (findfile (strcat bestandsnaam ".dwg")) (setq NOToke T))
)
;;(command "filedia" 0)??????
(command "wblock" bestandsnaam "" lop (setq crossing (ssget "c" rop lbp)) "")
;;(command "filedia" 1)??????

;;; Inserteren wblock
(command "insert" bestandsnaam lop "1" "1" "0")
;;;Je moet de values input  nog goed verzorgen!!!!!!!!!!!!!!!!!!!!!!
(command "regen" "all")
(command "zoom" "e")
(princ)
)
ACADcadabra

thomas151283

Aan HofCAD CSI


;;Je moet de values input nog goed verzorgen!!!!!!!!!!!!!!!!!!!!!!

Wat bedoel je hier juist mee ?  :oops:

Toch al bedankt voor het gele gedeelte; dat was het wat ik nodig had.  :vreegoe:

Grtz
Thomas

HofCAD

Citaat van: thomas151283Aan
HofCAD CSI


;;Je moet de values input nog goed verzorgen!!!!!!!!!!!!!!!!!!!!!!

Wat bedoel je hier juist mee ?  :oops:

Toch al bedankt voor het gele gedeelte; dat was het wat ik nodig had.  :vreegoe:

Grtz
Thomas

Beste Thomas,

De volgorde waarin je invulvragen komen voor je attributen zijn niet
eenduidig bepaald, je moet ze daarom een voor een in de juiste
volgorde selecteren en niet met een crossing.
Ten tweede als je programma runt, dan zie je dat AutoCAD
de uitkomst van (command "regen" "all") en (command "zoom" "e")
dus resp. "all" en "e" ziet als invulwaarden voor je attributen.

Groetjes HofCAD CSI
ACADcadabra

thomas151283

Beste HofCAD

Als antwoord op uw reactie:

1: De volgorde van mijn invulvragen is inderdaad niet eenduidig bepaald, maar aangezien ik mijn attributes via aligning programmeer staan deze altijd mooi onder elkaar. Dus ik heb enkel van mijn bovenste attribute een coördinatiepunt (denk ik toch). Daarom dacht ik dat ik telkens eenzelfde volgorde verkijg door elke keer op dezelfde manier te selecteren.
Ik weet niet of dit de meest optimale werkwijze is, maar ze werkt wel.

2. Beschouwt AutoCAD hetgeen dat tussen "" staat niet als een commando, of vervolg op commando?
Invulwaarden worden toch geschreven en bepaald zonder ""?
Indien in het grandioos mis heb, gelieve me te verbeteren.

Suggesties ter verbetering van kennen en kunnen van lisp zijn steeds welkom.

Dank bij voorbaat
MVG,
Thomas

bart

de volgerde van de attributen is wel is elke keer het zelfde.

namelijk het  atrribut dat het eerst wordt gemaakt wordt automatisch het laast geselecteerd bij een crossing
omdat het als het ware onder op in de database staat.
(toeval bestaat niet bij een computer)

de bovenstaande volgorde is te omzeilen door de atributen in een bepaalde volgorde te selecteren bij het aanmaken van een (W)block
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

Citaat van: thomas151283Beste HofCAD

Als antwoord op uw reactie:

1: De volgorde van mijn invulvragen is inderdaad niet eenduidig bepaald, maar aangezien ik mijn attributes via aligning programmeer staan deze altijd mooi onder elkaar. Dus ik heb enkel van mijn bovenste attribute een coördinatiepunt (denk ik toch). Daarom dacht ik dat ik telkens eenzelfde volgorde verkijg door elke keer op dezelfde manier te selecteren.
Ik weet niet of dit de meest optimale werkwijze is, maar ze werkt wel.

2. Beschouwt AutoCAD hetgeen dat tussen "" staat niet als een commando, of vervolg op commando?
Invulwaarden worden toch geschreven en bepaald zonder ""?
Indien in het grandioos mis heb, gelieve me te verbeteren.

Suggesties ter verbetering van kennen en kunnen van lisp zijn steeds welkom.

Dank bij voorbaat
MVG,
Thomas

Beste Thomas,

Zoals met vele dingen in het leven, ben ik het er niet mee eens.
Maar ja, ik ben blond en volgens Bart zelfs kaal. :evil:
Zelfs de bewering dat bij een crossing selectie het laatste altijd
als eerste geselecteerd wordt, bij alle AutoCAD versies en instellingen,
betwijfel ik door mijn ervaring ten zeerste.
Ook dat toeval niet bestaat bij computers wil ik bestrijden:
Voorbeeld1: AutoCAD was in het verleden bij het OFFSET commando  bij inwaarts offsetten van polylijnen onder invloed van de plaats van het scherm.
(Niemand gelooft me, maar kan tegen een weddenschap van 2000 Euro
het mirakel bij AutoCAD release 14 bij mij aanschouwen.)
Voorbeeld2: Als men bij het commando BHATCH kiest voor pick points
en het gebied wordt niet voor 100% op het scherm weergegeven dan gaat het de ene keer fout en de andere keer goed.
Voor deze emotionele nederlaag, was ik er heilig van overtuigd dat
AutoCAD alles volledig wiskundig opbouwde;
maar ja ik ben blond. :oops:
Het is overigens misschien de wiskundige Chaos theorie, die voor mij een zware emotionele aantasting is, die het bovenstaande wel kan verklaren.
Ja, en als de natuurkundige Stephen Hawkins ooit zijn werk zal voltooien,
is alles in theorie gedetermineerd.
Leuk voor de spelverslaafden en de staatsloterij.
Maar nu wat pragmatischer:

T.a.v. het eerste punt:
Om er zeker van te zijn dat altijd al je attributen en in de zelfde volgorde
geselecteerd worden
(en daardoor ook altijd in dezelfde volgorde gevraagd en  gepresenteerd
worden in de dialoogboxen van ATTEDIT en EATTEDIT)
,
zou ik je programma als onderstaand aanpassen.

T.a.v. het tweede punt:
Als ik je vorige versie met
(command "insert" bestandsnaam lop "1" "1" "0")
uitprobeer, dan krijg ik voor het materiaal regen, voor de referentie all,
voor de lengte zoom en voor de breedte e; maar dat zal wel aan mij liggen, want ik ben blond.:oops:
Daarom zou ik ook je programma aanpassen.
Dit eventueel in een andere versie als ik gedaan heb,vanwege je keuze van  Verify(setvar "AFLAGS" 4), zou je elke vraag 2x moeten stellen.
Nogmaals mijn slechte eigenschappen: ik ben blond :oops:, heb geen humor :oops:   en ben zelfs ook nog een beetje eigenwijs :oops:;
en toch hoop ik op je begrip.

Groetjes HofCAD CSI


PS  De kleuren van CSI zijn ook door toeval tot stand gekomen.



(defun c:attpl3 (/ e1 e2 e3 e4)
;;; 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" 4);Is Verify echt nodig?
(command "attdef" ""
"PartMat" "Geef de Materiaalsoort op: "
"" insertmat "0"
""
)
(setq e1 (entlast))
;;; Inserteren Referentie
(setq insertref
(command "attdef" ""
"PartRef" "Geef een referentienaam op: "
"" ""
)
)
(setq e2 (entlast))
;;; Inserteren Lengte (=hoogte)
(setq insertl
(command "attdef" ""
"PartL" "Geef de hoogte op: "
afrondhoogte ""
)
)
(setq e3 (entlast))
;;; Inserteren Breedte
(setq insertw
(command "attdef" ""
"PartW" "Geef de breedte op: "
afrondbreedte ""
)
)
(setq e4 (entlast))
;;; Maken wblock
(command "filedia" 0)
(setq notoke T)
(while NOToke
(setq bestandsnaam
(getstring 7 "\nGeef een bestandsnaam voor het wblock op aub: "))
(setq NOToke nil)
(if (findfile (strcat bestandsnaam ".dwg")) (setq NOToke T))
)
(command "wblock" bestandsnaam "" lop e1 e2 e3 e4 (setq crossing (ssget "c" rop lbp)) "")
;;;1)Misschien mag je (setq crossing (ssget "c" rop lbp)) wel laten vervallen?
;;;2)Moet je ook niet testen of er in je tekening al een block is
;;;met dezelfde naam?

;;; Inserteren wblock
(setq s1 (getstring "\nGeef de Materiaalsoort op: "))
(setq s2 (getstring "\nGeef een Referentienaam op: "))
(setq s3 (getstring "\nGeef de Hoogte op: "))
(setq s4 (getstring "\nGeef de Breedte op: "))

;;;bovenstaande vraagstelling moet nog veranderd worden wegens Verify
(command "insert" bestandsnaam lop "1" "1" "0" s1 s2 s3 s4 s1 s2 s3 s4)
(command "regen" "all")
(command "zoom" "e")
(princ)
)
ACADcadabra

bart

Citaat van: HofCAD

Zoals met vele dingen in het leven, ben ik het er niet mee eens.
Maar ja, ik ben blond en volgens Bart zelfs kaal. :evil:
Zelfs de bewering dat bij een crossing selectie het laatste altijd
als eerste geselecteerd wordt, bij alle AutoCAD versies en instellingen,
betwijfel ik door mijn ervaring ten zeerste.
Ook dat toeval niet bestaat bij computers wil ik bestrijden:
Voorbeeld1: AutoCAD was in het verleden bij het OFFSET commando  bij inwaarts offsetten van polylijnen onder invloed van de plaats van het scherm.
(Niemand gelooft me, maar kan tegen een weddenschap van 2000 Euro
het mirakel bij AutoCAD release 14 aanschouwen.)
)


Ik heb een gevoelige snaar geraakt met mijn opmerking over jouw volle blonde bos met haar  denk ik  :lol:

laast gemaak eerst geselecteerd werkt altijd
(je moet de volgorde niet verpesten door te kopieren natuurlijk).
met een lisp zou e.a geen probleem moeten zijn
maar 1 voor een selecteren gaat natuurlijk altijd goed.


ps. je offset probleem wordt veroorzaakt door een fout in het windows
register en is over naar een herinstallatie van windows en autocad 14.
(meestal definitief).

Maar dergelijke dingen zijn wel 1 van de redenen waarom ik altijd in het positieven kwadrant teken.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

thomas151283

Aan  HofCAD,

Mijn begrip heb je volledig, want mij hebben ze altijd geleerd dat je iemand moet soigneren wanneer deze persoon jou wil helpen. :wink:

=> HofCAD schreef
T.a.v. het eerste punt:
Om er zeker van te zijn dat altijd al je attributen en in de zelfde volgorde
geselecteerd worden
(en daardoor ook altijd in dezelfde volgorde gevraagd en gepresenteerd
worden in de dialoogboxen van ATTEDIT en EATTEDIT),
zou ik je programma als onderstaand aanpassen.


Dit klopt en werkt volledig!  :vreegoe: Op deze manier wordt alles steeds in de juiste volgorde weergegeven.
Maar kan ik de variabelen e1, e2, e3 en e4 niet gebruiken bij het inserteren van de wblock ????
Want hoe jij het schrijft moet ik mijn attributes 2 maal ingeven. En zoals ergens op deze site te lezen staat: "Je bent lui als je je gemak niet zoekt" vindt ik dit vrij zinloos.

Daarom had ik geprobeerd om deze in te vullen (zie hieronder), maar dan loopt het programma vast!  :(

 (command "insert"      bestandsnaam      lop      "1"      "1"
      "0"      e1      e2      e3      e4      e1      e2
      e3      e4
     )

Wanneer ik evenwel niks invul, dus gewoon commando "insert" lukt het wel! Dit kan toch ook geen kwaad denk ik??? omdat de volgorde van selecteren van de attributes toch bepaald op welke wijze ze moeten ingevuld worden ????

 (command "insert" bestandsnaam lop "1" "1" "0")


Toch bedank ik al enorm hartelijk voor de reeds gedane moeite, en ik hoop met uw (jullie) hulp tot een goed werkend einde te komen

Enne, eigenwijs zijn is geen slechte eigenschap, dat is gewoon een uitdrukking om te tonen dat u karakters hebt! Zelfs eigenwijs zijn moet ge positief bekijken

MVG,
Thomas

HofCAD

Citaat van: thomas151283Aan  HofCAD,

Mijn begrip heb je volledig, want mij hebben ze altijd geleerd dat je iemand moet soigneren wanneer deze persoon jou wil helpen. :wink:

Beste Thomas,

Bedankt voor je ondersteuning, ik heb het ook echt nodig.

Stel dat ik had geschreven:
(setq e1 (getstring "\nGeef de Materiaalsoort op: "))
(setq e2 (getstring "\nGeef de Referentienaam op: "))
(setq e3 (getstring "\nGeef de Hoogte op: "))
(setq e4 (getstring "\nGeef de Breedte op: "))

dan zou je inderdaad
(command "insert" bestandsnaam lop "1" "1" "0" e1 e2 e3 e4 e1 e2 e3 e4)
kunnen gebruiken omdat dan e1, e2, e3 en e4 dan niet meer Entity names
bevat maar Strings.
Dit heb ik niet gedaan, wegens de duidelijkheid.

Dat ik bij het commando INSERT  s1 s2 s3 s4 s1 s2 s3 s4 moet gebruiken,
is door jezelf uitgelokt.
Want je hebt er voor gekozen om bij de attribuutdefinitie VERIFY te
gebruiken, en dan verwacht AutoCAD ook een bevestiging van je invoerwaarden.
Als je inderdaad VERIFY in deze situatie sterk op prijs stelt, en dat wilt
behouden voor het handmatig invoegen(Insert). dan zou ik het slot van
je programma ongeveer als volgt schrijven:

;;; Inserteren wblock
(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 "\nGeef de Hoogte op: "))
(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 "\nGeef de Breedte op: "))
(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" bestandsnaam lop "1" "1" "0" s1 s2 s3 s4 s1 s2 s3 s4)
(command "regen" "all")
(command "zoom" "e")
(princ)
)



Indien je in het begin van je programma inplaats van (setvar "AFLAGS" 4) kiest voor (setvar "AFLAGS" 0),
moet je:
(command "insert" bestandsnaam lop "1" "1" "0" s1 s2 s3 s4)
gebruiken.

Groetjes HofCAD CSI

PS Bart is het een compliment 'Volle blonde bos met haar'?  :lol:
ACADcadabra

bart

Citaat van: HofCAD
PS Bart is het een compliment 'Volle blonde bos met haar'?  :lol:


ja natuurlijk.
ik zelf behoorlijk glad van boven ben uiterst jaloers op je.
:D
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart