Как правя даден слой текущ най-бързо?

Иван Цукев

01-autocad-layer-current-smiana-tekushtНа нашата стена с въпроси и отговори за AutoCAD бе зададен въпрос за работа със слоевете от Дарина:

 

„Здравейте, гледах, но не видах-дано не се повтарям с някой друг…много се интересувам от това има ли бърза команда за сменяне на Layer-a, а не всеки път да го избирам от падащото меню. Много Ви благодаря предварително! Поздрави и успех със сайта, страхотен е!“

 

Христо я помоли да уточни:
„@Дарина. В какъв смисъл, да го смениш като настоящ или да прехвърлиш нещо в друг слой?

 

Това беше добре, защото проблемът стана по-ясен:
„да, да го сменя като настоящ…т.е. ако чертая стени примерно слой wall, искам след това ръчно да си привключа веднага на слой osi примерно, за да продължа да си чертая осите в дадения слой, а не всеки път да ги избирам от падащото меню…иначе прехвърлянето знам че си става с match properties, но някак си ми се вижда по-културно да си чертая всичко на момента, където си трябва. Благодаря предварително!“

 

Да избираме следварително слой за всеки елемент, който сме начертали е много трудоемко. Малко по-лесно е всичко да се начертае както ни падне и след това с „match properties“ да се „оправи“. В някои случаи варианта с „match properties“ не е лош и може да е се окаже най-бързото решение.
Всъщност необходимо е преди да започнем да чертаем група елементи, да кажем стени, да сменим текущия слой в напр. „wall“. Така всички нови елементи ще бъдат начертани в коректния слой. Всъщност това е опрерация, която се прави многократно докато чертаем.

 

Има три начина даден слой да се напрви „текущ“.

 

1. Чрез командата layer
Написваме командата layer, появява се палета и правим двоен клик пред името на слоя [1] или избираме новия слой и натискаме отметката [2], както е показано на снимката.

02-autocad-layer-current-smiana-tekusht

 

2. От падащото меню Layers
Натискаме падащото меню от панела „Layers“ и избираме слоя, който искаме да бъде текущ.

03-autocad-layer-current-smiana-tekusht-ribbon-panel

 

3. Начинът, който аз ползвам

Най-бързият за мен начин е командата, която взима слоя на даден обект и го прави текущ. Така например когато се работи с много слоеве с по-дълги имента, без да се затормозявам кое в кой слой се прави, аз просто пускам командата и избирам например една стена. Слоят със стените става мой текущ слой и продължавам да чертая в коректния слой.

Комадната се казва LAYMCUR (Make object’s current layer“) и отново се намира в панела „Layers“.

04-autocad-layer-current-smiana-tekusht-ribbon-panel-make-objects-layer-current-laymcur

Аз обаче не я пускам от там, а я пускам от командния ред. Понеже името и е неприятно за изписване, съм си направил двубуквен alias на командата и така стартирането и става още по-бързо.

05-autocad-layer-current-smiana-tekusht-command-line-make-objects-layer-current-laymcur

 

 

 

Абонирай се да получаваш AutoCAD Уроци по Емейл

 

Чертане , , , , ,

  1. Дарина
    | #1

    Прекрасно!!! Точно това ме интересуваше, уникално е, много благодаря за ипформацията, смятам, че на много хора ще е полезна! :))) Много успехи на сайта и на Вас! Поздрави!

  2. Tasho
    | #2

    Здравейте, аз лично за това ползвам командата „ai_molc“

  3. Николай Ангелов
    | #3

    Разбира се – всичко казано тук е вярно – особено за командата: LAYMCUR (Make object’s current layer“) Аз искам да споделя и моя начин:
    Създавам си бутон или вграждам в менюто за бутоните на мишката следния команден ред:
    (setvar „CLAYER“ (cdr(assoc 8 (entget(car(entsel))))))

    Още нещо интересно
    с малко програмиране извличайки стойностите на assoc 0 – тип на елемента може да се направи така, че шаблонът да е вече създаден чертожен елемент тоест чертожникът да чертае без да знае командите на acad. Тази втората програма съм я написал преди 15 години, но този път ще им искам да ми я платят…

  4. Николай Ангелов
    | #4

    Забравих да Ви кажа ако замените entsel в командния ред с nentsel, което ви препоръчвам – ще можете да отивате в слоевете на под елементите на блокове – без да се налага да ги изследвате
    затова Ви препоръчвам да промените това:
    (setvar „CLAYER“ (cdr(assoc 8 (entget(car(entsel))))))
    с това:
    (setvar „CLAYER“ (cdr(assoc 8 (entget(car(nentsel))))))
    Ей да не вземете да им кажете – ще си подобрят командата и мерси няма да кажат…

  5. | #5

    @Николай Ангелов

    Добър autolisp hack 🙂

    Всъщност това е алгоритъма на командата LAYMCUR и ако тя не работи на някой (до колкото си спомням бе въведена в 2007), тази кратка autolisp програмка може да се използва вместо нея.

  6. Николай Ангелов
    | #6

    Г-н Цукев – простете ми, че коментирам изказването Ви толкова късно, но едва днес го забелязах. Аз разбира се, високо ценя Вашите медийни изяви, които имат огромна образователна стойност. Но се засегнах от коментара Ви, че това, което съм написал е „хакерство“. Г-н Цукев аз професионално се занимавам с AutoCAD от 1985-6 година, а съм професионален autolisp разработчик пак някъде оттогава. Аз мога да Ви представя горното не от периода 2007, а от периода на v.10 за DOS… но за да ми повярвате сега публикувам специално за Вас едно много елегантно решение на един друг въпрос:
    (apply ‘append(subst ‘nil ‘(nil)(mapcar ‘(lambda(x)(list(assoc 10 (list x))))(entget(car(entsel))))))
    Надявам се, че ще разберете, какъв елемент трябва да бъде селектиран, за да може да сработи горният израз и какво в крайна сметка ще се получи. Ако разберете самостоятелно това, то тогава също ще разберете, че аз не съм хакер! Все пак аз съм скромна личност и винаги съм отворен да науча нещо от по-знаещите от мен. Затова ако знаете теоритичния отговор на следния въпрос: – възможно ли е да се дакларира lambda конструкция в тялото на рекурсивна функция – моля отговорете ми, защото за себе си все още не съм намерил задоволителен отговор. С уважение Николай Ангелов
    @Иван Цукев

  7. | #7

    @Николай Ангелов

    Здравейте,

    Съжалявам, че съм ви засегнал, но изразът ми бе в най-добрият смисъл на думата „hack“ и дори има усмивчица до него. По-нестандартните решения на даден проблем, които не се ползват от масовите потребители често се наричат „hack“ и аз съм ползвал думата в този смисъл. В никакъв случай, не съм искал да ви нарека злонамерен хакер или нещо подобно.

    Що се отнася до въпроса, не съм толкова „на вътре“ с програмирането, за да го отговоря, въпреки че си правя аматьорски autolisp програмки за лично ползване.

  8. Николай Ангелов
    | #8

    Г-н Цукев, благодаря за навременния отговор. Като колеги, имащи една и съща благородна цел Ви моля – с мое разрешение да предадете изпратения до Вас autolisp израз на една колежка, която преди месец-два, желаеше да получи помощ за бързо намиране на координатите на върховете на полилиния – има я във Вашия форум. Горният израз създава списък с координатите на върховете на кратко записаната полилиния LWPline, като не почиства индексът 10 в началото, но почиства списъка от нули, логически нули и празни множества. Ако колежката прояви интерес бих могъл да й предоставя цялостно решение на проблема, готов за последваща употреба по програмен път за конкретната й цел, или друго решение -електонна таблица, или програма за управление на база от данни. Тази функция не може да върши работа за пълно записаната PLine, за това се организира циклична или матрична (apply-mapcar-lambda…) процедура с (entnext) записите на главната дефиниция. Но тъй-като предполагам, че колежката е проектант геодезист или свързана с това дейност с линейни обекти, то може би, ще й свърши работа… Отново Ви благодаря за проявеното отношение!

  9. Николай Ангелов
    | #9

    Г-н Цукев, забелязах нередност при изписването на горния израз и поставянето му през клипборда /copy-paste/ ще върне грешен отговор. Това се дължи на апострофите (`) пред append и (nil). Той трябва да е (‘) този, има някакво клавиатурно несъответствие при win 7. Но трябва да изследвам въпроса… Изразът трябва да изглежда така:
    (apply ‘append(subst ‘nil ‘(nil)(mapcar ‘(lambda(x)(list(assoc 10 (list x))))(entget(car(entsel))))))
    и тогава работи
    следният израз ще почисти и индексът 10 пред списъка с координати:
    (apply ‘append(subst ‘nil ‘(nil)(mapcar ‘(lambda(x)(list(cdr(assoc 10(list x)))))(entget(car(entsel))))))
    възможно е когато публикувам настоящето апострофът отново да се замени, което ще се дължи на разлика в кодовите таблици ако това стане ще Ви пиша отново. С уважение Николай Ангелов

  10. Николай Ангелов
    | #10

    Да – точно това се случва – апострофът се смени, когато натиснах Публикувай коментара – ИМА НЕСЪОТВЕТСТВИЕ При кодовите таблици! Апострофът трябва да е вертикалната чертичка а не наклонената – ще направя справка с кодовите таблици !

  11. Николай Ангелов
    | #11

    Внимавайте при програмиране! Всички проблеми идват от клавиатурната подредба САЩ-международна… Възможно е и офис 2007/2010 да я променя, защото видях и такива коментари в нета… Много дини под една мишница-така е! С две думи – проблемът се решава с клавиатурна подредба Английски-САЩ, или Английски-Канада, тогава обаче задължително се деинсталира САЩ – международна… Апострофът, трябва да е вертикалната чертичка – знакът за апостроф, а не наклонената – знакът за тежко ударение!

КОМЕНТИРАЙТЕ:
  1. Bisher keine Trackbacks

 

Този сайт използва "бисквитки". Научи повече тук.

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close