10.12.2020 15:23    

barangulsay
Merhaba

Autocad den başka bir programa çizim aktarmak için uzantısı geo olan bir Lisp'e ihtiyacım var. Elimde daha önce oluşturulmuş bir lisp var ama çizimi autocadden export edip diğer programa çağırdığımda koordinatlar tam yerleşmiyor. Dolayısı ile kullanamıyorum.

Autocaddeki çizimi geo uzantılı dosyaya çevirebilen kimse var mı acaba?

Teşekkürler

14.12.2020 07:49    

ehya
Merhaba,

Autocad'in export seçenekleridne GEO formatı yok.
Lisp yazılabilmesi için GEO formatının ne olduğunu bilmek gerekir.
Lisp dosyası açık kaynak kod ise gönderebilirmisiniz?

07.01.2021 09:18    

barangulsay
Alıntı
ehya :
Merhaba,

Autocad'in export seçenekleridne GEO formatı yok.
Lisp yazılabilmesi için GEO formatının ne olduğunu bilmek gerekir.
Lisp dosyası açık kaynak kod ise gönderebilirmisiniz?



Merhaba
Dosya yükleyemedim sanırım
Açık kodunu yazayım o halde
Dosya uzantısı .geo oluyor
---------------------------------------------

Kod:

;; free lisp from cadviet.com
;;; this lisp was downloaded from https://www.cadviet.com/forum/topic/33919-c%E1%BA%A7n-lisp-chuy%E1%BB%83n-dwgdxf-sang-plaxis/
  (defun dxf(ent code)
   (cdr (assoc code (entget ent)))
)
(defun p2s(p)
   (apply 'strcat (mapcar '(lambda (x) (fullstr (rtos x 2 Accuracydigit) 14)) p))
)
(defun line2param(ent)
   (list (p2s (dxf ent 10)) (p2s (dxf ent 11)))
)

(defun lwpolyline2param(ent / tt z)
   (setq
  z  (dxf ent 38)
  tt (vl-remove-if '(lambda (x) (/= (car x) 10) ) (entget ent))
  tt (mapcar '(lambda (x) (p2s (append (cdr x) (list z)))) tt)
   )
   tt
)

(defun polyline2param(ent / kq)
   (setq ent (entnext ent)
  kq nil)
   (while (and ent (= (dxf ent 0) "VERTEX"))
     (setq kq (append kq (list (p2s (dxf ent 10))))
    ent (entnext ent)
     )

   )
   kq
)


(defun getpointindex(pp / tmp)
   (if (setq tmp (member pp points))
     (1+ (- (length points) (length tmp)))
     (length (setq points (append points (list pp))))
   )
)

(defun fullstr(str num / sl)
   (setq sl (- num (strlen str)))
   (repeat sl
     (setq str (strcat " " str))
   )
)
(defun converttogeometry()
   (setq
  index 0
         sl (if ss (sslength ss) 0)
   )
   (repeat sl
     (setq ent (ssname ss index)

     )
     (cond
((= (dxf ent 0) "LINE") (setq tmp (line2param ent)))
((= (dxf ent 0) "LWPOLYLINE") (setq tmp (lwpolyline2param ent)))
(T (setq tmp (polyline2param ent)))
     )

     (setq pline (strcat (fullstr (itoa (length tmp)) 5) "  - points on layerboundary" (fullstr (itoa index) 6) "\n      ")
    currentnumberinrow 0)

     (foreach point tmp
(setq pline (strcat pline (fullstr (itoa (getpointindex point)) 5))
      currentnumberinrow (1+ currentnumberinrow))
(if (>= currentnumberinrow 10)
  (progn
    (setq currentnumberinrow 0
  pline (strcat pline "\n      "))
  )
)
     )
     (setq plines (append plines (list pline))
    index (1+ index))
   )         
   (princ)
)

(defun getinput()
(princ "\nPlease select LINE, POLYLINE: ")
(setq ss (ssget '((0 . "*LINE")))
Accuracydigit (getint "\nEnter a integer value to choose Accuracy level (1=0.1, 2=0.01, 3=0.001,...)<2>: ")
Accuracydigit (if Accuracydigit Accuracydigit 2)
fname (getfiled "Please specify [.geo] file" (getvar "dwgprefix") "geo" 1)
)


(defun expten(count / kq)
(setq kq 1.0)
(repeat count
   (setq kq (* 10.0 kq))
)
)
(defun writeoutput()
(setq fhnd (open fname "w"))
(if (not fhnd)
   (alert (strcat "error when write to " fname))
   (progn
     (write-line (strcat
         "GEOMETRY FILE FOR THE M-SERIES\n"
         "==============================================================================\n"
         "==========================    BEGINNING OF DATA     ==========================\n"
         "POINTS      Accuracy = " (fullstr (rtos (/ 1.0 (expten Accuracydigit)) 2 4) 12) "\n"
  (fullstr (itoa (length points)) 5) "  - Number of geometry-points -"  
       )
fhnd
     )
     (setq index 1)
     (foreach point points
(write-line (strcat (fullstr (itoa index) 8) point) fhnd)
(setq index (1+ index))
     )
     (write-line "LAYERS" fhnd)
     (write-line (strcat (fullstr (itoa (1- (length plines))) 5) "  - Number of layers -") fhnd)

     (setq index 0)
     (foreach pline plines
(write-line pline fhnd)
(setq index (1+ index))      
     )
     (write-line "" fhnd)
     (write-line "END OF DATA FILE" fhnd)
     (close fhnd)
   )
)
)

(defun c:cad2geo( / ss)
(setq points nil)
(setq plines nil)
(getinput)
(converttogeometry)
(writeoutput)
(alert "Export to [.geo] file successfully!")
(princ)
)

ProhibiT (07.01.2021 10:12 GMT)

07.01.2021 14:04    

ehya
Kodlar ile ilgili bir sıkıntı yok.
Nesnelerin koordinatlarını güzelce listelemiş.
Burada dikkat edilmesi gereken, programın kabul ettiği doğru GEO dosyasının yapısı nasıl?

Bunu bilmeden lispin doğru yada yanlış olduğunu söylemek doğru değil..

07.01.2021 14:52    

barangulsay
Alıntı
ehya :
Kodlar ile ilgili bir sıkıntı yok.
Nesnelerin koordinatlarını güzelce listelemiş.
Burada dikkat edilmesi gereken, programın kabul ettiği doğru GEO dosyasının yapısı nasıl?

Bunu bilmeden lispin doğru yada yanlış olduğunu söylemek doğru değil..



Lisp zaten line'lardan oluşan kapalı bir alanı tanımlamak için hazırlanmış, sonra da uzantısı .geo olacak şekilde bir dosyaya aktarıyor ve Plaxis programından bu kapalı alanı oluşturacak geo dosyasını import ederek, autocaddeki alanı program içinde çizdiriyorum. Çünkü programın eski versiyonunu kullanıyorum ve autocaddeki alanı plaxis e başka türlü import edemiyorum. Program geo dosyasını import ettiğinde doğru çalışsa, plaxis hemen kapalı alanları bir nevi region gibi kapatıyor ve bir "alan" oluşturuyor. Sorun şu: Ne hikmetse bu programın yazarı virgülden sonra 1,2,3 basamağa duyarlı yapayım derken bir şekilde noktalar birbirini yakalamıyor ve geo dosyasını import ettiğimde "kapalı alanlar oluşmuyor" ÇÜNKÜ noktalar birbirini yakalamıyor. Bu arada upload ettiğim resimleri görebiliyor musunuz ?

Mesela .geo dosyasını notepad ile açınca çıkan görüntü şu


GEOMETRY FILE FOR THE M-SERIES
==============================================================================
========================== BEGINNING OF DATA ==========================
POINTS Accuracy = 0.01
6 - Number of geometry-points -
1 0 0 0
2 157.77 126.49 0
3 181.78 126.49 0
4 347.09 0 0
5 114.14 0 0
6 228.81 0 0
LAYERS
5 - Number of layers -
2 - points on layerboundary 0
1 2
2 - points on layerboundary 1
2 3
2 - points on layerboundary 2
3 4
2 - points on layerboundary 3
4 1
2 - points on layerboundary 4
2 5
2 - points on layerboundary 5
3 6

END OF DATA FILE

08.01.2021 06:40    

ehya
Kullanmış olduğunuz plaxis adlı programı bilmediğim için neden doğru bir şekilde import etmiyor. Yorum yapmak yanlış olur.
Oluşturulan geo dosyasındaki yapıda bir sorun yok. Koordinatlar doğru bir şekilde aktarılmış.
Burada sorun olan kullandığınız program olabilir. Oluşturduğunuz geo dosyasını yanlış okuyor, yada okuması gereken doğru geo dosyası bu değil.

> 1 <
Copyright © 2004-2022 SQL: 1.231 saniye - Sorgu: 56 - Ortalama: 0.02199 saniye