making layer filter

making layer filter

diegolopezsilanes
Advocate Advocate
987 Views
2 Replies
Message 1 of 3

making layer filter

diegolopezsilanes
Advocate
Advocate

Hi, I´m trying to modify a lisp for making layer filters and Im having the following problem :
; error: grupo DXF erróneo: (-3 ("ACAD" (1000 . FN2)))
in english:
; error: wrong DXF group: (-3 ("ACAD" (1000 . FN2)))
thanks

(defun c:ADDLayerFilter ( / dc fn xd )

    

	(setq fn (getstring "\nFilter name: "));set filter name and filter string

	(setq fn2 (strcat "(NAME==\*" fn "*\")" ))

	(setq fn2 (vl-string-subst "" " " fn2))


    
    (if
        (and
            (setq xd
                (cdr
                    (assoc 360
                        (entget
                            (cdr
                                (assoc 330
                                    (entget
                                        (tblobjname "layer" "0")
                                    )
                                )
                            )
                        )
                    )
                )
            )
            (or (setq dc (cdr (assoc -1 (dictsearch xd "ACAD_LAYERFILTERS"))))
                (setq dc
                    (dictadd xd "ACAD_LAYERFILTERS"
                        (entmakex
                           '(
                                (000 . "DICTIONARY")
                                (100 . "AcDbDictionary")
                                (280 . 0)
                                (281 . 1)
                            )
                        )
                    )
                )
            )
            (null (dictsearch dc fn))
        )
        (dictadd dc fn
            (entmakex
                (list
                   '(000 . "XRECORD")
                   '(100 . "AcDbXrecord")
                   '(280 . 1)
                    (cons 1 fn)
                   '(001 . "~*|*")
                   '(001 . "*")
                   '(001 . "*")
                   '(070 . 0)
                   '(001 . "*")
                   '(001 . "*")
                   '(-3
                        (
                            "ACAD"

							(1000 . fn2)

                        )
                    )
                )
            )
        )
    )
    (princ)
)



0 Likes
Accepted solutions (1)
988 Views
2 Replies
Replies (2)
Message 2 of 3

ВeekeeCZ
Consultant
Consultant
Accepted solution

@diegolopezsilanes wrote:

Hi, I´m trying to modify a lisp for making layer filters and Im having the following problem :
; error: grupo DXF erróneo: (-3 ("ACAD" (1000 . FN2)))
in english:
; error: wrong DXF group: (-3 ("ACAD" (1000 . FN2)))
thanks

(defun c:ADDLayerFilter ( / dc fn xd )

    

	(setq fn (getstring "\nFilter name: "));set filter name and filter string

	(setq fn2 (strcat "(NAME==\*" fn "*\")" ))

	(setq fn2 (vl-string-subst "" " " fn2))


    
    (if
        (and
            (setq xd
                (cdr
                    (assoc 360
                        (entget
                            (cdr
                                (assoc 330
                                    (entget
                                        (tblobjname "layer" "0")
                                    )
                                )
                            )
                        )
                    )
                )
            )
            (or (setq dc (cdr (assoc -1 (dictsearch xd "ACAD_LAYERFILTERS"))))
                (setq dc
                    (dictadd xd "ACAD_LAYERFILTERS"
                        (entmakex
                           '(
                                (000 . "DICTIONARY")
                                (100 . "AcDbDictionary")
                                (280 . 0)
                                (281 . 1)
                            )
                        )
                    )
                )
            )
            (null (dictsearch dc fn))
        )
        (dictadd dc fn
            (entmakex
                (list
                   '(000 . "XRECORD")
                   '(100 . "AcDbXrecord")
                   '(280 . 1)
                    (cons 1 fn)
                   '(001 . "~*|*")
                   '(001 . "*")
                   '(001 . "*")
                   '(070 . 0)
                   '(001 . "*")
                   '(001 . "*")
                   (list -3
                        (list
			  "ACAD"
			  (cons 1000 fn2)

                        )
                    )
                )
            )
        )
    )
    (princ)
)

Once you use a variable or a function the list has to be valuated.

'((0 . "MyFilter")) is ok.

'((0 . flt)) fails

(list (cons 0 flt)) is ok.

 

Anyway, whats wrong about using (command "_.-layer" "filter" ...) It's definitely simpler and the speed is not a question since you are not creating filters every minute.

0 Likes
Message 3 of 3

diegolopezsilanes
Advocate
Advocate

thanks beekeecz ur wonderful

0 Likes