FastFiber

OPGELOST multiple text filter

Gestart door designer68, za 07 05 2011, 13:01:40

Vorige topic - Volgende topic

designer68

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.

designer68

Had al een beetje het vermoeden dat dit wel eens niet tot de mogelijkheden kon behoren.



EddyBeerke

Dit kun je maken met bv lisp, .NET of vba
Wat je ook kunt gebruiken is FILTER
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

designer68

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?


H@rm

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
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

designer68

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

EddyBeerke

#6
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
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

designer68

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)
)

roy_043

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")
               )
            )

EddyBeerke

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
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

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)
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

designer68

#11
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")
   )


EddyBeerke

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")
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

designer68

#13
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

EddyBeerke

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

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

yoin