18.08.2023 08:44    

recep_xyz
Mesala Örnek olarak Prohibit Hocamızın yapmış olduğu ALN.LSP alıntısında Karakterde bir sorun yokken
(defun DcLcrT (fL /)
(setq fL (open fL "w")) (write-line "ALn:dialog{" fL)
(write-line " label="**** Alan Hesaplama ve Yazdırma ****";" fL)
(write-line " : boxed_column{" fL)
(write-line " : edit_box{label=" Yazılacak Birim/Çizim Birimi:";key="Luf";edit_width=4;}" fL)
(write-line " : edit_box{label="Ondalık Basamak Sayısı:";key="dpL";edit_width=4;}" fL)
(write-line " : edit_box{label=" Yazı Yüksekliği:";key="txh";edit_width=4;}" fL)
(write-line " : edit_box{label=" Alan Yazısı Öneki:";key="Lea";edit_width=4;}" fL)
(write-line " : edit_box{label=" Alan Yazısı Soneki:";key="Tra";edit_width=4;}" fL)
(write-line " : toggle{label=" Çevre Yazılacak mı?:";key="Cvr";}" fL)
(write-line " spacer;spacer;}" fL)
(write-line " : boxed_row{: text{key="CpR";value=" fL)
(write-line cp2 fL)
(write-line ";}}" fL)
(write-line " ok_cancel;}" fL)
(close fL))
BU durum ALN.DCL yazılırken Türkçe Karakterler de sorun yaşanıyor oluşan dcl ise
ALn:dialog{
label="**** Alan Hesaplama ve Yazd�rma ****";
: boxed_column{
: edit_box{label=" Yaz�lacak Birim/�izim Birimi:";key="Luf";edit_width=4;}
: edit_box{label="Ondal�k Basamak Say�s�:";key="dpL";edit_width=4;}
: edit_box{label=" Yaz� Y�ksekli�i:";key="txh";edit_width=4;}
: edit_box{label=" Alan Yaz�s� �neki:";key="Lea";edit_width=4;}
: edit_box{label=" Alan Yaz�s� Soneki:";key="Tra";edit_width=4;}
: toggle{label=" �evre Yaz�lacak m�?:";key="Cvr";}
spacer;spacer;}
: boxed_row{: text{key="CpR";value=
" Hazırlayan:M.Şahin Güvercin - www.cizimokulu.com"
;}}
ok_cancel;}
Burada lisp çalışmasında bir sıkıntı yok Yazı bozuk olsada dcl elle de düzeltilebilir . Ama ben yogun bir prosedür olarak lisp ile koordinat, mesafe , ölçü , türkçekarakterlerde sorunlar başka bir proğramda kullanırken prosedür sorunu oluşuyor bu durum lisp içinde nasıl düzeltilir bulamadım.
elle editleme Bu durumda düzenlemek baya zaman alıyor.

18.08.2023 09:45    

baha07
sunda sorun var mi ?

Kod:

;;;============================================================================
;;; Komut adi: ALn                                                         
;;; Belirlenen secim setindeki tum LwPoLyLine, PoLyLine, 3DPoLyLine, SpLine,   
;;; CircLe, Region ve Hatch objelerinin alanlarini hesaplayip merkezine yazar.
;;; Sonunda istenirse Yazilan alanlarin toplamini secilen yere yazar.         
;;; Hazirlayan: M. Sahin Guvercin - www.cizimokulu.com 
;;;============================================================================
(defun c:ALn (/ Tarea Bndry L n naLan aLan Cevr ip dro sp sp0  a)
  (setvar "cmdecho" 0) (command "undo" "group") (vl-load-com)
  (if (not Luf) (setq Luf 1))
  (if (not dpL) (setq dpL (getvar "dimdec")))
  (if (not txh) (setq txh (* (getvar "dimscale") (getvar "dimtxt"))))
  (if (not Lea) (setq Lea "A="))
  (if (not Tra) (setq Tra " mІ"))
  (if (not Cvr) (setq Cvr "1")) (cpp)
  (if (not (findfile "ALn.dcL"))
    (DcLcrT (setq fL (strcat (substr (setq Lct (findfile "acad.exe"))
                       1 (- (strlen Lct) 8)) "Support\\ALn.dcL")))
    (if (/= cp2 (setq fL (open (findfile "ALn.dcL") "r")
                      a (repeat 12 (read-line fL))))
      (progn (close fL) (DcLcrT (setq fL (findfile "ALn.dcL"))))))
  (if (< (setq dcl_id (load_dialog "ALn.dcL")) 0) (progn (alert cp2) (exit)))
  (setq what_next -1)
  (while (< what_next 2)
    (if (not (new_dialog "ALn" dcl_id)) (progn (alert cp2) (exit)))
    (set_tile "Luf" (rtos Luf)) (set_tile "dpL" (itoa dpL))
    (set_tile "txh" (rtos txh)) (set_tile "Lea" Lea) (set_tile "Tra" Tra)
    (set_tile "Cvr" Cvr) (action_tile "Luf" "(LufR)")
    (action_tile "dpL" "(dpLR)")  (action_tile "txh" "(txhR)")
    (action_tile "Lea" "(setq Lea (get_tile "Lea"))")
    (action_tile "Tra" "(setq Tra (get_tile "Tra"))")
    (action_tile "Cvr" "(setq Cvr (get_tile "Cvr"))")
    (action_tile "accept" "(done_dialog 2)")
    (action_tile "cancel" "(done_dialog 3)")
    (setq what_next (start_dialog)))
  (if (= what_next 3) (progn (alert cp2) (exit)))
  (princ "\n  Alanlari yazilacak (Lw)PoLyLine Objeleri: ")
  (setq Bndry (ssget (list (cons 0
                "SpLine,*poLyLine,Circle,Ellipse,Region,Hatch"))))
  (if (not Bndry) (progn (alert cp2) (exit)))
  (setq L (sslength Bndry) n -1 Tarea 0)
  (while (< (setq n (1+ n)) L)
    (setq naLan (entget (setq nLn (ssname Bndry n))))
    (command "_.Area" "O" (cdr (assoc -1 naLan)))
    (if (> (getvar "area") 0) (progn
        (setq aLan  (/ (getvar "area") (* Luf Luf))
              Tarea (+ Tarea aLan)
              Cevr (/ (getvar "perimeter") Luf))
        (mnmx (ssname Bndry n))
        (setq iP   (mapcar '(lambda (pr1 pr2) (/ (+ pr1 pr2) 2.0)) mnp mxp)
              aLan (LeaTra aLan) Cevr (LeaTra Cevr))
        (if (/= Lea "") (setq aLan (strcat Lea aLan)
                              Cevr (strcat "C=" Cevr)))
        (if (/= Tra "") (setq aLan (strcat aLan Tra)
                     Cevr (strcat Cevr (substr Tra 1 (1- (strlen Tra))))))
        (entmake (list (cons 0 "TEXT") (cons 10 iP) (cons 40 txh) (cons 1 aLan)
                       (cons 50 0.0) (cons 72 1) (cons 11 iP)))
        (if (= Cvr "1") (progn
            (setq iP (mapcar '(lambda (pr1 pr2) (- pr1 pr2)) iP
                             (list 0.0 (* txh 1.5151) 0.0)))
            (entmake (list (cons 0 "TEXT") (cons 10 iP) (cons 40 txh)
              (cons 1 Cevr) (cons 50 0.0) (cons 72 1) (cons 11 iP))))))))
  (if (> L 1) (progn
      (setq Tarea (LeaTra Tarea))
      (if (/= Lea "") (setq Tarea (strcat Lea Tarea)))
      (if (/= Tra "") (setq Tarea (strcat Tarea Tra)))
      (entmake (list (cons 0 "TEXT") (cons 10 (list 0.0 0.0 0.0))
                     (cons 11 (list 0.0 0.0 0.0)) (cons 40 txh) (cons 1 Tarea)
                     (cons 50 0.0) (cons 72 0) (cons 11 iP)))
      (setq dro (entlast) sp0 (list 0.0 0.0 0.0) a nil)
      (princ "\nToplam Alanin yazilacagi yer <Enter=Cikis>: ")
      (while (and (/= 3 (car (setq sp (grread T 4 2)))) (/= (car sp) 25))
        (if a (redraw (ssname a 0) 4)) (TrnsLt dro sp sp0)
        (entdel dro) (setq sp0 (cadr sp))
        (if (setq a (ssget sp0 (list (cons 0 "*text"))))
          (redraw (ssname a 0) 3)) (entdel dro))
       (if (= (car sp) 3) (progn (TrnsLt dro sp sp0) (entdel dro)
           (if (setq tp (ssget sp0 (list (cons 0 "*text")))) (progn
               (setq ctx (entget (ssname tp 0))
                     ctx (subst (cons 1 Tarea) (assoc 1 ctx) ctx))
               (entmod ctx) (entupd (cdr (assoc -1 ctx)))) (entdel dro)))
         (entdel dro)))) (command "undo" "e") (prin1)
)
(defun LufR ()
  (if (= (substr (setq Luf (get_tile "Luf")) 1 1) ".") (setq Luf (strcat "0" Luf)))
  (if (or (= Luf "") (<= (atof Luf) 0) (not (numberp (read Luf))))
    (setq Luf 1) (setq Luf (atof Luf))) (set_tile "Luf" (rtos Luf))
)
(defun dpLR ()
  (if (or (= (setq dpL (itoa (atoi (get_tile "dpL")))) "")
          (< (atoi dpL) 0) (not (numberp (read dpL))))
    (setq dpL 0) (setq dpL (atoi dpL))) (set_tile "dpL" (itoa dpL))
)
(defun txhR ()
  (if (= (substr (setq txh (get_tile "txh")) 1 1) ".") (setq txh (strcat "0" txh)))
  (if (or (= txh "") (<= (atof txh) 0) (not (numberp (read txh))))
    (setq txh (* (getvar "dimscale") (getvar "dimtxt")))
    (setq txh (atof txh))) (set_tile "txh" (rtos txh))
)
(defun DcLcrT (fL /)
  (setq fL (open fL "w")) (write-line "ALn:dialog{" fL)
  (write-line "  label="**** Alan Hesaplama ve Yazdirma ****";" fL)
  (write-line "  : boxed_column{" fL)
  (write-line "    : edit_box{label=" Yazilacak Birim/Cizim Birimi:";key="Luf";edit_width=4;}" fL)
  (write-line "    : edit_box{label="Ondalik Basamak Sayisi:";key="dpL";edit_width=4;}" fL)
  (write-line "    : edit_box{label="              Yazi Yuksekligi:";key="txh";edit_width=4;}" fL)
  (write-line "    : edit_box{label="          Alan Yazisi Oneki:";key="Lea";edit_width=4;}" fL)
  (write-line "    : edit_box{label="         Alan Yazisi Soneki:";key="Tra";edit_width=4;}" fL)
  (write-line  "    : toggle{label="  Cevre Yazilacak mi?:";key="Cvr";}" fL)
  (write-line "      spacer;spacer;}" fL)
  (write-line "  : boxed_row{: text{key="CpR";value=" fL)
  (write-line cp2 fL)
  (write-line ";}}" fL)
  (write-line "  ok_cancel;}" fL)
  (close fL))
(defun cpp ()
  (setq cp1 (list 32 72 97 122 253 114 108 97 121 97 110 58 77 46 222 97)
        cp1 (append cp1 (list 104 105 110 32 71 252 118 101 114 99 105 110 32
                               45 32 119 119 119 46 99 105 122 105 109 111))
        cp1 (append cp1 (list 107 117 108 117 46 99 111 109 34)) cp2 """
        L   (length cp1) n -1)
  (while (< (setq n (1+ n)) L) (setq cp2 (strcat cp2 (chr (nth n cp1))))))
(defun mnmx (oB /)
  (setq oB  (vla-getboundingbox (vlax-ename->vla-object oB) 'mnp 'mxp)
        mnp (vlax-safearray->list mnp) mxp (vlax-safearray->list mxp))
)
(defun TrnsLt (pr1 pr2 pr3 /)
  (vla-transformby (vlax-ename->vla-object pr1) (vlax-tmatrix
      (list (list 1 0 0 (- (car (cadr pr2)) (car pr3)))
            (list 0 1 0 (- (cadr (cadr pr2)) (cadr pr3)))
            (list 0 0 1 (- (caddr (cadr pr2)) (caddr pr3)))
            (list 0 0 0 1))))
)
(defun LeaTra (vL / uz sr frk yer)
  (setq vL (rtos vL 2 dpL) uz (strlen vL) sr 1)
  (while (and (< sr uz) (/= (substr vL sr 1) ".")) (setq sr (+ sr 1)))
  (setq yer (- uz sr) frk (- dpL yer))
  (if (and (= yer 0) (/= dpL 0)) (setq vL (strcat vL ".")))
  (while (> frk 0) (setq vL (strcat vL "0")) (setq frk (- frk 1)))
  (if (= (substr vL 1 1) ".") (setq vL (strcat "0" vL)))
  (setq vL vL)
)
(princ "\n Hazirlayan: M.Sahin Guvercin - www.cizimokulu.com") (prin1)

18.08.2023 12:06    

recep_xyz
Arkadaşım burada sorun çıkmaz sen burada Türkçe karakterleri
yeni ---> edit_box{label="Ondalik Basamak Sayisi:";
eski ---> edit_box{label="Ondalık Basamak Sayısı:"; Lisp içinde editlemişşin
Benim amacım Türkçe Karakterleri TXT dosyasına doğru bir formatta yazdırmak için
[Bu karakterleri: Ç , ç , Ğ , ğ , İ , ı , Ö , ö , Ş , ş , Ü , ü ]
Lisp ile txt (ASCI) dosya oluşturduğumda doğru bir formatta olması için bende şu anda lispim olmadığından bu örnek üzerinden *.dcl üzerinden tanımlamaya çalıştım. Benim anlatmak istediğim bu lisp değildi Teşekkürler.
Ben burada bir editör proğramına(UltraEdit32,Notepad++) Makro yaparak düzenleme Bul-Değiştir ile ikinci bir işlem yaparak Prosedürleri düzeltiyorum. Bu işlemlerden kurtulmak için ne yapılabilir bunu öğrenmek için uğraşıyorum.
kısaca lsp içinde
(write-line "satır içeriği" Dosya -Adı)
acaba başka ne yapabiliriz Türkçe karakterleri için ya da yazı formatı mı eklenmelidir ve nasıl bir kod ? yada kayıt formatını utf8 nasıl kaydettirilir?

recep_xyz (21.08.2023 07:03 GMT)

20.08.2023 15:00    

yazgunesi
Önemli bir husus için hatırlatma yapmak isterim!


Yazınızda bahsettiğiniz "write-line" bir komut ismidir. Bunu "satır-yazma" olarak değiştirmek yanlış bir düşünce tarzı. Mevcut Autolisp programın çalışma mantığını öğrenmeye çaba göstermek daha mantıklı. Autocad'te bulunan visual lisp editörünü kullanmanızı öneririm. Harici metin editörleri de güzel ama en iyisi Autocad'te olanı kullanmak. Harici editörlerde olan kodları gösterme şekli sizi yanıltabilir. Nodepad ta da program yazarsınız. Ama notepad da yaptığınız programı test edemezsiniz.

21.08.2023 06:08    

recep_xyz
Arkadaşım beni anlamamışsınız Ben zaten lispi türkçe yazmıyorum. Zaten Çalışmazda....
Başka yaptığım programda prosedürü parabolik eğrilik hesaplamasında kullanıyorum
Bu programı exe yaptığımdan vede kodlama ile alakalı disk bozulduğundan düzenleyemiyorum zamanında türkçe veriler kullandım o yüzden prosedürü Lisple olusturmada türkçe karaktere ihtiyacım var.
.(NOT: Burada sorunlar win7 den Win 10 geçince bu sorunlar başladı. Önceden olmuyordu. )sebebini anlamak istedim.
Benim lisp Yazarken Prosedür oluşturan Nokta_no;koordinat; mesafe ;3d DİST; L; "EĞRİLİK";ülçüsü;"Parabolik_ Eğrilik";dist
otamatik olarak yazdırıyorum burada "" arası türkçe karakterler oluyor. bu işlemlerdeki karakterleri
(write-line "satır içeriği" Dosya -Adı) kodlaması ile doğru bir şekilde işleyemiyorum.
Bu sebeble Ultra edit ile bul değiştir uyguluyorum.
*** Lisp içinde karakterleri doğru olarak yapacak bir kodlama var mıdır? onu soruyorum.
Benim belirtmek istediğim dosya olusturulmasında hangi font-sembolojisini kulanacağı belirtilebilir mi?
Mesala "Courier New" "türkçe" font yapısı gibi
ilk dosya oluşturmada İngilizce karakter düzenlemeyi dikkate aldığını farkettim.

recep_xyz (21.08.2023 07:16 GMT)

21.08.2023 09:16    

recep_xyz
Arkadaşlar burada deneme incemelerimde SORUNUMU çözdüm.
Herkeze teşekkürler. hatamız Lisp sorunu değil yetki sorunuymuş
Admin ve kullanıcılar olarak açılmış olan bilgisayarlarda
Option files kısmına Kendi Kullanımınızda olan klasörler altında (mesala masaüstünde bir klasör )add olarak eklerseniz. ve bu Klasöriçinde lispi düzenleyerek ve kayıt yerini bu klasör olarak ayarlayarak çalışırsanız bu türkçe karakter işleyememe sorunu çözülüyor.
Örnek LİSP C:/Users/kulanıcı .adı/Desktop/lispp/text.lsp klasörde
(defun c:gg()
(setq ff (open "C:\\Users\\kulanıcı .adı\\Desktop\\lispp\\test.txt" "w"))
(write-line " 1 a b c ç d e f g ğ h ı i j k l m n o ö p r s ş t u ü v y z x q w " ff)
(write-line " 2 A B C Ç D E F G Ğ H I İ J K L M N O Ö P R S Ş T U Ü V Y Z X Q W " ff)
(setq ff (close ff))
)
sonuç C:/Users/kulanıcı .adı/Desktop/lispp/test.txt klasörde
1 a b c ç d e f g ğ h ı i j k l m n o ö p r s ş t u ü v y z x q w
2 A B C Ç D E F G Ğ H I İ J K L M N O Ö P R S Ş T U Ü V Y Z X Q W
dosyaya düzgün olarak verileri yazdı.

recep_xyz (22.08.2023 10:31 GMT)

> 1 <
Copyright © 2004-2022 SQL: 1.286 saniye - Sorgu: 62 - Ortalama: 0.02074 saniye