04.06.2011 11:14    

formadal
Seçtiğim layerlar dışında kalan layerları frez yapmak istiyorum

örnek vermek gerekirse
l
layer isolet diye bir puton var

bunda layerları seciyorsunuz

kalan layerlar izole (lock yada hide) oluyor...

macro veya lisp varmı..

daha önce bir macro ya kulanmıştım.Bu makro ekranda seçim yaptırp
bu seçilmişin layer ını current layer yapıyor ve bunun dışındakileri freez liyordu.


bu macro da işimi görür (şu anda elimde yok aradım bulamadım)
..Ancak ben birkaç layer seçip kalanların freez olmasını istiyorum.

teşekürler.

formadal (04.06.2011 12:29 GMT)

04.06.2011 12:11    

ehya
Hiçbirşey anlamadım bu konudan????

konuyu yazarken ki harf hataları, mesajınızdaki cümle düşüklükleri konuyu anlamamızda sıkıntı çıkarıyor. :no

lütfen mesajınızı ve konu başlığınızı güzel türkçemize uygun bir şekilde güncelleyin.

04.06.2011 15:01    

ProhibiT
Arkadaşımızın mesajı belirgin bir örnek olduğu için, forum ortamında sık yapılan yanlışlardan bahsetmek isterim. yazdıklarım doğrudan konuyu açan arkadaşımıza yönelik olmayıp genellemedir.

mesajlarınızı ve sorunuzu düzgün bir türkçe ile yazmak, kendinize ve okuyanlara saygının gereğidir. düzgün bir türkçe kullanmanın yanında, bahsettiğiniz kavramları bilerek kullanmak, en başta sizin yararınızadır.

macro, özellikle ms office programlarından türeyen aptal bir komut dizisinin adıdır. bir programlama dili ya da program değildir! prensipte, macro yazılmaz! kaydedilir. programa, "şimdi yapacağım işlemleri aklında tut" dersiniz, program sizin yaptığınız işlemleri, daha sonra aynen (yorumsuz ve mantık yürütmeden) tekrarlamak için saklar.

bu işlemler sırasını her program başka bir dille kaydeder. örnek olarak ms office programlarında (mesela excel'de) bir macro kaydederseniz, bunlar visual basic dilinde, autocad'de autolisp dilinde kaydedilir.

hangi ortamda olursa olsun, macro dediğimiz, sonuçta aptal (mantık işlemleri yapamayan) bir komutlar serisidir. autocad'de bunun bir adım ötesi de var, script. bir gurup komut serisinin -.Scr uzantılı bir dosyaya kaydedilerek, yazıldıkları sırada çalıştırılmaları esasına dayanır. script bile macro'dan bir kaç fersah ileri, gelişmiş bir kavramdır.

kullanıcının bir macro kaydederken, işlemlerin visualbasic ya da autolisp dilinde kaydediliyor olması, bahsedilen programlama dillerini bilmeyi gerektirmez, bilindiğini de göstermez!

bir tek siz değil, sizin gibi pek çok arkadaşımız gurup halinde işlem yapan her kavrama macro diyip geçiyorlar. bu en başta autocad'e sonra da, autolisp, visuallisp veya framework .Net kullanarak fonksiyonlar ve programlar yazanlara saygısızlık olduğu gibi, bilmediğiniz kavramlarla başkalarının da karmaşaya düşmesine de sebep olursunuz. böyle bir şeye kimsenin hakkı olmasa gerek!

bilmediğiniz kavramlardan bahsederken özenli olun. daha doğrusu bilmediğiniz kavramlardan öylesine bahsetmeyin. kavramı bilmediğinizde de, kendi kafanızdan tarzanca tercümeler yapmayın. türkçemiz çok kuvvetli bir dildir. "skyscraper" demiş adamlar, biz sözlüğe bakıp "gök tırmalayan" dememişiz, "gökdelen" demişiz. gene adamlar "computer" demişler, hemen kelime kelime tercüme edip "hesaplayıcı" dememişiz, kavramı türkçe düşünüp "bilgisayar" demişiz. dünyanın hiç bir dilinde kavramı bu kadar güzel karşılayan bir kelime yok. pek çok örneği var ama, autocad kavramlarından "explode" işlemini ele alalım. bu işlemden bahsederken neden "patlatmak" deniyor ki? herhalde kıt sözlük bilgisiyle kavramı anlamadan söylenmiş bir şeydir. "explode" için sözlüğe baktığımızda; "patlatmak, havaya uçurmak, infilak etmek, patlamak; bozmak, yıkmak, kırılmak, çürütmek; aksini ispatlamak; köpürmek; patlak vermek" gibi karşılıklar buluruz. autocad'deki explode kavram olarak bunlardan hangisine daha yakın sizce? bence patlatmak değil! bozmak, yıkmak, çürütmek çok daha anlamlı. türkçe'nin muhteşem sözcük türetme özelliğini kullanarak yenisi bile türetilebilir. ama bu türetme sizlerin ve bizim haddimizi aşar herhalde. arkadaşlarımıza tavsiyem, dublaj türkçesi ile anında tercüme yapma konusunda bu kadar cesur olmayınız. emin değilseniz, güvenilir bir kaynakta görmemişseniz, "explode" demek türkçe'ye ihanet değildir. türkçe güçlüdür, şefkatlidir, yabancı kelimeleri bile kendi gramatiğine uydurup doğru kavramı bulmanızı sağlar. altını çizerek söylemek isterim ki; ifade edemediğiniz şeyi bilmiyorsunuz demektir. bu gerçeğin farkında olmayıp, "aman canım n'olucak ki" derseniz, bu da sizin öğrenme konusunda önünüzü tamamen kapatacak bir engel oluşturur. kavramsal anlamını bilmediğiniz arkası boş sözcüklerle uğraşıp durursunuz. bir şey öğrenemez, bilmeyince soramaz, soranlara anlatamazsınız.

benzer konularda bazı arkadaşlarımızın işine yarayabilir düşüncesiyle bir autolisp fonksiyon paylaşmak istiyorum. fonksiyonu çalıştırıp, ekranda obje seçmeye devam ettiğiniz sürece, seçilen objenin bulunduğu layer'ı freeze eden bir fonksiyon. bir konuya dikkatinizi çekmek isterim; autocad'de genel olarak, "current layer" freeze edilemez. bu fonksiyonda, seçilen obje "current layer" da bile olsa ilgili layer freeze edilir.
Kod:

(defun c:frzLyr (/ Lyrs Lyr)
  (setvar "cmdecho" 0)  (command "undo" "group")
  (write-line "\nFreeze etmek istediğiniz Layer'(lar)dan bir(er) obje seçiniz:")
  (while (setq Lyrs (ssget ":s"))
    (setq Lyr (entget (tblobjname "Layer" (cdr (assoc 8 (entget (ssname Lyrs 0))))))
  Lyr (subst (cons 70 1) (assoc 70 Lyr) Lyr))
    (entmod Lyr) (entupd (cdr (assoc -1 Lyr))))
  (command "undo" "e") (princ)
)
(write-line "\nHazırlayan, M. Şahin Güvercin - www.autocadokulu.com")

kolay gelsin.

ProhibiT (04.06.2011 15:12 GMT)

04.06.2011 15:37    

formadal
Yorumlar için teşekürler.

bu q klavye yabancı dilde programlar..Derken türkce güzel dilimiz malesef bende melezleşti

herhalde autocad ne zaman türkçeye cevrilirse (mesela kendini kendi yaratan gibi mesela) bende anca toplarım.

e bir dil..Bir uygarlık...Yok olmak istemiyorsa herşeyden önce teknolisini üretmeli..Yazılım olur...Donanım olur.

cevalar için teşekürler..Ancak sorumun cevabı bu değil.


ekranda alfabetik ve numaratik olmayan 300 500 layer var..Ben bunların 3(örnekğin) tanesi yada haricinde tamamının freez olmasını istiyorum.



nedeni :3dmax atuocad dosyasını çağırır ken

skip all frozen layers ...Diye bir secenek var...Bunu kulanarak cağırma
yapıyorum...

tabi autocad dosyasında o anda anlık olarak istemediğm layerlar dışındakileri
frozen yapmam lazım....


^c^c_laymcur;;^c^c_layer;freeze;*;; bu bir macro aptal komut....Putona atanır

ne yapar ekranda curent olmasını (donmamasını ) istediğini layer secip bu putona bastıızmı o layer curent olur ve diyerleri freeze olur..
tabi ben 1 den fazla layer seçip diyerlerini freez lemek istediğim
için bana daha zeki bi komut lazım oluyor haliyle




bu lisp değil macro

eyer ihtiyacımı görcek bir macro yada lisp varsa ilginize şimdiden teşekürler.



gavurun programı anlamaya çalışmak yeterince ağır iş...Dahada ağırlaştırmayalım lütfen...

formadal (04.06.2011 15:54 GMT)

04.06.2011 18:36    

ProhibiT
Pek çok arkadaş için örnek olması bakımından, üşenmeden uzun uzun anlatmaya çalışacağım :)

bu iş için bu kadar karmaşık yollar denemeye gerek yok ki.
- autocad drawing içinde 300~500 layer var.
- bunlardan 3~5 tanesi dışında tümünün freeze edilmesi gerekiyor.

yukarıda macro diye bahsettiğiniz butona ^c^c_laymcur;;^c^c_layer;freeze;*;; komutları atanmış.

burada ^c'ler ctrl+c (yani cancel), ";" ler ise enter işlevini görüyor. 2 defa cancel girilerek herhangi bir komut içindeysek çıkması sağlanıyor.

laymcur isimli fonksiyon çalıştırılıyor. (aslında bu bir autocad komutu değil, external bir fonksiyon, yani az akıllı da olsa, bir fonksiyona ihtiyaç duyulmuş) seçilen objenin bulunduğu layer, current layer yapılıyor.

gene 2 defa cancel girildikten sonra (macro aptal olduğu için, ne olur ne olmaz diye her komutun başına bu cancel konuyor) layer komutu çalıştırılarak tüm layer'lar freeze ediliyor. (elbette, current layer freeze edilemiyor)

bir önceki mesajımda da bahsettiğim gibi düz mantık bir komut gurubunu yorumsuz çalıştırıyor.

bahsettiğiniz butonu kullanarak bütün layer'ları (current layer dışında) freeze ettikten sonra, 3~5 layer'ı layer manager'dan thaw etmek öyle uzun bir işlem değil ki.

elinizde hiç bir şey yoksa,
autocad komut satırından la girin.
açılan layer manager penceresinde boş bir yere sağ tıklayın
açılan listeden "select all" seçin.
bütün layer'lar seçili duruma gelince, herhangi birinin freeze ikonuna tıklayın.
bütün layer'lar (current layer dışında) freeze oldu.
layer manager'da boş bir yere tıklayıp, layer seçimini geçersiz kılın.
thaw etmek istediğiniz bir kaç layer'ın freeze ikonuna tıklayarak işlemi bitirin.

şimdi, aptal komut serisi yerine akılıı bir fonksiyon yazdığımızı düşünelim.
fonksiyon akıllı ya, "bu aptal kullanıcının freeze etmek istemediği layer adlarını ben nereden bileceğim!" diye düşünüp, bize sormaz mı?

sordu, biz bu akıllı fonksiyona freeze etmek istemediğimiz layer isimlerini nasıl bildireceğiz?
- ya sırasıyla freeze edilmeyecek layer isimlerini yazacağız...
Kod:

(defun C:FrzLyer (/ La)
  (command "_.Layer" "Freeze" "*" "")
  (while (setq La (getstring "\nFreeze edilmeyecek Layer adını giriniz: "))
    (if (tblsearch "Layer" La) (command "_.Layer" "Thaw" La "")))
)
görüldüğü gibi, akıllı fonksiyon her Layer ismi girdiğimizde, bu aptal kullanıcı ya yanlış yazdıysa diye, girdiğimiz Layer adının Gerçekte mevcut olup olmadığını kontrol etmek zorunda kalıyor. layer adlarını dikkatli özenli bir şekilde doğru yazmak zorundayız.
anlaşılan bu yaptığımız pek doğru bir iş değil...

- ya da sırasıyla freeze edilmeyecek layer'lardan birer obje seçeceğiz.
Kod:

(defun C:FrzLyr ()
  (setq La (append))
  (while (setq Lyr (car (entsel "\nFreeze edilmeyecek Layer'da bir obje seçiniz: ")))
    (setq Lyr (cdr (assoc 8 (entget Lyr))) La (append La (list Lyr))))
  (setq L (length La) n -1)
  (command "_.Layer" "Freeze" "*" "")
  (while (< (setq n (1+ n)) L) (command "_.Layer" "Thaw" (nth n La) ""))
)
Bunun da kendince sevimsizlikleri ve riskleri var.

her iki akıllı fonksiyon, ne yapacağını net olarak anladı, bizim ona bildirdiğimiz layer'lar dışındaki bütün layer'ları freeze etti.

... bu akıllı fonksiyonları kullanmak, yukarıda bahsettiğimiz autocad komutlarıyla yaptığımız işlemden daha mı kolay ve pratik? bence hiçte öyle değil. neden incir çekirdeğine eziyet ettik ki?

eğer cevabınız; "benim freeze etmeyeceğim layer adları belli ve sabit, her zaman sormasına gerek yok" ise; yeryüzünde onca autocad kullanıcısı varken, bir tek kullanıcının ihtiyacına yönelik bir fonksiyon yazılırsa, buna "akıllı" denebilir mi? o zaman kullanıcı akıllı olacak, kendi aptal fonksiyonunu yazacak. hiç bir aptal, başkası için aptallık edecek kadar aptal değildir.

kolay gelsin.

04.06.2011 22:28    

formadal
..Son satırda veddiğiniz..


lisp süper oldu..

çok teşekür..Ederim.


karışık bir cizimi 3d max modellerken....Import...Ederken ...Sadece üzerinde çalışacağım katmalrı alıyorum.

mesela giydirme cephe modeler ankraj elamını doram kasa kanat cift cam fitilleri gibi...

bunlarıda maxde ayrı bir layer katmanına topluyorum...Kat bazında ..1 kat giy...2 kat giydirme gibi

dolaysı ile autocad de fitil cam doram ankraj ları dışında kalanı freze edip..Save yapıp 3dmax de selek un frozen ile imprt ediyorum.

bunlarıda arka arkaya tekrarlıyorum..

bu lisp süper oldu....

> 1 <
Copyright © 2004-2022 SQL: 1.017 saniye - Sorgu: 60 - Ortalama: 0.01694 saniye