FastFiber

Field in tekeningkader

Gestart door Rudy, ma 11 04 2011, 09:18:54

Vorige topic - Volgende topic

Rudy

Citaat van: bart op wo 13 04 2011, 13:17:07
Merk even op dat het projectnummer ook in de tekening naam terug komt dit maakt de naam unniek
zodat het mogelijk is windows de tekening te laten zoeken
Het komt namelijk af en toe voor dat deze per ongeluk in de verkeerde map wordt weggeschreven :mrgreen:
Geen slecht idee Bart :vreegoe:
Maar hier bij ons zijn de tekeningen zo niet genummerd en het zijn er intussen al te veel om alles te hernummeren :|
Autocad 2013 / 2016

Rudy

Citaat van: EddyBeerke op ma 11 04 2011, 13:21:20
Je zou kunnen overwegen om dit field los van het kader in de template op te nemen.
Of net als een block in de tekening te zetten (uit je bibliotheek van blockjes) en dan exploderen wanneer dat nodig is.
Ik denk dat ik voor de oplossing van Eddy ga :!:
Autocad 2013 / 2016

Rudy

Citaat van: Rudy op ma 11 04 2011, 09:18:54
Om onze tekeningen vlugger terug te vinden nadat ze geplot zijn, hebben we in het block van de tekeningkaders (A0,A1, A2...) een FIELD in de rand met PATH and FILENAAM geplaatst en dit werkt perfect.
Het probleem is nu echter wanneer we de tekening verplaatsen of doorzenden naar leverancier dan wordt dit PATH gewijzigd en vooral voor de leveranciers is dit een probleem wanneer er vragen zijn over de tekening.
Dan kan hij nl het juiste PATH niet doorgeven.
Is er een mogelijkheid om een FIELD te blokeren eens het geplaatst is?
Opmerking: Het FIELD zit dus wel in een BLOCK.

Graag was ik hier nog even op verder gegaan misschien is er iemand met een ander idee :mrgreen:
Autocad 2013 / 2016

Reimer

De tekening of de computer niet kan bepalen wanneer jij wilt dat de tekst vast komt te staan. Je zult dus altijd zelf een actie moeten ondernemen om de tekst vast te zetten. Hier zijn vele mogelijkheden voor, zoals hiervoor al beschreven. De vraag is alleen wat jij de makkelijkste vindt. Er is vast wel een manier te bedenken om de inhoud van het field te copieren en als vaste tekst in het attribuut terug te plaatsen. Je kunt dan echter net zo goed kiezen voor het plaatsen en exploderen van een los blokje of het invoegen van een tekst via VBA of Lisp.
Aan jou de keuze zou ik zeggen.

Reimer

roy_043

Als er een duidelijk te omschrijven verschil is tussen de mappen waarin de bestandsnaam moet worden aangepast en de mappen waarin dit niet mag gebeuren dat moet dit met een lisp en een gewoon block attribute te doen zijn. Deze lisp kan dan m.b.v. acaddoc.lsp automatisch worden geladen en opgestart.

Bijvoorbeeld:
D:\Proj1\Definitief\1a.dwg => aanpassen
D:\Proj1\Backup\1a-20110405.dwg => niet aanpassen

Rudy

Citaat van: roy_043 op zo 17 04 2011, 17:35:40
Als er een duidelijk te omschrijven verschil is tussen de mappen waarin de bestandsnaam moet worden aangepast en de mappen waarin dit niet mag gebeuren dat moet dit met een lisp en een gewoon block attribute te doen zijn. Deze lisp kan dan m.b.v. acaddoc.lsp automatisch worden geladen en opgestart.

Bijvoorbeeld:
D:\Proj1\Definitief\1a.dwg => aanpassen
D:\Proj1\Backup\1a-20110405.dwg => niet aanpassen

Ikzelf heb niet zoveel verstand van VBA of lisp.
Is het mogelijk om zo een toepassing te schrijven?
Autocad 2013 / 2016

roy_043

Zo'n toepassing is te schrijven. Maar wat is het verschil tussen de mappen waarin de actie wel moet plaatsvinden en de mappen waarin de actie niet moet plaatsvinden?

Rudy

Citaat van: roy_043 op ma 18 04 2011, 09:00:19
Zo'n toepassing is te schrijven. Maar wat is het verschil tussen de mappen waarin de actie wel moet plaatsvinden en de mappen waarin de actie niet moet plaatsvinden?
Onze tekeningen worden weg geschreven onder volgende map "W:\Klanten\..." vervolgens komt er een "map" met klant en een "map" met het bestelnummer die dan nog eens opgedeeld word in "mappen" met samenstellingstekeningen en mappen met detailtekeningen
Kan hier iets mee aangevangen worden?
Autocad 2013 / 2016

roy_043

Dus als ik het goed begrijp moet in alle tekeningen in de map W:\Klanten\ de update actie worden uitgevoerd?

Rudy

Citaat van: roy_043 op ma 18 04 2011, 09:45:39
Dus als ik het goed begrijp moet in alle tekeningen in de map W:\Klanten\ de update actie worden uitgevoerd?
Indien mogelijk, ja.
Autocad 2013 / 2016

roy_043

Plaats het onderstaande in acaddoc.lsp en pas de waardes blkName en attTag (regels twee en drie) aan:

(defun UpdateDwgFileString ( / attTag blkName dwgMatchStr dwgName)
  (setq blkName "Onderhoek*")         ; Hier de blocknaam invullen. De ingevulde waarde, "Onderhoek*", werkt voor alle blocknamen die beginnen met "Onderhoek".
  (setq attTag "Bestandsnaam")        ; Hier de attribute tag invullen.
  (setq dwgMatchStr "W:\\Klanten\\*") ; Hier de juiste match-string invullen
  (if (wcmatch (strcase (setq dwgName (strcat (getvar 'dwgprefix) (getvar 'dwgname)))) (strcase dwgMatchStr))
    (mapcar
      '(lambda (a / elist)
        (if (not (member (cons 1 dwgName) (setq elist (kg:InsertEname->AttribElist a attTag))))
          (progn
            (entmod
              (subst
                (cons 1 dwgName)
                (assoc 1 elist)
                elist
              )
            )
            (princ "\nFile attribuut gewijzigd. ")
          )
        )
      )
      (kg:Pickset->EnameList (ssget "_X" (list '(0 . "INSERT") (cons 2 blkName) '(66 . 1))))
    )
  )
  (princ)
)

(defun kg:InsertEname->AttribElist (ename attTag / elist tagCorrectP)
  (while
    (and
      (setq ename (entnext ename))
      (setq elist (entget ename))
      (= (cdr (assoc 0 elist)) "ATTRIB")
      (not (setq tagCorrectP (= (strcase (cdr (assoc 2 elist))) (strcase attTag))))
    )
  )
  (if tagCorrectP elist)
)

(defun kg:Pickset->EnameList (ss / i result)
  (if ss
    (repeat (setq i (sslength ss))
      (setq result (cons (ssname ss (setq i (1- i))) result))
    )
  )
)

(UpdateDwgFileString)

Laat even weten of het werkt.

Rudy

Roy,

Dank voor het voorstel en de geleverde inspanning.
Maar ik denk dat ik de werkwijze hier niet zo goed begrijp. :roll:
Is het zo dat ik van het field in mijn kaderblokken een attribute moet maken?
Als dit  zo is moet ik al mijn bestaande tekeningen gaan wijzigen en daar wil ik echt niet aan beginnen.
Is het niet mogelijk om met een lisp het tekstfield in het block te selecteren en dit dan om te zetten in tekst?
Ik weet het, misschien zie ik het allemaal een beetje te simplistisch en gaat het helemaal niet wat ik hier wil. :twisted:
In ieder geval plaats ik in bijlage een kader met tekstfield wat ik dan steed inserteer als een block.
Sorry voor de last.
Autocad 2013 / 2016

bart

@Rudy probeer het gewoon een keer.

De lisp van roy update automatisch je atribute en vervang de waarde door tekst
elke keer dat de tekening binnen julie bedrijf wordt geopend door een user die de code in zijn acaddoc.lsp heeft staan
ook als hier een field stond.
Je hoeft er dus niets voor aan te passen in de tekening

je moet er overigens wel voor zorgen dat onder options-> system het vinkje voor load acad.lsp whit every drawing aan staat bij deze methode
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Rudy

Citaat van: bart op di 19 04 2011, 10:40:27
@Rudy probeer het gewoon een keer.

De lisp van roy update automatisch je atribute en vervang de waarde door tekst
elke keer dat de tekening binnen julie bedrijf wordt geopend door een user die de code in zijn acaddoc.lsp heeft staan
ook als hier een field stond.
Je hoeft er dus niets voor aan te passen in de tekening

je moet er overigens wel voor zorgen dat onder options-> system het vinkje voor load acad.lsp whit every drawing aan staat bij deze methode
Akkoord Bart, maar in mijn kader bevind zich geen attribute...
Er is enkel het field.
Autocad 2013 / 2016

Reimer

Alleen een field kan niet. Een field kun je gebruiken in teksten of in een attribuut. Staat hij bij jouw in een (m)text in het hoofd?

@bart; Roy_43 stelde voor om de lisp in acaddoc.lsp te stoppen. Deze wordt bij iedere tekening geladen. Je hoeft dan toch niet aan te geven dat je acad.lsp in iedere tekening wilt laden?

Reimer

yoin