Vytisknout stránku | Zavřít okno

Skript pro výběr více bloků a jejich smazání

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=4944
Datum vytištění: 13.čer.2026 v 15:19


Téma: Skript pro výběr více bloků a jejich smazání
Odeslal: PepaR
Předmět: Skript pro výběr více bloků a jejich smazání
Datum odeslání: 30.čvc.2007 v 15:13
Dobrý den,
 
potřebuji zapsat do skriptu sekvenci, která vybere blok A, blok B, blok C vymaže je a vyčistí výkres na bloky. Nejsem bohužel u AutoCADu a neznám nazpamět klíčová slova, pomůže někdo prosím?
 
Předem děkuji


-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz



Odpovědi:
Odeslal: Ferdinand
Datum odeslání: 31.čvc.2007 v 13:51
;;vyber vsech Bloku s nazvem AAA v hl. HL :
(setq QS1 (ssget "X" '((0 . "insert") (2 . "AAA") (8 . "HL"))))
;;vyber dvou Bloku - A, B :
(setq QS6  (ssget "X" '((0 . "INSERT")  (-4 . "<OR")(2 . "A*")(2 . "B*")(-4 . "OR>")  ) ))
;;vymaz Bloku A, B :
(command "_erase" QS6 "")
;;vycisteni Vykresu od Bloku A, B :
(command "_-purge" "_B" "" "_N")
 


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


Odeslal: Vladimír Michl
Datum odeslání: 31.čvc.2007 v 14:16
Původně odeslal(a) Ferdinand Ferdinand napsal(a):

;;vyber dvou Bloku - A, B :
(setq QS6  (ssget "X" '((0 . "INSERT")  (-4 . "<OR")(2 . "A*")(2 . "B*")(-4 . "OR>")  ) ))

Lépe:
(setq QS1 (ssget "_X" '((0 . "INSERT") (2 . "A*,B*"))))



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


Odeslal: PepaR
Datum odeslání: 31.čvc.2007 v 14:19
Děkuji mnohokráte.

-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz


Odeslal: PepaR
Datum odeslání: 01.srp.2007 v 07:20
Stále laboruji s tou výběrovou množinou, kdy mi to hlásí:
 
Příkaz: cisti_vn
; chyba: chybný typ argumentu: stringp <Selection set: 32>
 
Pomůžete prosím?
 
[QUOTE=cisti_vn.lsp]
(defun c:cisti_vn ( / sezn_soub sez_togg sez_eb p_s CR I adr_es co_cistit KONEC
   vychozi_adresar)
 
****************************
(setq vychozi_adresar "c:/" )
****************************
 
(defun scri_pt ( / Pis_demo I )
 
(setvar "FILEDIA" 0)
 
(setq p_atr (cdr (nth 0 sez_eb)))
(setq Pis_demo (open (strcat adr_es "cisti_vn.scr") "w")) 
(write-line (setq QS1 (ssget "_X" '((0 . "INSERT") (2 . "Podpis_*,Remes")))) Pis_demo) 
(write-line (strcat "_erase" QS1 "") Pis_demo)
(write-line (strcat "_purge " co_cistit " * _n" ) Pis_demo)
(write-line "_qsave" Pis_demo)
 
(setq I 1)
(repeat (- (length sezn_soub) 1)
 
    (if (= (cdr (nth I sez_togg)) "1") 
  (progn
  (write-line (strcat "_open \"" adr_es (car (nth I sez_eb)) "\"") Pis_demo)
    (write-line (setq QS1 (ssget "_X" '((0 . "INSERT") (2 . "Podpis_*,Remes")))) Pis_demo) 
    (write-line (strcat "_erase" QS1 "") Pis_demo)
  (write-line (strcat "_purge " co_cistit " * _n" ) Pis_demo)
  (write-line "_qsave" Pis_demo)
       (if (> (atoi(substr(getvar "ACADVER") 2 1)) 4)
      (write-line "_close" Pis_demo)
         )
        )
 
      )
 (setq I (+ 1 I))
)
 
(write-line "_new " Pis_demo)
(write-line "FILEDIA 1 " Pis_demo)
(write-line "" Pis_demo)
 
(close Pis_demo)
 
(command "_script" (strcat adr_es "cisti_vn.scr"))
 
);defun
[\QUOTE]


-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz


Odeslal: Vladimír Michl
Datum odeslání: 01.srp.2007 v 10:15
Aha, to je principiální (ale zajímavá) chyba - nemůžete do scriptu dávat výsledek výběru (výběrovou množinu) - ten výběr (ssget) musíte provést až ve scriptu, tedy až v daném výkresu. Výběrová množina z jednoho výkresu nemá v jiném výkresu smysl.

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


Odeslal: PepaR
Datum odeslání: 26.srp.2007 v 09:15
Sakreš, nějak jsme si s tím neporadil. Jde o to, že v razítkách dávám bloky s podpisy, kdo který výkres vyhotovil (což je cca 20 bloků, které ovšem nejsou v každém výkrese). Jelikož výkresy pak potřebuji zazálohovat a zaslat dále bez podpisů, tak potřebuji aby se mi vytvořil skript, který vyběre ze zadaného seznamu názvů bloků podpisů ty které se ve výkrese nachází a pak výkres vyčistí i uloží.
 
Bohužel nejsem tak zdatný programátor abych to přidal do toho LISPu a na studování příručky momentálně taky není čas neboť termín odevzdání dokumentace neskutečně hoří ;) a práce je na ní habaděj.
 
Najde se prosím nějaká dobrá duše?


-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz


Odeslal: Vladimír Michl
Datum odeslání: 26.srp.2007 v 13:21
Zásadní problém je v tom vytváření výběrové množiny - nemůžete do skriptu zapsat hodnotu proměnné, je potřeba tam dát onen LISP výraz (aby se vyhodnotil až při běhu scriptu). Tedy:
 
(write-line (setq QS1 ...
-->
(write-line "(setq QS1 ...
 
Když tak sem pošlete část obsahu výsledného SCR souboru - z něj se problém pozná nejsnadněji.


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


Odeslal: PepaR
Datum odeslání: 26.srp.2007 v 15:56
Nu, pokoušel jsme se to implenetovat jako další položku (radiobutton) do následujího LISPu (přikládám výchozí soubor):
http://www.cadforum.cz/forum/uploads/20070826_155639_cisti_vn.zip - uploads/20070826_155639_cisti_vn.zip


-------------
PepaR
https://www.jremes.cz" rel="nofollow - jremes.cz | https://www.stavlab.cz" rel="nofollow - stavlab.cz


Odeslal: Ferdinand
Datum odeslání: 16.říj.2007 v 09:47
Ještě bych se zeptal: jak vyselektuji blok určitého jména (v daném případě je to jméno uchováno v proměnné NPF), abych s vybraným blokem mohl provést nějakou operaci? Pokud napíšu
(setq QS1 (ssget "X" '((0 . "insert") (2 . NPF))))
tak mi hlásí
; error: bad SSGET list value
Řekl bych, že by to mohlo být něco jako
(if (tblsearch "block" NPF)...
ale nevím jak dál.


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


Odeslal: Seiner
Datum odeslání: 16.říj.2007 v 09:59
ten seznam se musí IMHO složit nějak jako
(ssget "X"(list(cons 0 "INSERT")(cons 2 NFP))))


-------------
Vítězslav Seiner

Chrudim


Odeslal: Vladimír Michl
Datum odeslání: 16.říj.2007 v 10:02
Ano, resp.:
(setq QS1 (ssget "_X" '((0 . "INSERT") (cons 2 NPF))))


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


Odeslal: Ferdinand
Datum odeslání: 16.říj.2007 v 10:54
Nojo, mohlo mne to napadnout. Díky.

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


Odeslal: Ferdinand
Datum odeslání: 18.říj.2007 v 18:09
Původně odeslal(a) Vladimír Michl Vladimír Michl napsal(a):

Ano, resp.:
(setq QS1 (ssget "_X" '((0 . "INSERT") (cons 2 NPF))))
Podotýkám, že jsem se prvně přesvědčil, že ve výkresu opravdu existuje ten blok. Přesto:
Command: (setq QS1 (ssget "_X" '((0 . "INSERT") (cons 2 NPF))))
; error: bad SSGET list
 


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


Odeslal: Ferdinand
Datum odeslání: 18.říj.2007 v 18:14
Původně odeslal(a) Seiner Seiner napsal(a):

ten seznam se musí IMHO složit nějak jako
(ssget "X"(list(cons 0 "INSERT")(cons 2 NFP))))
Podotýkám, že jsem se prvně přesvědčil, že ve výkresu opravdu existuje ten blok. Přesto:
Command: (setq QS1 (ssget "X"(list(cons 0 "INSERT")(cons 2 NPF))))
nil
 


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


Odeslal: Ferdinand
Datum odeslání: 15.lis.2007 v 15:14
Nebudete tomu věřit, ale pořád s tím bojuji. Angry Tak nějaký jiný nápad, prosím?

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


Odeslal: Martin Bielina
Datum odeslání: 15.lis.2007 v 15:53
(setq QS1 (ssget "_X" '((-4 . "<AND") (0 . "INSERT") (2 . "NPF") (-4 . "AND>"))))


Odeslal: Ferdinand
Datum odeslání: 15.lis.2007 v 17:02
No to mne podržte Shocked - najednou je to OK!
Command: (setq NPF (cadr (fnsplitl (getvar "dwgname"))))
"POKUS8"
Command: (setq QS1 (ssget "X"(list(cons 0 "INSERT")(cons 2 NPF))))
<Selection set: 3>
To M.Bielina: To jsem zkoušel též, ale taky mi to nechtělo brát...Confused
Command: (setq QS1 (ssget "_X" '((-4 . "<AND") (0 . "INSERT") (2 . "NPF") (-4 .
"AND>"))))
nil


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


Odeslal: Vladimír Michl
Datum odeslání: 15.lis.2007 v 18:42
asi záleží na tom, na co se zrovna vyhodnotí symbol NPF...

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



Vytisknout stránku | Zavřít okno