Vytisknout stránku | Zavřít okno

Hromadné otočení textů (objektů) o zadaný úhel

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: AutoCAD
Popis fóra: Otázky kolem aplikací AutoCAD a AutoCAD LT, AutoCAD 360, prohlížečů, DWG a DWF, Design Review, Navisworks, nadstavby, 123D, A360 a cloud Autodesk 360
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=8440
Datum vytištění: 21.dub.2026 v 01:13


Téma: Hromadné otočení textů (objektů) o zadaný úhel
Odeslal: Venca80
Předmět: Hromadné otočení textů (objektů) o zadaný úhel
Datum odeslání: 07.dub.2009 v 14:32
Přátelé jdu k vám pro radu, jestli lze nějakým způsobem hromadně otočit texty (případně jiné objekty) o zadaný úhel (např. 180°) kolem svých řídících bodů. Pochopitelně se mi jedná o texty s různým natočením, jinak by to nebyl problém... Předem děkuji za rady!



Odpovědi:
Odeslal: Ferdinand
Datum odeslání: 07.dub.2009 v 14:48
Podle mne to půjde jenom nějakým lispem:
 
- vyber objekty dle druhu (dle volby)
- dej je do seznamu
- na každý prvek tohoto seznamu aplikuj:
-- zjisti aktuální úhel otočení
-- změň tento úhel o 180 st.


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


Odeslal: Venca80
Datum odeslání: 07.dub.2009 v 17:05
A pokud to nejde jinak, než nějakým takovýmto lispem, někdo by ho uměl stvořit? Embarrassed


Odeslal: Martin Bielina
Datum odeslání: 07.dub.2009 v 17:20
Pokud by stačilo aby se otáčely jen jednoduché prvky jako jsou texty, mtexty a bloky tak by to mohlo vypadat třeba takhle. Spouští se příkazem rot180 a otočí najednou všechny bloky texty a mtexty ve výkresu/souboru o 180°.

(defun C:rot180 ( / i n sel_length ent_sel ent entseznam uhel)
(setq ent_sel (ssget "_X" '((-4 . "<OR")                           
                                 (0 . "INSERT")
                                 (0 . "TEXT")
                                 (0 . "MTEXT")
                               (-4 . "OR>")
                             )
                            )
                          )
(setq i 0)
(if (= ent_sel nil)
       (setq sel_length 0)
       (setq sel_length (SSLENGTH ent_sel))
)
(princ)
     (princ (strcat (rtos sel_length 2 0) " OBJEKTŮ VE VÝBĚRU K OTÁČENÍ"))
     (princ)     
(while (/= i sel_length)
           (setq ent (ssname ent_sel i))
     (setq entseznam (entget ent));načte list
     (setq uhel (cdr (assoc 50 entseznam)))
     (setq entseznam (subst (cons 50 (+ uhel pi)) (assoc 50 entseznam) entseznam))
     (entmod entseznam)
     (entupd ent)
           (setq i (+ i 1))
)
(print)
)


Odeslal: v.straka
Datum odeslání: 07.dub.2009 v 20:34

Prikaz torient z express.



-------------
v.straka

ICQ 283-000-941


Odeslal: Venca80
Datum odeslání: 08.dub.2009 v 08:46
Martin Bielina: Děkuji, to je ono! Hezké by ještě bylo mít tam volbu pro zadání úhlu otočení Embarrassed, kdyby jste se náhodou nudil Tongue, ale i tak moc děkuji!!!

v.straka: Příkaz torient bohužel otáčí jen na absolutní úhel (jestli se nepletu) a ne o nějaký úhel. Ale i tento příkaz občas využiji zvláště otočení na "Most Readable". I tak díky.


Odeslal: Martin Bielina
Datum odeslání: 08.dub.2009 v 09:06
Původně odeslal(a) Venca80 Venca80 napsal(a):

Martin Bielina: Děkuji, to je ono! Hezké by ještě bylo mít tam volbu pro zadání úhlu otočení Embarrassed, kdyby jste se náhodou nudil Tongue, ale i tak moc děkuji!!!


V dolní čtvrtině kódu jsem vám zvýraznil výraz pi což je právě ten úhel v radiánech o který se vše otáčí. Není problém doplnit do kódu ještě požadavek na zadání úhlu a otáčet pak právě o něj. V tom případě by mě pak zajímalo, v jakých úhlových jednotkách si to přejete zadávat (°, rad nebo třeba g). Nerad bych ještě dodělával rozhodovací cyklus na jednotky ... A další problém který to přinese je směr otáčení, protože ten je nastavitelný systémovou proměnou, zpravidla na CCW tj. proti směru hodinových ručiček s čímž mívají především praváci problém. Rotace o 180° je ta nejjednodušší, protože se těmito drobnostmi prostě nemusí člověk zabývat.


Odeslal: Martin Bielina
Datum odeslání: 08.dub.2009 v 17:18
Na přání zakladatele tohoto vlákna přidávám modifikaci, která umí otáčet s prvky ve výběru o libovolný úhel.

(defun C:rotx ( / i n sel_length ent_sel ent entseznam uhel rotuhel)
(princ "\nVyberte objekty k otočení")
(setq ent_sel (ssget '((-4 . "<OR")                           
                            (0 . "INSERT")
                            (0 . "TEXT")
                            (0 . "MTEXT")
                         (-4 . "OR>")
                        )
                      )
                      )
(setq i 0)
(if (= ent_sel nil)
       (setq sel_length 0)
       (setq sel_length (SSLENGTH ent_sel))
)
(princ)
     (princ (strcat (rtos sel_length 2 0) " OBJEKTŮ VE VÝBĚRU K OTÁČENÍ"))
     (princ)
(setq rotuhel (getreal "\nZadejte ve stupních hodnotu úhlu pro otáčení <180> "))
(if (= rotuhel nil)
(setq rotuhel pi)
(setq rotuhel (* rotuhel (/ pi 180)))
)    
(while (/= i sel_length)
           (setq ent (ssname ent_sel i))
     (setq entseznam (entget ent))
     (setq uhel (cdr (assoc 50 entseznam)))
     (setq entseznam (subst (cons 50 (+ uhel rotuhel)) (assoc 50 entseznam) entseznam))
     (entmod entseznam)
     (entupd ent)
(setq i (+ i 1))
)
(print)
)


Odeslal: Venca80
Datum odeslání: 09.dub.2009 v 10:21
Tleskám a děkuji!!! Clap


Odeslal: Vladimír Michl
Datum odeslání: 09.dub.2009 v 11:00
Dovolili jsme si kód trochu začistit a ošetřit případy, kdy text takto otočit nelze - viz RotX na stránce Download.

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



Vytisknout stránku | Zavřít okno