Hoi
Ik heb een tekening met verschillende block's met tekstattributen die onderlijnd (%%u) zijn.
Is er een mogelijkheid om deze onderlijning op een snelle manier te verwijderen?
Dus niet handmatig block per block opendoen en telkens deze onderlijning (%%u) wissen.
Alvast Bedankt!
J.
Niet getest, maar kun je niet met FIND, teksten zoeken en vervangen?
Je zou kunnen een lispje schrijven die dit voor u doet...
ik kon het niet laten
onderstaande code als .lsp save, appload en gas geven...
; This routine will take out the underline part of en entity
; until the user break's
; 25.11.2015
(defun c:unout (/ ent str cntr strpart newstr chkstr str cch ch
modtxt txtormtxt dimormtxt seldimt strdimedit el mt selatt)
(setq cntr 10)
(while (> cntr 0)
(progn
(setq ent (nentselp "Select source Text: " ))
(if ent
(progn ;1
(setq str (cdr(assoc 1 (entget (car ent )))))
(setq strPart "" newstr "" chkStr str ;variabelen initialiseren
tailpart "" ) ;extra voor tailprt
(while(/= chkStr "") ;zolang chkstr niet leeg is doe
(setq ch (substr chkstr 1 1) cch (substr chkStr 1 3)) ;Get the last character in the string
(if (/= cch "%%U")
(setq newstr (strcat newstr ch) chkstr (substr chkstr 2) cch (substr chkstr 1 3))
(setq newstr (strcat newstr (substr chkstr 4)) chkstr "")
)
)
(setq str newstr) ;voeg alles weer samen
(setq modtxt ent)
(if modtxt
(progn ;4
(setq txtormtxt (cdr(assoc 0 (entget (car modtxt )))))
(cond ;afvraging
((or (= txtormtxt "TEXT")(= txtormtxt "MTEXT")) ;optie 1 is het text of is het mtext
(progn ;5
(setq dimormtxt (cdr(assoc 42 (entget (car modtxt )))))
(if (/= dimormtxt nil) ;if
(progn ;then 6
(setq seldimt (cdr (assoc -1 (entget (car modtxt )))))
(setq strdimedit (substr str 5 (strlen str)))
(command "dimedit" "n" strdimedit seldimt "")
) ;progn6
(progn ;else 7
(setq el (entget (car modtxt )))
(setq mt (subst (cons 1 str) (assoc 1 EL) EL))
(entmod mt)
) ;progn7
) ;if dimortxt
) ;progn5
) ;cond or optie1
((= txtormtxt "ATTRIB") ;optie 2 is het attrib
(progn ;8
(setq selatt (cdr (assoc -1 (entget (car modtxt ))))) ;naam van de geselecteerde entity
(command "-attedit" "" "" "" "" selatt "v" "r" str "");de waarde in voegen in deze entity
) ;progn8
) ;cond or optie 2
) ;end cond
) ;progn4
) ;if modtxt
) ;progn1
) ;end if ent
) ;progn
) ;while
(princ)
) ;defun
veel plezier
Citaat van: delangstevandestraat op wo 25 11 2015, 13:20:59
ik kon het niet laten
onderstaande code als .lsp save, appload en gas geven...
; This routine will take out the underline part of en entity
; until the user break's
; 25.11.2015
(defun c:unout (/ ent str cntr strpart newstr chkstr str cch ch
modtxt txtormtxt dimormtxt seldimt strdimedit el mt selatt)
(setq cntr 10)
(while (> cntr 0)
(progn
(setq ent (nentselp "Select source Text: " ))
(if ent
(progn ;1
(setq str (cdr(assoc 1 (entget (car ent )))))
(setq strPart "" newstr "" chkStr str ;variabelen initialiseren
tailpart "" ) ;extra voor tailprt
(while(/= chkStr "") ;zolang chkstr niet leeg is doe
(setq ch (substr chkstr 1 1) cch (substr chkStr 1 3)) ;Get the last character in the string
(if (/= cch "%%U")
(setq newstr (strcat newstr ch) chkstr (substr chkstr 2) cch (substr chkstr 1 3))
(setq newstr (strcat newstr (substr chkstr 4)) chkstr "")
)
)
(setq str newstr) ;voeg alles weer samen
(setq modtxt ent)
(if modtxt
(progn ;4
(setq txtormtxt (cdr(assoc 0 (entget (car modtxt )))))
(cond ;afvraging
((or (= txtormtxt "TEXT")(= txtormtxt "MTEXT")) ;optie 1 is het text of is het mtext
(progn ;5
(setq dimormtxt (cdr(assoc 42 (entget (car modtxt )))))
(if (/= dimormtxt nil) ;if
(progn ;then 6
(setq seldimt (cdr (assoc -1 (entget (car modtxt )))))
(setq strdimedit (substr str 5 (strlen str)))
(command "dimedit" "n" strdimedit seldimt "")
) ;progn6
(progn ;else 7
(setq el (entget (car modtxt )))
(setq mt (subst (cons 1 str) (assoc 1 EL) EL))
(entmod mt)
) ;progn7
) ;if dimortxt
) ;progn5
) ;cond or optie1
((= txtormtxt "ATTRIB") ;optie 2 is het attrib
(progn ;8
(setq selatt (cdr (assoc -1 (entget (car modtxt ))))) ;naam van de geselecteerde entity
(command "-attedit" "" "" "" "" selatt "v" "r" str "");de waarde in voegen in deze entity
) ;progn8
) ;cond or optie 2
) ;end cond
) ;progn4
) ;if modtxt
) ;progn1
) ;end if ent
) ;progn
) ;while
(princ)
) ;defun
veel plezier
GOED BEZIG :vreegoe: :vreegoe: :vreegoe: :vreegoe:
@ hulpje: nope, dit werkt enkel voor txt en mtxt, voor zover ik weet...
@ delangstevandestraat: bedankt! al bedoel ik eigenlijk of dit ook mogelijk is in block's waarin de de waarden in het attribuut ook onderlijnt is.
Voorbeeldje in bijlage.
Grts
J.
lap, gepakt in snelheid...
ik ging er van uit dat de U altijd caps was,
en soms is die dus ook geen caps
vandaar deze aanpassing in de eerste IF van het programma,... probeer het anders eens te lezen en te snappen ;-)
kwestie van er allemaal minder blond van te worden ;-))
This routine will take out the underline part of en entity
; until the user break's
; 25.11.2015
(defun c:unout (/ ent str cntr strpart newstr chkstr str cch ch
modtxt txtormtxt dimormtxt seldimt strdimedit el mt selatt)
(setq cntr 10)
(while (> cntr 0)
(progn
(setq ent (nentselp "Select source Text: " ))
(if ent
(progn ;1
(setq str (cdr(assoc 1 (entget (car ent )))))
(setq strPart "" newstr "" chkStr str) ;variabelen initialiseren
(while(/= chkStr "") ;zolang chkstr niet leeg is doe
(setq ch (substr chkstr 1 1) cch (substr chkStr 1 3)) ;Get the character(s)
(if (or (= cch "%%u") (= cch "%%U"))
(setq chkstr (substr chkstr 4))
(setq newstr (strcat newstr ch) chkstr (substr chkstr 2))
)
)
(setq str newstr) ;voeg alles weer samen
(setq modtxt ent)
(if modtxt
(progn ;4
(setq txtormtxt (cdr(assoc 0 (entget (car modtxt )))))
(cond ;afvraging
((or (= txtormtxt "TEXT")(= txtormtxt "MTEXT")) ;text of is het mtext
(progn ;5
(setq dimormtxt (cdr(assoc 42 (entget (car modtxt )))))
(if (/= dimormtxt nil) ;if
(progn ;then 6
(setq seldimt (cdr (assoc -1 (entget (car modtxt )))))
(setq strdimedit (substr str 5 (strlen str)))
(command "dimedit" "n" strdimedit seldimt "")
) ;progn6
(progn ;else 7
(setq el (entget (car modtxt )))
(setq mt (subst (cons 1 str) (assoc 1 EL) EL))
(entmod mt)
) ;progn7
) ;if dimortxt
) ;progn5
) ;cond or optie1
((= txtormtxt "ATTRIB") ;optie 2 is het attrib
(progn ;8
(setq selatt (cdr (assoc -1 (entget (car modtxt ))))) ;naam van de entity
(command "-attedit" "" "" "" "" selatt "v" "r" str ""); waarde in voegen in entity
) ;progn8
) ;cond or optie 2
) ;end cond
) ;progn4
) ;if modtxt
) ;progn1
) ;end if ent
) ;progn
) ;while
(princ)
) ;defun
Beste VDZS,
FIND werkt wel degelijk op blocken, ik heb het ondertussen zelf getest :D
Alleen kun je niet met FIND onderstreepte teksten selecteren :roll:
Inderdaad Hulpje, blijkbaar toch op block's tenzij de att onderlijnd is...maar dat is nu opgelost! :D
Merci delangstevandestraat!! :vreegoe: :vreegoe: :vreegoe: :D
Hoi,
Kan men dit ook uitbreiden dan men de block's kan selecteren met selectiekader?
Thx
J.
zie onderstaande, veel plezier ermee
ik heb ondertussen nog een extra aanpassing gedaan aan het originele programma voor het geval er gedeeltelijke onderlijningen zouden in uw texten zitten bvb azzeardfhkjezr
dan worden deze er allemaal uitgewipt.
zie het gekleurde stuk in de originele code
onderstaande code opslaan als .lsp appload en gas geven
of unoutw.lsp in de suite plaatsen kan ook natuurlijk
; This routine will take out the underline part of en entity
; until the user break's selection method window
; 25.11.2015
(defun c:unoutw (/ ent str ctr cntr strpart newstr chkstr str cch ch olddynmode bl tr
selset modtxt txtormtxt dimormtxt seldimt strdimedit el mt selatt)
(setq cntr 10 ctr 0)
(setq olddynmode (getvar "dynmode"))
(while (> cntr 0)
(progn ;01
(setq bl (getpoint "Window selection\nSelect bottomleft:"))
(setq tr (getpoint bl "Window selection\nSelect topright:"))
(setq selset (ssget "w" bl tr))
(while (< ctr (sslength selset))
(progn ;02
(setq ent (ssname selset ctr) ctr (+ ctr 1))
(if ent
(progn ;1
(setq str (cdr(assoc 1 (entget ent))))
(setq strPart "" newstr "" chkStr str ;variabelen initialiseren
tailpart "" ) ;extra voor tailprt
(while(/= chkStr "") ;zolang chkstr niet leeg is doe
(setq ch (substr chkstr 1 1) cch (substr chkStr 1 3)) ;Get the last character in the string
(if (or (= cch "%%u") (= cch "%%U"))
(setq chkstr (substr chkstr 4))
(setq newstr (strcat newstr ch) chkstr (substr chkstr 2))
)
)
(setq str newstr) ;voeg alles weer samen
(setq modtxt ent)
(if modtxt
(progn ;4
(setq txtormtxt (cdr(assoc 0 (entget modtxt))))
(cond ;afvraging
((or (= txtormtxt "TEXT")(= txtormtxt "MTEXT")) ;optie 1 is het text of is het mtext
(progn ;5
(setq dimormtxt (cdr(assoc 42 (entget modtxt))))
(if (/= dimormtxt nil) ;if
(progn ;then 6
(setq seldimt (cdr (assoc -1 (entget modtxt))))
(setq strdimedit (substr str 5 (strlen str)))
(command "dimedit" "n" strdimedit seldimt "")
) ;progn6
(progn ;else 7
(setq el (entget modtxt))
(setq mt (subst (cons 1 str) (assoc 1 EL) EL))
(entmod mt)
) ;progn7
) ;if dimortxt
) ;progn5
) ;cond or optie1
((= txtormtxt "ATTRIB") ;optie 2 is het attrib
(progn ;8
(setq selatt (cdr (assoc -1 (entget modtxt)))) ;naam van de geselecteerde entity
(command "-attedit" "" "" "" "" selatt "v" "r" str "");de waarde in voegen in deze entity
) ;progn8
) ;cond or optie 2
) ;end cond
) ;progn4
) ;if modtxt
) ;progn1
) ;end if ent
) ;progn02
) ;while ctr
) ;progn01
) ;while cntr
(princ)
) ;defun
Hoi Delangstevandestraat,
alvast merci!
Het werkt perfect bij text. :)
Kan je dit ook uitbreiden naar block's met text attributen, bvb met een crossing window?
Grts,
Jochen
Normaal gezien werkt het ook bij attributen, en ik heb het opgemaakt voor window ik heb iegenlijk niet geprobeerd hoe en of het programma reageert op crossing
Mijn eerste ingeving zou zijn selecteer eens rechts links misschien doet hij het wel ?
of anders de "w" wijzigen in een "c" dan zou het ook moeten lukken denk ik
al vind ik wel dat windows veiliger zijn om een selectie te maken en dan een programma door te jagen...
ik kan zelf nu niet veel tijd in steken want verlof ;-) dat moet ook hé
wordt vervolgd...
@ delangste
Bij attributen werkt het niet.
Ik krijg dan de volgende melding:
command: UNOUTW
Window selection
Select bottomleft:Window selection
Select topright:
Error: bad argument type: stringp nilAutoCAD variable setting rejected: "osmode" nil
Grts,
Jochen