kan ik op basis van diverse text values de tekst die ik in een excel blad heb staan in 1 keer opzoeken in mijn tekening (selecteren) zodat ik zze kan omkleuren?
de nummers staan als tekst in mijn tekening, in excel heb ik een groot gedeelte van deze nummers staan die ik in 1 keer wil selecteren in de tekening om ze om te kleuren.
Mogen alleen de nummers zijn nl. die in mijn excel blad voorkomen.
Had al een beetje het vermoeden dat dit wel eens niet tot de mogelijkheden kon behoren.
Dit kun je maken met bv lisp, .NET of vba
Wat je ook kunt gebruiken is FILTER
Eddy.
Naar mij idee kan ik in filter geen verzameling met nummers ingeven maar alleen maar enkele.
Bestaat er al een lisp voor of vba?
Vincent,
als ik het goed begrijp zijn het unieke nummers die in excel staan. Die komen voor in je tekening. Dan staan er ook nog nummers in je tekening die niet in je excel list voorkomen.
Dan moet het toch niet zo moeilijk zijn om de waarde uit je excel lijst te lezen en deze op te zoeken in je tekening. Als je die hebt gevonden dan kan je er weer van alles mee doen.
Op dit moment beschik ik niet over de mogelijheid om iets van lisp aan te bieden. Maar heel moeilijk hoeft het dan toch niet meer te zijn.
Michel
Hallo
Dit is precies de bedoeling.
Helaas kan ik niet zelf lisp routines maken , maar dit is wel de tool die ik zoek.
Groet, Jan-pieter
Als je de waardes uit excel kunt halen en in een variabele kunt stoppen (in FILTER)
Heb je misschien hier wel wat aan:
(defun c:textcolor (/ sset e o i a filter )
(vl-load-com)
(setq sset (ssget)
i 0
filter (list "NUM1" "NUM2" "NUM3" "NUM4")
)
(repeat (sslength sset)
(setq e (ssname sset i)
i (1+ i)
)
(setq o (vlax-ename->vla-object e))
(if (= (vla-get-ObjectName o) "AcDbText")
(progn
(setq a (vla-get-textstring o))
(if (= (member a filter))
(vla-put-color o 2) ;(vla-put-layer o "LAAGNAAM")
)
)
)
)
(princ)
)
Bij het stukje code "filter (list "NUM1" "NUM2" "NUM3" "NUM4")" moet je dan zorgen dat de waardes uit excel komen.
Bij "(vla-put-color o 2)" geef ik de kleur "2" aan (geel).
Mijn voorkeur is dat er "ByLayer" getekend wordt dus je zou dit kunnen veranderen in:
(vla-put-layer o "LAAGNAAM")
PS:
Commando: textcolor
Zoals hij nu is werkt hij nog niet bij mij.
Hij kleurt alle text groen.
Kan jij zien wat er aan schort?
(defun c:textcolor (/ sset e o i a filter )
(vl-load-com)
(setq sset (ssget)
i 0
filter (list "65_344" "65_332" "65_347" "65_569")
)
(repeat (sslength sset)
(setq e (ssname sset i)
i (1+ i)
)
(setq o (vlax-ename->vla-object e))
(if (= (vla-get-ObjectName o) "AcDbText")
(progn
(setq a (vla-get-textstring o))
(if (= (member a filter))
(vla-put-color o 3) ;(vla-put-layer o "Putnummer_Gemengd")
)
)
)
)
(princ)
)
Vervang:
(if (= (member a filter))
(vla-put-color o 3) ;(vla-put-layer o "Putnummer_Gemengd")
)
Door:
(if (member a filter)
(progn
(vla-put-color o 3)
(vla-put-layer o "Putnummer_Gemengd")
)
)
Citaat van: designer68 op di 10 05 2011, 12:12:23
Zoals hij nu is werkt hij nog niet bij mij.
Hij kleurt alle text groen.
Kan jij zien wat er aan schort?
...
(vla-put-color o 3) ;(vla-put-layer o "Putnummer_Gemengd")
...
Ja, je geeft als kleur "3" op, dit is de groene kleur.
1 = red
2 = Yellow
3 = Green
enz.
Als je "ByLayer" wilt kan dat ook, vervan dan (vla-put-color o 3) door:
(vla-put-color o 256) ; 256 = ByLayer
Citaat van: roy_043 op di 10 05 2011, 12:22:49
(if (member a filter)
(progn
(vla-put-color o 3)
(vla-put-layer o "Putnummer_Gemengd")
)
)
Als je dit doet dan krijg je de tekst in laag: Putnummer_Gemengd
Maar ook de kleur van de tekst wordt nummer 3 = groen
Ik gaf aan dat je beter alleen de "vla-put-layer" kunt gebruiken.
Als je dat doet wil je het waarschijnlijk ook bylayer: (vla-put-color o 256)
Eddy,
dit klopt, maar hij filtert niet op de text value en die voeg ik in tussen de " "
doe ik iets verkeerd dan?
(defun c:textcolor (/ sset e o i a filter )
(vl-load-com)
(setq sset (ssget)
i 0
filter (list "65_344" "65_332" "65_347" "65_569")
)
Citaat van: designer68 op di 10 05 2011, 13:17:52
Eddy,
dit klopt, maar hij filtert niet op de text value en die voeg ik in tussen de " "
doe ik iets verkeerd dan?
...
Misschien zijn het mtexten?
(if (= (vla-get-ObjectName o) " AcDbMText")
Nee het zijn gewone teksten, geen mtekxten.
Ik stoei er wel even mee.
Lukt het jou wel als je een paar getallen probeert te filteren?
Hierbij mijn foutmelding
Command: _appload textcolor.lsp successfully loaded.
Command: ; error: malformed list on input
groet, Jan-Pieter
Citaat van: designer68 op di 10 05 2011, 13:47:34
...
Command: ; error: malformed list on input
...
Er is inderdaad iets niet in orde met jou versie.
Maar bij de mijne was er ook nog iets niet goed.
Ik heb nog een en ander verandert zodat je alleen dtexs en mtext selecteerd:
;;;====================================================;
;;; Filter op tekst(value) in var "filter" ;
;;; Indien gevonden verander de color en layer ;
;;;====================================================;
(defun c:textcolor (/ sset e o i a filter )
(vl-load-com)
(setq sset (ssget '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>")))
i 0
filter (list "65_344" "65_332" "65_347" "65_569")
)
(repeat (sslength sset)
(setq e (ssname sset i)
i (1+ i)
)
(setq o (vlax-ename->vla-object e))
(setq a (vla-get-textstring o))
(if (member a filter)
(progn
(vla-put-color o 256) ; 256 = ByLayer
(vla-put-layer o "Putnummer_Gemengd")
(vla-update o)
)
)
)
(princ)
) ;_end defun
Hallo
Allereerst erg bedankt voor je inzet.
Helaas pakt hij alle teksten die hij tegenkomt in het geselecteerde gebied, en niet alleen de enige die ik in de routine heb ingevuld.
Bij mij, met mijn laatste versie, werkt het ook met de filter op dtext en mtext, en laat andere teksten mat rust.
Citaat van: EddyBeerke op di 10 05 2011, 14:51:51
Bij mij, met mijn laatste versie, werkt het ook met de filter op dtext en mtext, en laat andere teksten mat rust.
Akkoord maar pakt hij dan ook puur degetallen die je als value in de lisp zet? Ik gebruikte map3d 2011 en daar negeerde hij de vier getallen die ik had ingevul en selecteerde alles
Ik zou niet weten wat er dan fout gaat in Acad 2011 map3d.
Misschien dat iemand anders er naar kan kijken, daarbij denk ik aan onze grote vriend HofCAD.
Ik gebruik Acad 2010.
Het programma van Eddy selecteert alle getallen maar alleen de getallen in het filter worden vervolgens bewerkt. Werkt i.i.g. prima in BC11.
Als je wilt dat het getallenfilter al bij de selectie werkt dan kun je deze versie proberen:
(defun c:textcolor (/ sset o i a filter )
(vl-load-com)
(setq filter (list "65_344" "65_332" "65_347" "65_569"))
(setq filter
(strcat
(car filter)
(apply
'strcat
(mapcar
'(lambda (a) (strcat "," a))
(cdr filter)
)
)
)
)
(if (setq sset (ssget (list '(0 . "MTEXT,TEXT") (cons 1 filter))))
(progn
(setq i 0)
(repeat (sslength sset)
(setq o (vlax-ename->vla-object (ssname sset i)))
(setq i (1+ i))
(vla-put-color o 256) ; 256 = ByLayer
(vla-put-layer o "Putnummer_Gemengd")
(vla-update o)
)
)
)
(princ)
)
Heel erg bedankt,
Ik deed het zelf verkeerd hoor.
Ik had de laagnaam niet, dacht dat hij deze aan zou maken, maar die moet bestaan en dan gooit hij hem erin.
Sorry. Zeer content met de routine.
Jan-Pieter
Het ligt aan de programmeerder...;)
Ik heb het niet foolproof gemaakt.
Dus zonder controle of de laag bestaat of deze aan te maken.
Citaat van: EddyBeerke op di 10 05 2011, 18:36:17
Ik heb het niet fooproof gemaakt.
Beste Eddy,
Ik snap het niet, want volgens http://www.spod-central.org/~psmith/nh/abbr-343.txt:
'fooproof' means 'rustproof or fireproof or corrodeproof or rotproof'.
Je weet het, ik ben blond :oops: en dus heb ik van alles geprobeerd om je programma
te laten roesten, in de fik te steken, te laten corroderen of te laten rotten.
Dat lukte mij niet, en dus is je programma best goed. :pintje:
Met vriendelijke groet, HofCAD CSI.
Citaat van: HofCAD op di 10 05 2011, 20:37:33
Beste Eddy,
Ik snap het niet, want volgens http://www.spod-central.org/~psmith/nh/abbr-343.txt:
'fooproof' means 'rustproof or fireproof or corrodeproof or rotproof'.
Je weet het, ik ben blond :oops: en dus heb ik van alles geprobeerd om je programma
te laten roesten, in de fik te steken, te laten corroderen of te laten rotten.
Dat lukte mij niet, en dus is je programma best goed. :pintje:
Met vriendelijke groet, HofCAD CSI.
Bedankt jij ook een... :pintje:
Ik bedoelde dus: (http://nl.wikipedia.org/wiki/Foolproof)
CiteerFoolproof
De uitdrukkingen foolproof, idiot proof en monkey proof zijn goeddeels onderling uitwisselbare termen die allen uit het Engels zijn afgeleid en zoveel betekenen als "bestand tegen dom of foutief gebruik" of "zo simpel te bedienen dat een idioot het kan".
Bedankt allemaal
Ik vindt het maar knap hoor zoals jullie met routines kunnen werken.