M2P LISPI

M2P LISPI

gomito

(defun c:m2p (/)
(print "***Orta noktayı bulma... ")
(setq osmod (getvar "OSMODE"))
(setq nok_1 (getpoint "
İlk nokta: "))
(setq nok_2 (getpoint "
İkinci nokta: "))
(setq n1_x (car nok_1)
n1_y (cadr nok_1))
(setq n2_x (car nok_2)
n2_y (cadr nok_2))
(setq nok_x_f (/ (- n1_x n2_x) 2)
nok_y_f (/ (- n1_y n2_y) 2))
(setq nok_x (- n1_x nok_x_f)
nok_y (- n1_y nok_y_f))
(setq nok_yeni (list nok_x nok_y))
(setvar "OSMODE" 0)
(command "line" nok_yeni)
(setvar "OSMODE" osmod)
(princ)
)


YUKARIDAKI LISP YIKLENDIGINDE KOMUT GIBI CALISIYOR. YANI KOMUT SATIRINA ´´M2P´´ YAZINCA 2 NOKTA SECIYORSUNUZ AORTASINI LINE ILE ISARETLIYOR.
BENIM ISTEDIGIM KOMUT ICERISINDE 2 NOKTANIN ORTASINI BULMASI. TIPKU 2005 VERSIYONUNDAKI M2P GIBI.
BUNU NASIL YAPABILIRIM? MUNULERE TANITARAK OLABILIR MI? OLURSA NASIL OLUR?[G12]
COK LAZIM DA...

2005-12-15 14:10:15

Cvp

dumtisdumtis

daha önceki mesajına şu adresi yazmıştım. Bu adreste popup menüye mid3d diye bir komut ekliyor amca. İstediğin bu olabilir.

http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=2372062&linkID=2475176

2005-12-13 21:42:03

Cvp

gomito

adrese gitmistim ama ingilizce bilmedigimden oturu pek incelememistim.
inceliycem, tesekkurler

2005-12-13 21:58:22

Cvp

dumtisdumtis

walla benim de ingilizcem pek iyi değildir ama elimden geldiğince çevirmeye çalıştım. umarım faydası olur.

Applying Customization: A Different Midpoint Osnap
[img]http://images.autodesk.com/adsk/images/2372064_auth_dave.jpg[/img]By Dave Pitzer
Adım 1
İki nokta arasındaki uzaklık aşağıdaki şekilde hesaplanır:
Midpoint = ( Ypt2 - Ypt1 )/2 + Ypt1

[img]http://images.autodesk.com/adsk/images/2372067_2_5_pitz_cust_01.gif[/img]
Şekil 1:İki noktanın ortasını bulmak için formül.

Benzer şekilde X ve Z koordinatları için formüller:
Midpoint = Xpt2 - Xpt1/2 + Xpt1
ve
Midpoint = Zpt2 - Zpt1/2 + Xpt1
İhtiyacımız olan bir noktanın X,Y ve Z koordinatları. Bunları kullanarak orta noktalarını bulacağız.
Adım 2
Şimdi fonksiyonumuzu uygulamak için gerekli LISP kodunu yazalım.
LISP, mapcar adında tam aradığımız işi yapan bir fonksiyona sahip. Mapcar, bir listenin bütün üyelerine belirtilen fonksiyonu uygular (matematiksel fonksiyonlar dahil). LISP’de koordinatları liste olarak düzenleyebiliriz. Bu işimizi daha da kolaylaştırır. Aşağıda mapcar’ın nasıl çalıştığına dair bir örnek var:
(mapcar ´1+ ´(3 5 8)) -> (4 6 9)

(mapcar ´/ ´(10 6 2) ´(2 2 2) -> (5 3 1)

(mapcar ´/ ´(100 50 6) ´(50 25 3) -> (2 2 2)

(mapcar ´- ´(10 6 0) ´(5.0 4.0 0.0) -> (5.0 2.0 0.0)
Bizim formülümüz için de benzer işler yapılacak:
• İki nokta arasındaki uzaklıklar her koordinat ekseni için bulunacak.
• Farklar 2.0’a bölünecek (tam sonuç elde etmek için 2.0’a böldük).
• Sonuç birinci noktanın koordinatına eklenecek.
İfade aşağıdaki gibi olacak:
(mapcar ´+ pt1 (mapcar ´/ (mapcar ´- pt2 pt1) ´(2.0 2.0 2.0))))
Yukarıdaki ifade pt1 ve pt2 adında iki değişken içeriyor. Bu noktaları setq ve getpoint fonksiyonlarını kullanarak tanımlayabiliriz. Getpoint bize kullanıcıdan giriş almamızı sağlar. Aşağıda mid3d mid3d olarak çağırabileceğmiz fonksiyon bulunmakta:
(defun mid3d (/ pt1 pt2)
(setq pt1 (getpoint "
Pick first point: ")
pt2 (getpoint "
Pick second point: ")
)
(mapcar ´+ pt1
(mapcar ´/
(mapcar ´- pt2 pt1)
´ (2.0 2.0 2.0)))
)
Adım 3
Şu an hazırladığımız fonksiyon hafızaya yüklendi. Bu fonksiyonu POP 0 menüsüne ekleyip hehangi bir Osnap modu gibi kullanabiliriz. Buunu yapmak için önceki derslerde anlatıldığı gibi bu komutu MNS menüsüne herhangi bir text editöründe eklemeniz gerekiyor. Değiştirilmiş menü kodu aşağıda. Eklenecek kısımlar koyu yazılıdır.
***POPO
**SNAP
[&Object Snap Cursor Menu]
ID_Tracking [Temporary trac&k point]_tt
ID_From [&From]_from
ID_MnPointFi [->Poin&t Filters]
ID_PointFilx [.X] .X
ID_PointFily [.Y] .Y
ID_PointFilz [.Z] .Z
[--]
ID_PointFixy [.XY] .XY
ID_PointFixz [.XZ] .XZ
ID_PointFiyz [<-.YZ] .YZ
[mid3d](mid3d)
[--]
ID_OsnapEndp [&Endpoint]_endp
And so on.

[img]http://images.autodesk.com/adsk/images/2372070_2_5_pitz_cust_02.gif[/img]
Şekil 2: mid3d osnap için değiştirilmiş POP 0 menüsü.
Not:mid3d fonksiyonunun otomatik olarak yüklenmesini istiyorsanız kodu acad.lsp veya acaddoc.lsp dosyasına kopyalamanız gerekiyor.
Print this page | Email this page

2005-12-14 02:33:35

Cvp

gomito

süpersin arkadas ya,
ben bu kadar yardımseverlik görmedim yani :)

dün aksam evde yaptım, acıklamaları okumadan, okusamda anlamadan tahmin yoluyla yaptım ve oldu. ama simdi ofiste kurcam aynı seyi ve senin cevirini okuyup neyi ne anlamısım bir bakiyim :) dilsizlik iste naparsın[G19]

2005-12-14 10:19:11

Cvp

gomito

evde dun aksam yapmıstım. ama simdi ofiste olmadı.
aynı seyleri tek tek yaptım ama...
pop menu de mid3d gorundu. ama lisp calısmıyo nedense.
asagıdaki gibi...

Command: m MOVE
Select objects: Specify opposite corner: 1 found

Select objects:
Specify base point or displacement: (mid3d)
Pick first point:
Pick second point: ; error: bad function: nil

2005-12-14 10:55:01

Cvp

gomito

neyse, ben en iyisi evdeki acad2000doc.lsp dosyasını getirip deniyim en iyisi. onda sorun cıkmamıstı cunku.

2005-12-14 10:56:28

Cvp

reques

Dumtis tam bir döküman olmuş nerdeyse ekleyi ver abi silinip girtmesin yazık olur.

2005-12-15 01:09:29

Cvp

dumtisdumtis

bi iki eksiği var. MEsela MNS menüsü nedir anlatmamış, onları tamamlayayım, ekleyeceğim.

2005-12-15 11:51:38

Cvp

gomito

TESEKKUR EDIYORUM DUMTIS,
OFISDE DE KURDUM SONUNDA VE GUZEL CALISIYO.

VE GERCEKTEN DERSLERE EKLERSENIZ BASKALARI DA FAYDALANIR.

KOLAY GELSIN.

2005-12-15 14:10:15