Registrujte se na 22. ročník konference CADfórum 2025 - 30.9. Zámek Valeč.
Přes 118.500 registrovaných u nás, celkem 1.096.000 registrovaných (CZ+EN), přes 53.000 CAD/BIM bloků.
Vyzkoušejte nový přesný Inženýrský kalkulátor a aktualizovaný Generátor čarových kódů.
Diskuzní fórum, poradna
?CAD diskuze, rady, výměna zkušeností

Fórum nenahrazuje technický support firmy ARKANCE (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.arkance-systems.cz
|
Odpovědět ![]() |
archiv |
Autor | |
BenaCZ ![]() Diskutér ![]() Přihlášen: 02.říj.2006 Lokalita: ČR (Pha) Používám: AutoCad2007 Stav: Offline Bodů: 60 |
![]() Zasláno: 06.říj.2006 v 11:00 |
Mohli byste mi prosím poradit co mám v kódu špatně?
Má to být lisp na funkci otočit (použít referenci, zadat střed otáčení, zadat 1.bod a 2. bod otáčení) Ono se mi to ale otáčí o jiný úhel... (defun otocrychle (selected_object / stredpt firstpt endpt) (setq stredpt (getpoint "\nVyber stred otáčení:")) (setq firstpt (getpoint "\nVyber 1. bod otáčení:")) (setq endpt (getpoint "\nVyber 2. bod otáčení:")) (command "_rotate" selected_object "" stredpt "R" "" stredpt firstpt endpt "") ) (defun C:otocr (/ selected) (terpri) (setq selected (entsel "Vyber objekty:")) (otocrychle selected) ) P.S. Jsem začátečník Díky Bena |
|
Bena
|
|
![]() |
|
Vladimír Michl ![]() Profil člena
Odeslat soukromou zprávu
Najít příspěvky člena
Navštívit stránky člena
Přidat do seznamu známých
Moderátor ![]() ![]() ARKANCE Přihlášen: 09.zář.2004 Lokalita: ČR (JČ) Používám: Implementujeme řešení Autodesk Stav: Offline Bodů: 21949 |
![]() |
Na první pohled to vypadá v pořádku. Snad jen (nesouvisející) drobnosti - "objekt", ne "objekty" a "_R", ne "R".
Jste si vědom, že úhel zadáváte referencí (rozdílem) od stávajícího úhlu, ne absolutně? Drobné odchylky mohou být způsobeny též uchopovacími režimy, 3D, USS, apod.
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Já už pro jistotu píšu na začátek každého lispu
(setq OSM (getvar "osmode")) (setq ORM (getvar "orthomode")) (setq SNM (getvar "snapmode")) (setvar "osmode" 0) (setvar "orthomode" 0) (setvar "snapmode" 0) a na konci obnovím na původní (setvar "osmode" OSM) (setvar "orthomode" ORM) (setvar "snapmode" SNM) |
|
-FerTh-
|
|
![]() |
|
BenaCZ ![]() Diskutér ![]() Přihlášen: 02.říj.2006 Lokalita: ČR (Pha) Používám: AutoCad2007 Stav: Offline Bodů: 60 |
![]() |
Doplnil jsem tam ty ortho a kroky. Změnil jsem to na vícenásobný výběr, ale pořád mi to nefunguje.
Jde mi o to, abych otočil objekty pomocí reference a aby střed otáčení byl stejný jako počátek, který určuje počáteční úhel. Pak bych chtěl kliknout na jeden bod (tím získat počáteční úhel) a pak na druhý bod a tím směrem objekt otočit. Tady je upravený kód: (defun C:otocr (/ ORM SNM mysset counter stredpt firstpt endpt) ;nastaví orto a krok na 0 (setq ORM (getvar "orthomode")) (setq SNM (getvar "snapmode")) (setvar "orthomode" 0) (setvar "snapmode" 0) ;násobný výběr (setq mysset (ssget)) (setq counter 0) (while (< counter (sslength mysset)) (terpri) (setq counter (+ counter 1)) ) ;vlastní funkce (setq stredpt (getpoint "\nVyber stred otáčení:")) (setq firstpt (getpoint "\nVyber 1. bod otáčení:")) (setq endpt (getpoint "\nVyber 2. bod otáčení:")) (command "_rotate" mysset "" stredpt "_R" "" stredpt firstpt endpt) ; obnovuje původní orto a krok atd (setvar "orthomode" ORM) (setvar "snapmode" SNM) ) Mám pocit, že mi nefunguje ten endpt a otáčí se mi to podle původně nastaveného referenčního úhlu. Nevíte proč? |
|
Bena
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Hm, tak to tedy nevím.
Zkusit to překontrolovat v lisp editoru ? Úhlové jednotky a smysl úhlu máte OK? Anebo nepomohlo by prvně změřit úhel od osy X (anebo Y ?) /tj. střed či počátek úhlu/ k zadanému bodu /tj. směr vektoru/ a teprve pak to tam mlasknout jako vybranou/zadanou hodnotu? |
|
-FerTh-
|
|
![]() |
|
BenaCZ ![]() Diskutér ![]() Přihlášen: 02.říj.2006 Lokalita: ČR (Pha) Používám: AutoCad2007 Stav: Offline Bodů: 60 |
![]() |
Tak jsem to zdárně vyřešil. Asi jsem špatně chápal, jak to vlastně autocad při tom otáčení dělá. Tak jsem zkoumal jak to vlastně funguje při normálním otáčení a zapsal jsem pak tento kód:
;;; Otočí podle 3 bodů (defun C:otocr (/ ORM SNM mysset counter stredpt firstpt endpt angle_new angle1 angle2 delta_x1 delta_y1 delta_x2 delta_y2 ) ;;;nastaví orto a krok na 0 (setq ORM (getvar "orthomode")) (setq SNM (getvar "snapmode")) (setvar "orthomode" 0) (setvar "snapmode" 0) ;;;násobný výběr (setq mysset (ssget)) (setq counter 0) (while (< counter (sslength mysset)) (terpri) (setq counter (+ counter 1)) ) ;;;vlastní funkce (setq stredpt (getpoint "\nVyber stred otáčení:")) (setq firstpt (getpoint "\nVyber 1. bod otáčení:")) (setq endpt (getpoint "\nVyber 2. bod otáčení:")) (setq delta_x1 (- (nth 0 firstpt) (nth 0 stredpt))) (setq delta_y1 (- (nth 1 firstpt) (nth 1 stredpt))) (setq angle1 (atan delta_y1 delta_x1)) (setq delta_x2 (- (nth 0 endpt) (nth 0 stredpt))) (setq delta_y2 (- (nth 1 endpt) (nth 1 stredpt))) (setq angle2 (atan delta_y2 delta_x2)) (setq angle_new (atof (angtos (- angle2 angle1) 0 2))) (command "_rotate" mysset "" stredpt angle_new) ;;; obnovuje původní orto a krok (setvar "orthomode" ORM) (setvar "snapmode" SNM) ) A to už funguje báječně. Bena |
|
Bena
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Pořád ale mi nějak uniká smysl této procedury. V čem je to teda lepší/rychlejší? Proč nepoužívat raději ono klasické otáčení?
|
|
-FerTh-
|
|
![]() |
|
BenaCZ ![]() Diskutér ![]() Přihlášen: 02.říj.2006 Lokalita: ČR (Pha) Používám: AutoCad2007 Stav: Offline Bodů: 60 |
![]() |
No když otáčím klasicky, tak musím zadat nejdřív co otočit, pak střed otačení, pak dát R, pak znovu střed, koncový bod 1. směru a pak koncový bod 2. směru.
Zatímco v nové funkci dám co otočit, střed, koncový bod 1.směru a koncový bod 2. směru. Ušetřím tím několik kroků. |
|
Bena
|
|
![]() |
|
Ferdinand ![]() TOP uživatel ![]() Přihlášen: 01.říj.2004 Lokalita: ČR (JM) Používám: AutoCAD2004 (EN) na Windows XP Stav: Offline Bodů: 1906 |
![]() |
Cituji příkazový řádek [+ komentáře]:
Command: _rotate Current positive angle in UCS: ANGDIR=counterclockwise ANGBASE=0.00 Select objects: [pick1-CrossWindow/Window] Specify opposite corner: [pick2-CrossWindow/Window] 97 found [anebo se vyfiltrují potřebné entity, případně se zadá _All] 3 were on a locked la-yer. Select objects: [Enter] Specify base point: [pick3, anebo se zadá PočátečníBod] Specify rotation angle or [Reference]: [pick4, anebo se zadá HodnotaUhlu] Upravil Ferdinand - 13.říj.2006 v 13:54 |
|
-FerTh-
|
|
![]() |
Pro technickou podporu CAD
kontaktujte Helpdesk
Odpovědět ![]() |
|
Přejít na fórum | Oprávnění fóra ![]() Nemůžete vytvářet nová témata v tomto fóru Nemůžete odpovídat na témata v tomto fóru Nemůžete vymazávat vaše příspěvky v tomto fóru Nemůžete upravovat vaše příspěvky v tomto fóru Nemůžete vytvářet ankety v tomto fóru Nemůžete hlasovat v anketách v tomto fóru |
Stránka byla vygenerována za 0,230 sekund.