Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy Arkance Systems [www.cadforum.cz]
CZ | SK | EN | DE
Přihlášení
či registrace
   právě nás čte: 5756 
RSS kanál - CAD tipy RSS tipy
RSS diskuze

Diskuze Diskuzní fórum, poradna

 

NápovědaCAD diskuze, rady, výměna zkušeností

 
CAD Fórum - Homepage Veřejné diskuzní fórum k CAD aplikacím - ptejte se na libovolné otázky týkající se oboru CAx, podělte se o vaše znalosti a zkušenosti s programy AutoCAD, Inventor, Revit, Fusion 360, 3ds Max a s dalšími CAD aplikacemi. Zaregistrujte se nebo se přihlašte a zašlete váš příspěvek do odpovídajícího fóra. Viz další informace o CAD Fóru. Nechcete se registrovat? Zeptejte se v naší Facebook poradně.
Fórum nenahrazuje technický support firmy Arkance Systems (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.cadstudio.cz
  FAQ FAQ  Prohledat fórum   Události   Registrovat Registrovat  Přihlásit Přihlásit

Téma uzavřenoSkript pro výběr více bloků a jejich smazání

 Odpovědět Odpovědět Stránka  12> archiv
Autor
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Téma: Skript pro výběr více bloků a jejich smazání
    Zasláno: 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
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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-
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21526
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Zasláno: 31.čvc.2007 v 14:19
Děkuji mnohokráte.
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Zasláno: 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]
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21526
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Zasláno: 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?
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21526
Přímý odkaz na tuto zprávu Zasláno: 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 Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
PepaR Zobrazit panel
CAD/BIM manager
CAD/BIM manager
Avatar

Přihlášen: 29.lis.2004
Lokalita: ČR (ZL)
Používám:
ruky a hlavu (občas ;)
Stav: Offline
Bodů: 6187
Přímý odkaz na tuto zprávu Zasláno: 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):
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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-
Zpět nahoru
Seiner Zobrazit panel
CAD/BIM manager
CAD/BIM manager

Přihlášen: 01.říj.2004
Lokalita: ČR (PA)
Používám:
Mechanical 2017, Inventor 2017 a starší
Stav: Offline
Bodů: 1662
Přímý odkaz na tuto zprávu Zasláno: 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
Zpět nahoru
Vladimír Michl Zobrazit panel
Moderátor
Moderátor
Avatar
Arkance Systems

Přihlášen: 09.zář.2004
Lokalita: ČR (JČ)
Používám:
Dodáváme produkty Autodesk
Stav: Offline
Bodů: 21526
Přímý odkaz na tuto zprávu Zasláno: 16.říj.2007 v 10:02
Ano, resp.:
(setq QS1 (ssget "_X" '((0 . "INSERT") (cons 2 NPF))))
Vladimír Michl (moderátor)
Arkance Systems s.r.o. - www.arkance-systems.cz
(podpora viz hd.cads.cz)
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 16.říj.2007 v 10:54
Nojo, mohlo mne to napadnout. Díky.
-FerTh-
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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-
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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
 


Upravil Ferdinand - 18.říj.2007 v 18:15
-FerTh-
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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-
Zpět nahoru
Martin Bielina Zobrazit panel
Zasloužilý člen
Zasloužilý člen

Přihlášen: 04.led.2007
Lokalita: ČR (Pha)
Používám:
AutoCAD True view 2016
Stav: Offline
Bodů: 100
Přímý odkaz na tuto zprávu Zasláno: 15.lis.2007 v 15:53
(setq QS1 (ssget "_X" '((-4 . "<AND") (0 . "INSERT") (2 . "NPF") (-4 . "AND>"))))
Zpět nahoru
Ferdinand Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (JM)
Používám:
AutoCAD2004 (EN) na Windows XP
Stav: Offline
Bodů: 1904
Přímý odkaz na tuto zprávu Zasláno: 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


Upravil Ferdinand - 15.lis.2007 v 17:04
-FerTh-
Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 7827:Jak v Revitu vymazat více materiálů najednou?
Tip 13356:Obnovení poslední smazané entity v DWG.
Tip 12628:Tak jako slunečnice každým dnem... Dynamo skript pro Revit
Tip 7081:Výběr bloků jménem.
Tip 2943:Jak zvětšit nebo natočit několik bloků okolo jejich individuálních vkládacích bodů?
Tip 7582:Výběr dynamických bloků podle dynamické vlastnosti nebo stavu viditelnosti.


 Odpovědět Odpovědět Stránka  12> archiv

Přejít na fórum Oprávnění fóra Zobrazit panel



Stránka byla vygenerována za 1,254 sekund.