CADsite forum

AutoCAD => Autolisp => Topic gestart door: Reimer op wo 13 08 2008, 11:16:38

Titel: Attribuut invullen met lisp (opgelost)
Bericht door: Reimer op wo 13 08 2008, 11:16:38
Ik wil graag met een lisproute twee attributen van mijn tekenhoofd aanpassen. Dit gaat echter nog niet erg makkelijk.
Ik gebruik al een lispje waarin ik met -ATTEDIT het attribuut bewerk (one at the time). Het probleem is dat ik het attribuut moet selecteren. Op zich is dit niet zo'n probleem, het attribuut staat altijd op dezelfde plek. Echter het attribuut is niet altijd ingevuld, dan kan ik ook niks selecteren.
Een andere manier is om het attribuut te omschrijven (more than one at the time). Nu is echter het probleem dat ik de bestaande inhoud van het attribuut moet kennen om deze te kunnen overschrijven, anders wordt er alleen tekst toegevoegd aan het attribuut.

Mijn vraag aan jullie is concreet:
Hoe kan ik geautomatiseerd een attribuut in mijn tekenhoofd overschrijven met een vaste waarde?

Het blok heet: Hoofd
het 1e te wijzigen attribuut heeft de tag: Status
het 2e te wijzigen attribuut heeft de tag: Uitgave

Waarschijnlijk is de oplossing om eerst de inhoud van het attribuut op te vragen en deze te gebruiken bij het overschrijven. Het is mij nog niet gelukt om dit te doen.

Groeten,
Reimer.
Titel: Re: Attribuut invullen met lisp
Bericht door: EddyBeerke op do 14 08 2008, 12:05:43
Ik heb hiervoor iets gemaakt en dat staat hier:
http://www.cadsite.be/smf/index.php/topic,2707.msg13868.html#msg13868 (http://www.cadsite.be/smf/index.php/topic,2707.msg13868.html#msg13868)
Je moet alleen nog zorgen dat de juiste var. de juiste string krijgt
Titel: Re: Attribuut invullen met lisp
Bericht door: Reimer op do 14 08 2008, 12:50:32
Ik had jouw code al eens bekeken.
  (command "-attedit"
   "n"
   "n"
   "Block_naam";;; Naan van het block
   "Tag_naam";;; Naam van de Tag
   "";;; ??? <<-- Deze "" laten staan-->>
   "";;; <<-- Als er niets vervangen moet worden alleen "" laten staan -->>
   "Tekst in de atrr" ;;; Tekt wat in de attr. moet komen
  )


Ik had dit ook al geprobeerd, het probleem is echter dat ik WEL tekst moet vervangen. Deze tekst kan echter elke keer weer anders zijn.

Reimer.
Titel: Re: Attribuut invullen met lisp
Bericht door: EddyBeerke op ma 18 08 2008, 12:59:15
Citaat van: Reimer op do 14 08 2008, 12:50:32
Ik had jouw code al eens bekeken.
...
Ik had dit ook al geprobeerd, het probleem is echter dat ik WEL tekst moet vervangen. Deze tekst kan echter elke keer weer anders zijn.

Reimer.

Misschien dit in VBA proberen?

Sub EditAttribute()

Dim Obj As AcadEntity, ATT, T As Long, PP
  PP = InputBox("")
  On Error Resume Next
  For Each Obj In ThisDrawing.ModelSpace ' of .PaperSpace
    If Err Or Not Obj.HasAttributes Then Exit Sub
    ATT = Obj.GetAttributes
    For T = 0 To UBound(ATT)
    Debug.Print ATT(T).TagString
      If ATT(T).TagString = "Testtag" Then
      ATT(T).TextString = PP '"Test is goed"
      End If
    Next
  Next
Update
   
End Sub
Titel: Re: Attribuut invullen met lisp
Bericht door: Reimer op di 19 08 2008, 08:33:54
Beste EddyBeerke,

bedankt voor je reactie. Helaas ben ik niet thuis in VBA. Daarbij wil ik het bewerken van een attribuut graag verwerken in een andere lisproutine om mijn tekening definitief te maken. Gelukkig ben ik er inmiddels wel uit. Ik vond een andere op AUGI. Het koste me wat tijd om deze te snappen, maar het resultaat is naar wens.

(defun c:md ()
(setq BS (ssget "c" '(0 0) '(-210 297)  '((0 . "insert") (2 . "BWO_dyn_hoofd"))))
(SETQ NEASLAN "TV/TT/TA/TI")
(SETQ NOFNU (CONS 1 "Definitief"))
(SETQ NE (SSNAME BS 0))
(SETQ LP2 1)
(WHILE LP2
  (SETQ NE (ENTNEXT NE))
  (SETQ NEL (ENTGET NE))
  (SETQ NEAET (CDR (ASSOC 0 NEL)))
  (SETQ NEA (CDR (ASSOC 2 NEL)))
  (IF (= NEA NEASLAN)
   (PROGN
    (SETQ OFNU (ASSOC 1 NEL))
    (SETQ NNEL (SUBST NOFNU OFNU NEL))
    (ENTMOD NNEL)
  ))
  (IF (= NEAET "SEQEND") (SETQ LP2 NIL))
)
)


Groeten,
Reimer
Titel: Re: Attribuut invullen met lisp (opgelost)
Bericht door: Petperm op di 09 09 2008, 15:15:02
Reimer
Is 'Gatte' hiervoor niet geschikt?
Petperm
Titel: Re: Attribuut invullen met lisp (opgelost)
Bericht door: Reimer op di 09 09 2008, 15:20:01
Een beetje meer toelichting is welkom  :wink:
Ik kan het nu niet proberen. Wat doet Gatte en hoe pas ik het toe?

Reimer.
Titel: Re: Attribuut invullen met lisp (opgelost)
Bericht door: Petperm op wo 10 09 2008, 20:57:35
Wel 'Gatte' is een fuctie uit de express tools. 

Uit de helpfile van deze tools:

GATTE
--------------------------------------------------------------------------------
Globally changes attribute values for all insertions of a specific block.
Command: GATTE
Select block or attribute [Block name]: Use an object selection method, or enter B for the block name
Known tag names for block: MDLN.
Select attribute or type attribute name: Use an object selection method or enter the attribute tag name
Number of inserts in drawing = 2 Process all of them? [Yes/No] <Yes>: If no, select the block inserts to process
----------------------------------------------------------------------------------

Als ik de attribute 'revision' in alle blocks 'kader' die in mijn layouts staan moet verhogen is dit voor mij een goede functie.
Het wordt dan bijvoorbeeld op de commandline: Gatte;B;kader;revision;"AsBuilt";
Of dit iets is voor jou, is natuurlijk wel een ander paar mouwen?
PetPerm