20.01.2017 08:41    

onuraydin16
Sadece aln.lsp dosyası çalışsa yeter bana diğerlerinin önemi yok :)

20.01.2017 13:52    

BLack|E
Merhaba
Ustalarıma sorum olacaktı bir kaç tane
Aşağıdaki ok lispinde
1. Komutu tekrar çalıştırdığımda benden bir önceki kullandığım değeri anımsamasını nasıl yaparız.
Kod:

(setq en (getreal "\nOk Isaretinin Genisligini Giriniz:"))

2. Object Snap (kenetleme) ayarlarında bütün modları Select All yapmam için sıfır yerine ne yazmam gerekir.
Kod:

(command "osmode" 0)
Bütün kenetleme kodlarını yazmamız mı gerekiyor yoksa.


Kod:

(defun c:ok (/ osm en okn1 okn2 mesafe aci n1 n2 n3 n4 n5 n6 )
(setq osm (getvar "osmode"))(command "_undo" "group")
(setq en (getreal "\nOk Isaretinin Genisligini Giriniz:"))
(setq okn1 (getpoint "\nOk Isaretinin Baslangic Noktasini Giriniz:"))
(setq okn2 (getpoint okn1 "\nOk Isaretinin Bitis Noktasini Giriniz:"))
(setq mesafe (distance okn1 okn2))
(setq aci (angle okn1 okn2))
(setq n1 (polar okn1 (- aci (/ pi 2))(* 0.5 en)))
(setq n2 (polar n1 aci (- mesafe (* 1.5 en))))
(setq n3 (polar n2 (- aci (/ pi 2)) en))
(setq n4 (polar okn1 (+ aci (/ pi 2))(* 0.5 en)))
(setq n5 (polar n4 aci (- mesafe (* 1.5 en))))
(setq n6 (polar n5 (+ aci (/ pi 2 )) en))
(command "osmode" 0)
(command "pline" n1 n2 n3 okn2 n6 n5 n4 "close")
(setvar "osmode" osm)(command "_undo" "e")
(princ)
)

20.01.2017 18:58    

yazgunesi
Alıntı
BLack|E :
Merhaba
Ustalarıma sorum olacaktı bir kaç tane...



1) Komutu tekrar çalıştırdığımda benden bir önceki kullandığım değeri anımsamasını nasıl yaparız ?

Kod:

(setq en (getreal "\nOk Isaretinin Genisligini Giriniz  < "en" >  :"))


Yanlış hatırlamıyorsam çift tırnak kullanılarak böyle olması lazım. Eğer hata veririse strcat komutunu kullanarak birleştirme yapmak fayda sağlaybilir..

Kod:

;;  strcat kullanım örneği
(princ (strcat "\n Şu anki Block ismi : " "  -->> " (cdr (assoc 2 blkselect)) " <<--" ))


2) Object Snap (kenetleme) ayarlarında bütün modları Select All yapmam için sıfır yerine ne yazmam gerekir ?

Osmode'yi açıp kapatmazsak, Autocad belli bir zaman sonra saçmalamaya başlamaktadır, yanlış çizim yapılması gibi sonuçlar ortaya çıkar.Sadece bir adet çizgi çizdirilmesi yada sadece 1 adet daire çizmek için herhangi bir sorun yoktur. Birden fazla çizim objesi var ise o zaman osmode'yi kullanmak gereklidir. Ben bu tip çizimlere kendimce komplex çizimler diye adlandırdım, yanı karmaşık çizim, birden bazla çizim objesi olan şekiller.. Autolisp programın başında osmodeyi değişkene kaydedip sıfırlıyoruz, program sonunda eski haline getiriyoruz.

Autodesk forum sitesinde osmode ile ilgili açıklama

Özel osmode durumu gerekebilir, mesela sadece endpoint aktif olsun yada endpoint ve mindpoint ikisi birden aktif olsun..Bunun çözümü Autocad'te istediğin osnap modlarını seç aktif olacak olanları, sonra klavyeden osmode yazıyoruz. Ekranda gözüken değer güncel osmode değeridir.O sayısal değeri de Autolisp programda kullanırsın.

Osmode'yi açıp kapatma işlemi sadece çizim yaptırmak amacıyla kullanmak; işin kolayına kaçmak oluyor. Entmake kullanarak ta çizim yaptırılabilir ve osmode kullanmaya gerek kalmaz. Osmode zaten esas kullanım amacı yakalama noktaları tayini içindir, çizim yaptırmak için değil. Visual Lisp ile de çizim yaptırabiliriz, osmode kullanmanıza gerek kalmaz.

yazgunesi (21.01.2017 06:03 GMT)

24.01.2017 08:09    

BLack|E
Kod:

(setq en (getreal "\nOk Isaretinin Genisligini Giriniz  < "en" >  :"))

1. Verdiğiniz < "en" > datası ile olmuyor hocam, strcat kullanım örneğini anlamadım açıkcası. Benim aşağıdaki örneğe uygulayarak gösterseniz mutlu olurum.
Kod:

(defun c:ok (/ osm en okn1 okn2 mesafe aci n1 n2 n3 n4 n5 n6 )
(setq osm (getvar "osmode"))(command "_undo" "group")
(setq en (getreal "\nOk Isaretinin Genisligini Giriniz:"))
(setq okn1 (getpoint "\nOk Isaretinin Baslangic Noktasini Giriniz:"))
(setq okn2 (getpoint okn1 "\nOk Isaretinin Bitis Noktasini Giriniz:"))
(setq mesafe (distance okn1 okn2))
(setq aci (angle okn1 okn2))
(setq n1 (polar okn1 (- aci (/ pi 2))(* 0.5 en)))
(setq n2 (polar n1 aci (- mesafe (* 1.5 en))))
(setq n3 (polar n2 (- aci (/ pi 2)) en))
(setq n4 (polar okn1 (+ aci (/ pi 2))(* 0.5 en)))
(setq n5 (polar n4 aci (- mesafe (* 1.5 en))))
(setq n6 (polar n5 (+ aci (/ pi 2 )) en))
(command "osmode" 0)
(command "pline" n1 n2 n3 okn2 n6 n5 n4 "close")
(setvar "osmode" osm)(command "_undo" "e")
(princ)
)


2. verdiğiniz linkte bütün osnap kodları mevcut. fakat buradanda anladığım 16384 kodunu yazdığında osnapların hepsi seçilmiş olması lazım ama olmuyor.
Kod:

(setvar "osmode" 16384)

ya da
Kod:

(command "osmode" 16384)



    0 NONe
    1 ENDpoint
    2 MIDpoint
    4 CENter
    8 NODe
    16 QUAdrant
    32 INTersection
    64 INSertion
    128 PERpendicular
    256 TANgent
    512 NEArest
    1024 Geometric CEnter
    2048 APParent Intersection
    4096 EXTension
    8192 PARallel
    16384 Suppresses the current running object snaps

24.01.2017 08:55    

Travaci
BLack|E


Sitede bununla ilgili 100 lerce örnek bulabilirsin. Sorulacak en son soru bu olmalı.

15.02.2017 11:56    

BLack|E
Selam.
Herkese kolay gelsin. Üzerinde çalıştığım, dcl arayüzüyle desteklediğim bir lisp var. Daha önce hocalarıma özelden sordum fakat çözüme ulaşamadım. Sorunumu biraz sadeleştirdim. action_tile 'lerdeki değerleri alıp lispte if fonksiyonlarında kullanmak istiyorum, bir türlü yapamadım. Aşağıda kullandığım dcl yüzün fotoğrafı var. Ardından dcl kod ve lsp kodlar mevcut. Yardımcı olursanız beni çok mutlu edersiniz. Bu belirsizlikten kurtulmak isterim. Nerede yanlış yapıyorum?
------------------------------------------------

------------------------------------------------
Kod:

member: dialog {
label = "FINLANDIYA KESİM / OYMA LİSP'İ V.1.1";
: paragraph {
: text_part {
label = "Designed and Created";  alignment = centered;
}
: text_part {
label = "By. M.Ertan KIRTIL";  alignment = centered;
}
}
: column {

: column {
  fixed_height=true;
  fixed_width=true;
 
  : boxed_row {
  label = "KESİM TİPİ";

: column {
 
: image {
   key          = "Tss1";
   aspect_ratio = 1.0;
   fixed_width  = true;
   vertical_margin = none;
   width        = 20;
   height       = 6;
   color        = 0;
   value="1";
}
  : image {
   key          = "Tss2";
   aspect_ratio = 1;
   fixed_width  = true;
   vertical_margin = none;
   width        = 20;
   height       = 6;
   color        = 0;
}
  : image {
   key          = "Tss3";
   aspect_ratio = 1;
   fixed_width  = true;
   vertical_margin = none;
   width        = 20;
   height       = 6;
   color        = 0;
}
}

: boxed_column {
           label=" KESİM TİPİ SEÇİMİ ";
  : radio_button {label = "KESİM-1 (T1)"; key   = "Ts1";  }
  : radio_button {label = "KESİM-2 (T2)"; key   = "Ts2"; value="1"; }
  : radio_button {label = "KESİM-3 (T3)"; key   = "Ts3"; }
}
}
  :boxed_row {
           label=" KESİM YÖNÜ ";
           
        : image {
            color = black ;
            fixed_height = true ;
            fixed_width = true ;
            height = 9 ;
            key = "ana" ;
            width = 36 ;
            alignment  = centered ;
        }
  : boxed_column {
  label = "KESİM YÖNÜ SEÇİMİ";
  : radio_button {label = "SOL ÜST KESİM &(A)"; key   = "a_tipi";  }
  : radio_button {label = "SOL ALT KESİM &(B)"; key   = "b_tipi";  }
  : radio_button {label = "SAG ÜST KESİM &(C)"; key   = "c_tipi"; value="1"; }
  : radio_button {label = "SAG ALT KESİM &(D)"; key   = "d_tipi";  }
}
}
: edit_box {
     label = "YANAK GENİŞLİĞİ";
     key   = "LENG";
     edit_width=15;
   }
}
: boxed_row {
ok_cancel;
}
}
}

------------------------------------------------
Kod:

(defun c:fn ( / )

(setq dcl_id (load_dialog "fn.dcl"))
(if (not (new_dialog "member" dcl_id))(exit))   


(start_image "Tss1")
(setq max_x (dimx_tile "Tss1"))
(setq max_y (dimy_tile "Tss1"))
(slide_image 0 0 max_x max_y "Tr1")
(end_image)

(start_image "Tss2")
(setq max_x (dimx_tile "Tss2"))
(setq max_y (dimy_tile "Tss2"))
(slide_image 0 0 max_x max_y "Tr2")
(end_image)

(start_image "Tss3")
(setq max_x (dimx_tile "Tss3"))
(setq max_y (dimy_tile "Tss3"))
(slide_image 0 0 max_x max_y "Tr3")
(end_image)

(start_image "ana")
(setq max_x (dimx_tile "ana"))
(setq max_y (dimy_tile "ana"))
(slide_image 0 0 max_x max_y "ana_ekran")
(end_image)

(set_tile "LENG" "50")

(mode_tile "LENG" 2)
(mode_tile "Ts1" 2)
(mode_tile "c_tipi" 2)

(action_tile "LENG" "(setq LEN $value)")
(action_tile "Ts1" "(setq Tip1 "1")(mode_tile "LENG" 2)")
(action_tile "Ts2" "(setq Tip2 "2")(mode_tile "LENG" 2)")
(action_tile "Ts3" "(setq Tip3 "3")(mode_tile "LENG" 2)")
(action_tile "a_tipi" "(setq Types1 "1")(mode_tile "LENG" 2)")
(action_tile "b_tipi" "(setq Types2 "2")(mode_tile "LENG" 2)")
(action_tile "c_tipi" "(setq Types3 "3")(mode_tile "LENG" 2)")
(action_tile "d_tipi" "(setq Types4 "4")(mode_tile "LENG" 2)")
  (action_tile "cancel" "(done_dialog 1)")
  (action_tile "accept" "(done_dialog 2)(setq LEN (atof (get_tile "LENG")))"
  )

  (setq flag (start_dialog))
 
  (unload_dialog dcl_id)


(if (= flag 2)
(islem)
)
  (princ))
 
(defun islem ( / )


(if (and(= Tip1 1)(= Types1 1))
(progn
....................
....................
)

(if (and(= Tip1 1)(= Types2 1))
(progn
....................
....................
)

(princ)) ;;;;;;;;;;;;;;;;;;;SON

15.02.2017 14:07    

Travaci
BLack|E


Kendıne gore duzenlersın, aradıgın hersey bu kucuk kodda mevcut.
Eklıyecegın sadece olasılıklara gore ıslemı yaptırmak.
Kendı kodunda gereksız ve hatalı yerlerı tespıt et.
Bu kod uzerınde sormak ıstedıgın bırsey olursa buralardayız.

Kod:

(defun c:Test (/ dg dz)
  (if (not (new_dialog "Test" (setq dg (load_dialog "Test.dcl")))) (exit))
  (if (not ns) (setq ns "1"))
  (if (not ss) (setq ss "A"))
  (if (not cc) (setq cc "50"))
  (setq ons ns oss ss occ cc) 
  (set_tile ns "1")
  (set_tile ss "1") 
  (set_tile "C" cc)
  (action_tile "1" "(setq ns "1")")
  (action_tile "2" "(setq ns "2")") 
  (action_tile "3" "(setq ns "3")") 
  (action_tile "A" "(setq ss "A")")
  (action_tile "B" "(setq ss "B")") 
  (action_tile "cancel" "(setq ns ons ss oss cc occ)") 
  (action_tile "accept" "(setq dz t cc (get_tile "C")) (done_dialog)") 
  (start_dialog)
  (unload_dialog dg)
  (if dz (alert (strcat ns "-" ss "-" cc)))
  (princ) 
)

Kod:

Test : dialog {
  label = "Test";
  spacer;
  : boxed_column {
    : column {
      : radio_button { label = " 1"; key = "1"; }
      : radio_button { label = " 2"; key = "2"; }
      : radio_button { label = " 3"; key = "3"; }
    }
  }
  : boxed_column {
    : column {
      : radio_button { label = " A"; key = "A"; }
      : radio_button { label = " B"; key = "B"; }
    }
  }
  : boxed_column { 
    : edit_box { label = " C"; key = "C";}
  } 
  ok_cancel;
}

Travaci (16.02.2017 05:40 GMT)

15.02.2017 17:40    

BLack|E
Tamam hocam, derdime derman oldunuz kaç haftadır uğraşıyordum. Bu kodlar istediğimi verecek. Çok teşekkür ederim. Sağolun.

02.06.2017 04:33    

LEYLO
Autocad çiziminde kullanılan nesnelerin (blok, line ...vb) oluşturulma tarihini autolisp ile öğrenebilir miyiz? İlgilenen arkadaşlara şimdiden teşekkürler.

02.06.2017 06:01    

ehya
LEYLO




Bırak autolisp'i, başka bir yöntemle öğrenme şansı varsa haberim olsun :)

02.06.2017 07:23    

LEYLO
Anlaşıldı hocam. :)

07.06.2017 15:42    

muratsemih
Arkadaşlar Merhaba,
Bir lisp yazıyorum 8 tane farklı yere 8 tanede bir başka yere alt alta yazı yazılacak yazdığım koordinatlara yazılar tam oturmuyor yazıyla gelen şekillere yapışıp o şekilde geliyorlar bunu çözümünü ve neyden kaynaklandığın bilen var mı?

08.06.2017 05:26    

Travaci
muratsemih


Yazdırmadan önce Osmode u kapayın.

15.06.2017 08:59    

LEYLO
Merhaba arkadaşlar,

Autocad de ilk açılıştaki standard text yüksekliğini lisp ile değiştirmek istiyorum. Yardımcı olursanız sevinirim.

15.06.2017 09:25    

alumina
Alıntı
LEYLO :

Kod:

(defun c:th (/)
  (setvar 'textsize h) (princ)
)

15.06.2017 10:36    

LEYLO
teşekkürler..

28.07.2017 15:08    

BLack|E
Herkese selam,
Sorumu basitçe sormak için aşağıdaki resimden faydalandım.
Sorum şöyle Polar Array'ı seçmek için P harfinin altı çizgili olduğu için p'ye basmamız yeterli,
ya da Select objects butonunu aktif hale getirmek için S harfinin altı çizgili olduğu için S harfine basmamız yeterli
Pick Center Point butonunu aktif hale getirmek için herhangi bir harf atanmamış, bu konuda ne yapılabilir.
Array komutunun ara yüzündeki işlemleri yazıp öğrenmek için çalıştığım bir lisp'te kullanmayı düşünü yorumda.


28.07.2017 16:02    

ehya
mevcut komuta birşey yapılamaz.
kısayol ataması dcl'de "mnemonic" diye geçiyor. bu da autolisp değil. müdahale etmeye müsade etmez.

lisp'de yapmak için, zaten butona ikon atayamıyorsunuz. o butona . (nokta) atarsınız.. kısayolu da aynı şekilde belirtirseniz çözüm olur diye düşünüyorum.

04.09.2017 14:22    

muratsemih
Arkadaşlar Merhaba,
Bir lisp yazıyorum tamamlandığında başka bilgisayarda da çalıştırmam gerekli.....blocklar yapıp gerekli blocku çağırma kısmıda var yazılan lispin içerisinde.....şimdi ise soruma gelelim. Yaptığım blockların başka bilgisayarlarda da çıkabilmesi için nasıl bir yol izlemeliyim?

04.09.2017 17:40    

badabum
Alıntı
LEYLO :
Autocad çiziminde kullanılan nesnelerin (blok, line ...vb) oluşturulma tarihini autolisp ile öğrenebilir miyiz? İlgilenen arkadaşlara şimdiden teşekkürler.



Tarih bilgisinin tutulduğunu sanmıyorum, ama hangi nesne ilk hangisi son öğrenebiliriz

komut NNN

Kod:

;;WİNDOW SECÇERSEN OKUMA YÖNÜNDE NUMARALIYOR
;;SELECT OREDER İSE AUTOCAD ÇİZİM SIRASININ TERSİNE GORE NUMARALANDIRIYOR

(vl-load-com)
(defun c:NNN (/ aDoc op ptlst mn mx get_glob_real start i oldlayer ss)

(defun get_glob_real (var msg mod prec def / tmpH)
    (if (or (not var) (/= (type var) 'REAL))
      (setq var def)
    )
    (initget 6)
    (setq
      tmpH (getreal (strcat "\n" msg " <" (rtos var mod prec) ">: "))
    )
    (if (/= tmpH nil)
      (setq var tmpH)
    )
    var
)

  (setvar "cmdecho" 0)
  (setq oldLayer (getvar "CLAYER"))
  (setq aDoc (vla-get-ActiveDocument (vlax-get-acad-object))
i    0
  )
  (if (tblsearch "Layer" ".E-NNN")
    (command "._layer" "_thaw"     ".E-NNN" "_on"
     ".E-NNN" "_unlock"   ".E-NNN" "_set"
     ".E-NNN" ""
    )
    (command "._layer" "_make" ".E-NNN" "_color" 2 ".E-NNN" "")
  )

(setq *_nnn_th (get_glob_real *_nnn_th "\nText height" 2 2 1.00))
  (cond
    ((and
       (progn (initget "W S")
      (setq
op (getkword
     "\nSelection Method [Window/Select Order] <Window>: "
   )
      )
      (if (not op)
(setq op "Window")
      )
      T
       )
       (princ "\nSelect objects or press <ENTER> for all: ")
       (or (ssget)
   (ssget "_X" '((410 . "Model")))
       )
       (setq start (car (_VL-TIMES)))       ;; işlem süresi ölçer satır 1/2
       (progn
(vlax-for
   itm
      (setq ss (vla-get-ActiveSelectionSet aDoc))
   (vla-getboundingbox itm 'mn 'mx)
   (setq
     ptlst
      (cons
(mapcar
  (function (lambda (a b) (/ (+ a b) 2.)))
  (vlax-safearray->list mn)
  (vlax-safearray->list mx)
)
ptlst
      )
   )
)
(vla-delete ss)
T
       ) ;progn
       (foreach
box
(if (eq op "W")
   (vl-sort
     ptlst
     (function (lambda (ip1 ip2) (< (car ip1) (car ip2)))
     )
   )
   (reverse ptlst)
)
(vlax-invoke
   (vlax-get (vla-get-ActiveLayout aDoc) 'Block)
   'AddText
   (itoa (setq i (1+ i)))
   box
   *_nnn_th ; Text Height
)
       )
     )
    )
  )
  (setvar "cmdecho" 1)
  (setvar "CLAYER" oldLayer)
  (princ (strcat "\n" (rtos (/ (- (car (_VL-TIMES)) start) 1000.) 2 4) " saniye."))  ;; işlem süresi ölçer satır 2/2
  (princ)
)

Copyright © 2004-2022 SQL: 1.679 saniye - Sorgu: 99 - Ortalama: 0.01696 saniye