Vytisknout stránku | Zavřít okno

výběr bloku v akt. prostoru

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=9232
Datum vytištění: 13.kvě.2026 v 03:29


Téma: výběr bloku v akt. prostoru
Odeslal: Ferdinand
Předmět: výběr bloku v akt. prostoru
Datum odeslání: 09.zář.2009 v 15:58
Ve výkrese mám 2 rozvržení, v každém je vložen po 1 bloku RAZ--T1 (obsahuje atributy). Pro extrakci dat z hodnot atributů chci vybrat 1. blok a to právě v akt. prostoru (většinou je to Layout):
(setq AA (ssget "_X"
(list (cons -4 "<AND")
   (cons 0 "INSERT")
   (cons 2 "RAZ--T*")
   (cons 410 (getvar "ctab"))
   (cons -4 "AND>")
)
)
)
což mi vrací
nil
- nemohu přijít na to, proč, když podmínky jsou splněny? V případě zápisu ve tvaru
(setq AA (ssget "_X" '((-4 . "<AND") (0 . "INSERT") (2 . "RAZ--T*") (410 . (getvar "ctab")) (-4 . "AND>"))))
vrací
; error: bad SSGET list value
- proč?


-------------
-FerTh-



Odpovědi:
Odeslal: alfred
Datum odeslání: 09.zář.2009 v 19:39
nevim, zda se mi to dobre krome toho (getvar "ctab")
Zkuste tam zapsat  primo hodnotu, nebo si to zjistete predem.



Odeslal: Vladimír Michl
Datum odeslání: 09.zář.2009 v 21:45
V tom druhém zápise chybí (cons), ale ten první vypadá snad dobře. Nekomplikoval bych to tím AND - zřetězené podmínky jsou automaticky "and".

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: alfred
Datum odeslání: 10.zář.2009 v 07:07
Zkousel jsem to v MAPu 2006 a prvni moznost funguje. Druha ne.


Odeslal: iand
Datum odeslání: 10.zář.2009 v 09:18
Jakýkoli seznam, tedy i filtrační, lze zapsat dvěma způsoby:
1. pomocí apostrofu, např.
'((0 . "INSERT")(410 . "1")))
2. pomocí klíčového slova 'list', např.
(list (0 . "INSERT")(410 . (getvar "ctab")))
Pokud je byť i jediná hodnota v seznamu proměná nebo výraz, funguje pouze druhý způsob.

-------------
Ivan Anděl
ACAD2004CZ


Odeslal: Vladimír Michl
Datum odeslání: 10.zář.2009 v 09:26
Nikoliv. Symboly "list" a "'" jsou v tomto případě naprosto rovnocenné. Zápis dle druhého způsobu nelze použít (chybí cons) - s LISTem to nijak nesouvisí.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: alfred
Datum odeslání: 10.zář.2009 v 12:07
Původně odeslal(a) Vladimír Michl Vladimír Michl napsal(a):

Nikoliv. Symboly "list" a "'" jsou v tomto případě naprosto rovnocenné. Zápis dle druhého způsobu nelze použít (chybí cons) - s LISTem to nijak nesouvisí.


Neni to tak.
pokud doplnim cons
(cons 410 (getvar "ctab"))

tak samotny tento vyraz mi vrati napr.
(410 . "Model")

pokud je to ale v celem vyrazu
'((-4 . "<AND") (0 . "INSERT") (2 . "RAZ--T*") (cons 410 (getvar "ctab")) (-4 . "AND>"))

vraci to

((-4 . "<AND") (0 . "INSERT") (2 . "RAZ--T*") (CONS 410 (GETVAR "ctab")) (-4 . "AND>"))
 
coz je samozrejme spatne

V listu '() nemohou byt promenne
viz help "As an alternative to using the list function, you can explicitly quote a list with the quote function if there are no variables or undefined items in the list."

Maly priklad:
(setq a 5)
(list 1 a) .......vrati (1 5)
'(1 a)  ...........vrati (1 A)






Odeslal: Vladimír Michl
Datum odeslání: 10.zář.2009 v 12:57
Aha, to je pravda. Zápis:
 
(4 . (getvar "ctab"))
 
je chybný v každém případě (chybí cons), ale použití funkce quote (tedy ') zneplatní i tu cons verzi.


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 15.zář.2009 v 10:03
Takže výrazy
(setq VYB1 (ssget "X" '((0 . "insert"))))
(setq VYB2 (ssget "_X" (list (cons 0 "insert"))))
nejsou jedno a totéž? Mně se ale v obou případech vytvoří stejná (identická) výběrová množina.
 
Ještě něco:
pokud to zapíšu jako 3. způsob tj.
(setq S1
  (entget
    (ssname (ssget "_X" (list (0 . "INSERT") (2 . "RAZ--*") (410 . (getvar "ctab"))))
     0
    )
  )
  )
tak mi to vrátí
; error: bad argument type: consp "INSERT"


-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 15.zář.2009 v 10:30
Jsou "jedno a totéž". Jen v tom prvním nesmí být místo konstanty "insert" použita žádná funkce.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 15.zář.2009 v 11:43

A pokud to přepíšu na

(setq S1
  (entget
    (ssname
      (ssget
        "_X"
        (list (cons 0 "INSERT")
       (cons 2 "RAZ--*")
       (cons 410 (getvar "ctab"))
        )
      )
      0
    )
  )
  )
tak vrací
; error: bad argument type: lselsetp nil
a to i v případě, když dám namísto
       (cons 410 (getvar "ctab"))
       (cons 410 AP)
kde předtím jsem nadefinoval
(setq AP (getvar "ctab"))
 


-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 15.zář.2009 v 13:12
Ten výběrový filtr je asi v pořádku - zřejmě jen není žádná entita, která by mu vyhovovala.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 15.zář.2009 v 13:57
V akt. prostoru (Rozvržení) je 100% přítomen blok s názvem RAZ--T1 anebo RAZ--T1n. Můžete to zkusit na nějaký Vaše 2 bloky, které mají podobný název?
Dále pak zjišťuji zda
(setq i 0)
(while (< i (sslength S1))
 (setq E (ssname S1 i))
 (setq E1 E)
 (while
   (/=
     "SEQEND"
     (cdr (assoc 0 (setq S2 (entget (setq E1 (entnext E1)))))
     )
   )
    (setq PROM (cdr (assoc 2 S2)))
a podle toho se provede další operace
(cond
      ((= PROM "DOCUMENTID")
       (setq JM1 (cdr (assoc 1 S1)))
      )
...
ale s hlášenýma error se nehnu dál...


-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 15.zář.2009 v 14:02
Vyzkoušeno - s výše uvedeným filtrem výběru to funguje normálně (blok musí být skutečně vložen v aktuálním rozvržení).

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 15.zář.2009 v 15:48
Pro upřesnění: se kterým výběrem? S tím posledním?

-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 15.zář.2009 v 15:55
Ano, s tím vaším výběrovým filtrem (odesláno 11:43):
http://www.cadforum.cz/forum/forum_posts.asp?TID=9232&PID=46515#46515 - http://www.cadforum.cz/forum/forum_posts.asp?TID=9232&PID=46515#46515


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)



Vytisknout stránku | Zavřít okno