FastFiber

tblsearch alleen in layout (OPGELOST)

Gestart door kruid76, wo 15 03 2017, 12:42:21

Vorige topic - Volgende topic

kruid76

Goedemiddag,

Ik ben mij aan het verdiepen in lisp en probeer een lisp te maken die print aan de hand van een block name.
een A3 kader heet A3-kader en een A4 kader heet A4-kader.
Aan de hand van de block name kan ik uitlezen wel formaat ik moet printen.
Nu is het geval dat een A4 tekening ge-xrefed word in een A3 tekening.
Zodoende vind ik met tblsearch "block" 2 blokken.
Echter, ik wil alleen het block vinden die in de layout staat.
Hoe doe ik dit?

roy_043

Misschien dit:
(if
  (and
    (setq ss (ssget "_X" '((2 . "A*-kader"))))
    (= 1 (sslength ss))
  )
  (cdr (assoc 2 (entget (ssname ss 0))))
)

kruid76

Ik Heb nu dit:

(setq Border-block-A3 "A3-kader")
(setq Border_A3 (tblsearch "block" Border-block-A3))
(if Border_A3
   ((lambda (BlockName)(setq Papier-size "A3" ) (setq orientation "Landscape" )
      (if (setq ss1 (ssget "_X" (list '(0 . "INSERT") (cons 2 BlockName))))
         (setq Bordersize (* 1 (setq scale (cdr (assoc 41 (entget (ssname ss1 0)))))))
      )
    )
      Border-block-A3
   )
)


Dit werkt goed, totdat hij in mijn lisp het A4 kader later vind. Dat zet hij alle instellingen voor het A4 formaat.
Nu is dit een hoop jat werk, daar ik niet sterk ben met lisp.

Misschien ben ik op de verkeerde plek voor wat uitleg, maar ik probeer het toch.
Wat doet jou stukje precies?
Je zet met setq SS in het geheugen en daarna zie ik een paar keer SS terug komen..


EddyBeerke

Kijk eens hier:
http://www.cadsite.be/smf/index.php?topic=3954.msg20514#msg20514

Als je de routine aanpast kun je bv maken dat per layout alle objecten geselecteerd worden zoals je doet in acad... "Select" "all" i.p.v. (ssget "_X"...
Voorwaarde is dat je natuurlijk maar 1 kader in je layout hebt
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

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

roy_043

@kruid76:
Je kunt zeker uitleg vragen. Maar vergeet niet om ook de gekende bronnen (bijv. deze en deze) te bestuderen.

(if
  (and
    (setq ss (ssget "_X" '((2 . "A*-kader")))) ; Selectie set van alle "A*-kader" inserts in de tekening.
    (= 1 (sslength ss))                        ; Controleer of de set maar 1 element bevat.
  )
  (progn
    (setq elst (entget (ssname ss 0)))         ; Entitylijst van de insert.
    (setq name (cdr (assoc 2 elst)))           ; Blocknaam.
    (setq scale (cdr (assoc 41 elst)))         ; X-schaal.
    (cond
      ((= "A4-KADER" (strcase name))
        (setq papier-size "A4")
        (setq orientation "Portrait")
      )
      ((= "A3-KADER" (strcase name))
        (setq papier-size "A3" )
        (setq orientation "Landscape")
      )
    )
  )
)

kruid76

Bedankt voor de uitleg. Mocht ik weer wat ruimer in de tijd zitten, dan zal ik proberen dit erin te zetten.

FastFiber