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: 17412 
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řenoZjištění jména přerušené entity

 Odpovědět Odpovědět archiv
Autor
Mantlík Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (Pha)
Používám:
ACAD/Map/Civil R10-> 2022
Stav: Offline
Bodů: 2527
Přímý odkaz na tuto zprávu Téma: Zjištění jména přerušené entity
    Zasláno: 23.úno.2005 v 17:32

Dobrý den vespolek

Potřeboval bych zjistit, zda je následující myšlenkový pochod možno realizovat pomocí lispu.

1) mám z dřívějška funkci, v níž si "sáhnu" na úsečku a programově zjistím jméno entity (spolu s dalšími hodnotami), což použiji k výpočtům a grafickému výstupu    .. dobře, funguje

2) tuto funkci jsem ještě rozšířil  o automatické přerušení této úsečky ve spočítaném bodě  ...  opět funguje

3) ale teď bych chtěl jednu část této přerušené úsečky např. přesunout do jiné hladiny, ANIŽ bych na ni musel sahat. To je opět možné např přes jméno entity (nebo i jinak??) - ale jak získat jméno této entity (tj. např.  vždycky "pravé" poloviny původní úsečky)

Pokud někoho něco napadne, děkuji předem. V tomto případě má svůj význam i odpověď, že to nejde..

 

Díky

J. Mantlík

Zpět nahoru
Ondrejd Zobrazit panel
Diskutér
Diskutér

Přihlášen: 08.říj.2004
Lokalita: ČR (PA)
Používám:
AutoCAD2012,Invertor10
Stav: Offline
Bodů: 34
Přímý odkaz na tuto zprávu Zasláno: 23.úno.2005 v 18:24

Podle mých zkušeností to musíte udělat jinak:

Vybranou úsečku nepřerušujte. Modifikujte kód 10 nebo 11 tak, abyste dostal úsečku požadované délky.

Potom použijte (entmake) s hodnotami vybrané úsečky.

Novou úsečku Vám vrátí entmake nebo se na ni dostanete přes entlast. U nové úsečky modofikujte kód 10 a 11 - vrcholy, a kód 8 - hladina.

Ondřej Doležal

Ing. Ondřej Doležal
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: 24.úno.2005 v 08:13

Jenom pro případ, že baste náhodou vynalézal vynalezené :-)

;--------- ZAKRYJ.LSP   Simon Jones   Sept 1987

;     Toto makro provádí příkaz "_TRIM" na vybraných entitách
;    a převádí "odřezky" do speciální hladiny, definované uživatelem.
;    Toto může být použito pro hladinu se speciální typ čáry,
;    např. pro ilustrování části zakrytého pohledu.

;    Pokud vybraná entita neprotíná hranici, je na ní provedena
;    "_CHANGE" hladiny - je přesunuta do speciální hladiny.

;    Makro spolupracuje pouze s entitami typu ÚSEČKA, OBLOUK a KRUŽNICE.
;    Ostatní entity budou ignorovány.

;    K ukončení příkazu zadejte nulovou odpověď na výzvu
;    k vybrání objektů.


; Funkce ukládající systémové proměnné
(defun MODES (a)
   (setq MLST '())
   (repeat (length a)
      (setq MLST (append MLST (list (list (car a) (getvar (car a))))))
      (setq a (cdr a)))
)

; Funkce k nastavení systémových proměnných
(defun MODER ()
   (repeat (length MLST)
      (setvar (caar MLST) (cadar MLST))
      (setq MLST (cdr MLST))
   )
)


; Funkce k zpracování oblouků
(defun XARC (/ cen r)
    (command "_LAYER" "_S" $ln "")
    (setq a (cdr (assoc 50 e1)))
    (setq b (cdr (assoc 51 e1)))
    (setq cen (cdr (assoc 10 e1)))
    (setq r (cdr (assoc 40 e1)))
    (command "_TRIM" ss "" (cadr e) "")
    (setq e2 (entget (car e)))
    (setq c (cdr (assoc 50 e2)))
    (setq d (cdr (assoc 51 e2)))
    (cond ((equal e1 e2)
           (command "_CHANGE" (cdar e1) "" "_P" "_LA" $ln "")
          )
          ((and (equal a c) (/= b d) (equal el (entlast)))
           (command "_ARC" (polar cen d r)
                            "_C" cen
                            (polar cen b r)
           )
          )
          ((and (equal b d) (/= a c) (equal el (entlast)))
           (command "_ARC" (polar cen a r)
                            "_C" cen
                            (polar cen c r)
           )
          )
          (T
           (setq x (cdr (assoc 50 (entget (entlast)))))
           (setq y (cdr (assoc 51 (entget (entlast)))))
           (cond ((and (equal a c) (equal b y))
                   (command "_ARC" (polar cen d r)
                                    "_C" cen
                                    (polar cen x r)
                   )
                  )
           )
          )
    )
    (command "_LAYER" "_S" cl "")
)

; Funkce k zpracování kružnic
(defun XCIRCLE (/ cen r)
    (command "_LAYER" "_S" $ln "")
    (setq el (entlast))
    (setq cen (cdr (assoc 10 e1)))
    (setq r (cdr (assoc 40 e1)))
    (command "_TRIM" ss "" (cadr e) "")
    (setq e2 (entget (car e)))
    (cond  ((equal e1 e2)
             (command "_CHANGE" (cdar e1) "" "_P" "_LA" $ln "")
           )
           ((= (cdr (assoc 0 e2)) "ARC")
             (setq r (cdr (assoc 40 e2)))
             (setq cen (cdr (assoc 10 e2)))
             (setq a (polar cen (cdr (assoc 50 e2)) r))
             (setq b (polar cen (cdr (assoc 51 e2)) r))
             (command "_ARC" b "_C" cen A)
           )
    )
    (command "_LAYER" "_S" cl "")
)

; Funkce k zpracování úseček
(defun XLINE ()
    (command "_LAYER" "_S" $ln "")
    (setq a (cdr (assoc 10 e1)))
    (setq b (cdr (assoc 11 e1)))
    (command "_TRIM" ss "" (cadr e) "")
    (setq e2 (entget (car e)))
    (setq c (cdr (assoc 10 e2)))
    (setq d (cdr (assoc 11 e2)))
    (cond ((equal e1 e2)
           (command "_CHANGE" (cdar e1) "" "_P" "_LA" $ln "")
          )
          ((and (equal a c) (/= b d) (equal el (entlast)))
           (command "_LINE" d b "")
          )
          ((and (equal b d) (/= a c) (equal el (entlast)))
           (command "_LINE" a c "")
          )
          (T
           (setq x (cdr (assoc 10 (entget (entlast)))))
           (setq y (cdr (assoc 11 (entget (entlast)))))
           (cond ((and (equal a c) (equal b y))
                   (command "_LINE" d x "")
                  )
           )
          )
    )
    (command "_LAYER" "_S" cl "")
)

(defun C:ZAKRYJ2 (/ cen r e el e1 e2 a b c cl d ln ss yn x y)

  (modes '("CMDECHO" "BLIPMODE" "HIGHLIGHT"))
  (setq cmd (getvar "CMDECHO")
        blip (getvar "BLIPMODE")
        higl (getvar "HIGHLIGHT")
        osm (getvar "OSMODE"))
  (setvar "CMDECHO" 0)
  (setvar "BLIPMODE" 0)
  (setvar "OSMODE" 0)
  (setq cl (getvar "CLAYER"))
  (PROMPT"\n  ")
  (SETQ SS1 NILL)
  (SETQ SS1 (SSGET "X" '((0 . "LINE"))))
  (if ss1 (prompt" ")(SETQ SS1 (SSGET "X" '((0 . "CIRCLE")))))
  (if ss1 (prompt" ")(SETQ SS1 (SSGET "X" '((0 . "ARC")))))
  (IF SS1
       (PROGN
        (if (null $ln) (setq $ln cl))
        (while (null ln)
                (setq ln "SKRYTE")
                (if (= ln "") (setq ln $ln))
                (if (not (tblsearch "LAYER" ln))
                     (progn
                      (setq yn "Ano")
                      (if (= yn "Ano")
                          (command "_LAYER" "_M" ln "_C" 2 ln "_L" "Čárkovaná" ln "_S" cl "")
                          (setq ln nil)
                      )
                     )
                )
        )

        (setq $ln ln)
        (prompt "\nVyberte hranice ořezání: ")
        (setq ss (ssget))
        (setvar "HIGHLIGHT" 0)
        (setq e (entsel "\nVyberte objekty určené k přemístění na přenosovou hladinu"))
        (while e
          (setq e1 (entget (car e)))
          (setq el (entlast))
          (cond  ((= (cdr (assoc 0 e1)) "LINE")
                   (xline)
                  )
                  ((= (cdr (assoc 0 e1)) "ARC")
                   (xarc)
                  )
                  ((= (cdr (assoc 0 e1)) "CIRCLE")
                   (xcircle)
                  )
                  (T (prompt "\nVybrána nevhodná entita. "))
          )
          (setq e (entsel "\nVyberte entity určené k přemístění na hladinu přenosu:"))
        )
       )
       (PROMPT (strcat " .. NEJSOU VHODNÉ ENTITY VE VÝKRESE !!!!"))
  )
  (setvar "CMDECHO" cmd)
  (setvar "BLIPMODE" blip)
  (setvar "HIGHLIGHT" higl)
  (setvar "OSMODE" osm)
  (moder)
  (princ)
)

Zpět nahoru
Mantlík Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (Pha)
Používám:
ACAD/Map/Civil R10-> 2022
Stav: Offline
Bodů: 2527
Přímý odkaz na tuto zprávu Zasláno: 24.úno.2005 v 09:19

Ne, že bych chtěl vynalézat již vynalezené, ale všichni víme, jak to chodí ....

Tuhle rutinu znám, pokusil jsem se ji před několika roky upravit pro zaoblení s tím, že se oříznou přečnívající tečny a přesunou do jiné hladiny. Tenkrát se mi to zdálo poněkud kostrbaté s množstvím ukazování, hlavní problém byl ale spíš v tom, že se to vždy nepovedlo. Někdy to tečnu přerušilo, ale někdy taky ne a převedlo to do jiné hladiny celou úsečku, někdy na jedné straně oblouku, jindy na druhé, ale občas i obě. Zkusím se do toho zpětně ponořit

Ale abych se vrátil k původnímu problému. Všechno jede samo až k přerušení úsečky ve spočteném bodě. A nakonec si vymyslím přesun jedné její části do zvolené hladiny bez jakéhokoliv ukazování. Pokud to nejde, nic se nestane, nejjednodušší je použít funkci, již mohu nazvat např. "přesun do hladiny na jejíž jednu entitu ukážu"

 

Teď mne ale napadlo, že pokud mám původní úsečku (a tedy i její počáteční  A a koncový bod B) a pak bod přerušení C, bude asi jednodušší programově původní úsečku A-B smazat a nakreslit místo ní dvě jiné A-C a C-B, každou v požadované hladině. Nebo ne?

 

J. Mantlík

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: 24.úno.2005 v 09:36

Ale tak Vám to přece radil p. Doležal a když se podíváte do toho kodu, tak je to tam podobně udělané - na úsečce se udělá TRIM, zbytku se zmení hladina a to odříznuté se znova nakreslí. Způsobů, jak to udělat je samozřejmě víc, ale princik je stejný.

Zpět nahoru
Mantlík Zobrazit panel
TOP uživatel
TOP uživatel

Přihlášen: 01.říj.2004
Lokalita: ČR (Pha)
Používám:
ACAD/Map/Civil R10-> 2022
Stav: Offline
Bodů: 2527
Přímý odkaz na tuto zprávu Zasláno: 24.úno.2005 v 10:06

Děkuji

Lisp není můj denní chleba, to se jen občas "zblázním" a pokusím se něco vymyslet. O soustavném studiu lispu nemůže tedy být ani řeči - spíš se snažím pochopit, co by se dalo zrovna použít (což taky není správný přístup, ale většinou se to povede ... a nebo taky ne a pak toho nechám) Takže pouhé nahlédnutí do kódu mi nic neřekne - musím si to doma v klidu trochu zesrozumitelnit (ještě, že se mi podařilo uchránit příručku uživatelských úprav k R13 v češtině). Vaše připomínky mi v tom pomohou)

 

J. Mantlík

Zpět nahoru

Pro technickou podporu CAD
kontaktujte Helpdesk

Příbuzné CAD tipy:
Tip 3239:Snadné zjištění 3D souřadnice bodu ve výkresu.
Tip 3033:Jak zjistit v AutoCADu název počítače, na kterém běží?
Tip 2765:VIPJak v AutoCADu nebo v LT nakreslit přerušený řez/pohled (včetně asociativních kót)?
Tip 4107:Jak v Mapu přerušit křivku se zachováním připojených objektových dat?
Tip 5631:Automatické přerušení čar v průsečících.
Tip 4606:Přerušená čára řezu v Revitu.


 Odpovědět Odpovědět

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



Stránka byla vygenerována za 0,887 sekund.