Đến nội dung


Hình ảnh
- - - - -

[Thảo luận] Viết lại các hàm Express


  • Please log in to reply
194 replies to this topic

#121 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 05 December 2011 - 02:40 PM

Các hàm độc của Express lại là ARX bác Tuệ ạ. Còn những hàm bình thường, người ta viết được = Lisp, thì tất nhiên CVmems cũng sẽ viết được, và có thể còn hay hơn ấy chứ. Được hàm nào hay hàm ấy, và theo e thấy thì cũng nhiều người được lợi từ cái topic này r đó chứ ^^

Vậy ai thấy hàm nào độc thì quăng lên + giới thiệu chức năng -> ai biết thì viết lại, ko biết thì chờ
mình ngồi chờ. hehe
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#122 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 December 2011 - 03:00 PM

Vậy ai thấy hàm nào độc thì quăng lên + giới thiệu chức năng -> ai biết thì viết lại, ko biết thì chờ
mình ngồi chờ. hehe

Thay vì ngồi chờ, mình sử dụng Express cho xong
Chỉ Load cái Arx và mấy cái file fas mà ngại chi User có cài Express hay không?
Ngại chi mà ngại chi... he he
  • 0

#123 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 05 December 2011 - 04:08 PM

Thay vì ngồi chờ, mình sử dụng Express cho xong
Chỉ Load cái Arx và mấy cái file fas mà ngại chi User có cài Express hay không?
Ngại chi mà ngại chi... he he

hehe,
Bác Tue_NV nói cũng có lý, tuy nhiên các bạn viết lại cũng là 1 cách nâng cao khả năng của họ, đôi khi họ làm ra thứ mà ACET chưa chắc làm dc.
Have fun!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#124 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 December 2011 - 04:33 PM

hehe,
Bác Tue_NV nói cũng có lý, tuy nhiên các bạn viết lại cũng là 1 cách nâng cao khả năng của họ, đôi khi họ làm ra thứ mà ACET chưa chắc làm dc.
Have fun!

Quá có lý ấy chứ! Mình thì không chờ! Đã có sao ta không sử dụng nè! he he

Vấn đề mà bạn nói ở đây là viết lại để nâng cao khả năng tư duy thì mình OK vì mình có tham gia viết hàm trong topic này mà

Còn vấn đề viết lại hàm Express là để khỏi ngại User có cài Express hay không thì mình chưa tán đồng lắm vì lý do trên.
Nếu bạn sử dụng các hàm độc trong Express thì sao? Bạn phải xử lý như thế nào? Chắc cũng phải Load file ARX và mấy file fas lên (nếu bạn chưa cài)

Còn ACET chưa chắc làm được nhưng điều mà LISP viết thì mình không chắc vì mình chưa học ARX (nhưng hầu hết đều làm được vì ARX là 1 ngôn ngữ rất mạnh).
Và những điều ARX làm được nhưng với LISP thì không thể là 1 điều chắc chắn
  • 0

#125 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 05 December 2011 - 05:26 PM

Ví dụ hàm độc nào và tại sao phải sử dụng nó bác ơi ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#126 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 05 December 2011 - 06:11 PM

Còn ACET chưa chắc làm được nhưng điều mà LISP viết thì mình không chắc vì mình chưa học ARX (nhưng hầu hết đều làm được vì ARX là 1 ngôn ngữ rất mạnh).
Và những điều ARX làm được nhưng với LISP thì không thể là 1 điều chắc chắn

ARX làm được tất cả những gì lisp làm dc.
lisp ko thể làm dc tất cả những gì ARX làm dc (tốc độ của lisp <= ARX)
tuy nhiên nếu xài 1 thứ mà mình biết rõ thì vẫn hơn là xài 1 thứ mình ko biết gì hen.
nếu độc bằng ARX thì mình chơi ARX.
Thân!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#127 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 December 2011 - 07:51 PM

ARX làm được tất cả những gì lisp làm dc.
lisp ko thể làm dc tất cả những gì ARX làm dc (tốc độ của lisp <= ARX)
tuy nhiên nếu xài 1 thứ mà mình biết rõ thì vẫn hơn là xài 1 thứ mình ko biết gì hen.
nếu độc bằng ARX thì mình chơi ARX.
Thân!

Mình thì thấy biết cú pháp và công dụng của nó xem như là biết rồi bạn ạ, không thể nói là không biết gì
Suy ra cho Acet và các hàm Lisp cũng vậy. Không hiểu bạn đề cập thứ không biết là thứ gì?

Các hàm Lisp biết cú pháp và công dụng của nó thì OK
Các hàm acet biết cú pháp và công dụng của nó thì OK luôn vậy, không thể nói là không biết gì

Bạn đã từng chơi ARX chưa? Mình thì kém cỏi, chưa học được ARX, chỉ biết vận dụng chúng sao cho linh động và hiệu quả hơn mà thôi
  • 0

#128 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 05 December 2011 - 08:42 PM

Ví dụ hàm độc nào và tại sao phải sử dụng nó bác ơi ?

acet-sys-shift-down chẳng hạn. mình rất khoái dùng em nó nhưng không viết lại được. dùng thằng này để rẽ nhánh chương trình thì sướng thôi rồi, giảm bớt được tên lệnh, tăng cường tính linh hoạt cho 1 lệnh. giống như 1 số lệnh của cad ấy (lệnh trim hay extend là 1 ví dụ)
mình thử sử dụng grread để viết lại nó nhưng chịu thua. hàm grread chỉ nhận các phím ký tự của bàn phím. không nhận các phím điều khiển mới đau
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#129 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 December 2011 - 09:27 PM

acet-sys-shift-down chẳng hạn. mình rất khoái dùng em nó nhưng không viết lại được. dùng thằng này để rẽ nhánh chương trình thì sướng thôi rồi, giảm bớt được tên lệnh, tăng cường tính linh hoạt cho 1 lệnh. giống như 1 số lệnh của cad ấy (lệnh trim hay extend là 1 ví dụ)
mình thử sử dụng grread để viết lại nó nhưng chịu thua. hàm grread chỉ nhận các phím ký tự của bàn phím. không nhận các phím điều khiển mới đau

Đúng là Grread không nhận các phím điều khiển như Ctrol , Shift

Ví dụ hàm độc nào và tại sao phải sử dụng nó bác ơi ?

Bên cạnh đó có các hàm mà mình thường hay sử dụng trong chương trình
Hàm
- ACET-SS-DRAG-MOVE
- ACET-SS-DRAG-ROTATE
- ACET-SS-DRAG-SCALE

Chào các bạn, Thiep sưu tầm được một số hàm trong thư viện Express. Xin gửi đến các bạn:
* Hàm ACET-SS-DRAG-MOVE dùng để tạo hình ảnh động khi move 1 tập hợp chọn, có cú pháp như sau:
(ACET-SS-DRAG-MOVE ss pt [prompt] [hightlight(cursor)]), trong đó
- ss là tập hợp chọn
- pt là tọa độ điểm thứ 1 (from point)
- [hightlight(cursor)] là các hình thức của cursor khi tập hợp chọn di chuyển, có các tùy chọn 0, 1, 2, không bắt buộc.
Hàm sẽ trả 1 tọa độ điểm thứ 2 (to point), và sử dụng điểm 1 và 2 này trong lệnh ".move".
* Tượng tự như hàm trên, có các hàm sau:
- ACET-SS-DRAG-ROTATE
- ACET-SS-DRAG-SCALE
.....


  • 0

#130 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 05 December 2011 - 10:41 PM

acet-sys-shift-down chẳng hạn. mình rất khoái dùng em nó nhưng không viết lại được. dùng thằng này để rẽ nhánh chương trình thì sướng thôi rồi, giảm bớt được tên lệnh, tăng cường tính linh hoạt cho 1 lệnh. giống như 1 số lệnh của cad ấy (lệnh trim hay extend là 1 ví dụ)
mình thử sử dụng grread để viết lại nó nhưng chịu thua. hàm grread chỉ nhận các phím ký tự của bàn phím. không nhận các phím điều khiển mới đau


Đúng là Grread không nhận các phím điều khiển như Ctrol , Shift

Bên cạnh đó có các hàm mà mình thường hay sử dụng trong chương trình
Hàm
- ACET-SS-DRAG-MOVE
- ACET-SS-DRAG-ROTATE
- ACET-SS-DRAG-SCALE

Theo tìm hiểu của em thì :
- Thuần lisp nhận sự kiện có mặt [Ctrl và/hoặc shift] + Chuột phải, nếu chẳng may thuộc tổ hợp này thì bỏ qua ACET
- Nếu muốn check sự kiện này thì cũng có thể viết 1 đoạn ARX tường minh và ngắn gọn, search là thấy ngay ạ ^^. K thì e up theo cái này dịch sẵn rồi, load -> dùng hàm (shiftkeydown) hoặc (ctrlkeydown) ^^
http://www.cadviet.c...67_keylog17.rar

- ACET-SS-Drag-move + rotate e đang có trong Lib, bác search cũng sẽ thấy.
Không thể phủ nhận Express giúp ta rất nhiều, nhưng các lập luận e đã nói rõ rồi, đôi khi không cần phải cài cả win để đọc 1 file txt ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#131 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 05 December 2011 - 10:51 PM

Mình thì thấy biết cú pháp và công dụng của nó xem như là biết rồi bạn ạ, không thể nói là không biết gì
Suy ra cho Acet và các hàm Lisp cũng vậy. Không hiểu bạn đề cập thứ không biết là thứ gì?

Các hàm Lisp biết cú pháp và công dụng của nó thì OK
Các hàm acet biết cú pháp và công dụng của nó thì OK luôn vậy, không thể nói là không biết gì

Bạn đã từng chơi ARX chưa? Mình thì kém cỏi, chưa học được ARX, chỉ biết vận dụng chúng sao cho linh động và hiệu quả hơn mà thôi

Bạn nói đúng, biết cú pháp + biết công dụng -> xài dc.
Nhưng biết nó xử lý ra sau -> edit dc vẫn hơn.
Hình như có vài cái hàm nó có lỗi oái oăm trong topic lỗi khó hiểu thì phải. Chắc gì ACET ko bị giống vậy hehe chỉ là chưa thấy thôi

Mình chưa xài ACET bao giờ cả toàn chơi lisp do ít khi dùng chủ yều viết mấy cái lệnh dạng combine nhiều thao tác lại với nhau.

Nhưng quan điểm của mình là xài những thứ mình hiểu rõ thì vẫn hơn là xài thứ ng khác bảo là đúng. Do đó mình vẫn ủng hộ các bạn viết lại các hàm ACET mặc dù ko biết mình có xài ké dc ko. hehehe

ARX đã thử qua vài cái bé bé xinh xinh, nó có ưu điểm của nó nhưng cũng có nhược điểm mà cái nhược lớn nhất đối với đa số là khó.

Đúng là Grread không nhận các phím điều khiển như Ctrol , Shift

Bên cạnh đó có các hàm mà mình thường hay sử dụng trong chương trình
Hàm
- ACET-SS-DRAG-MOVE
- ACET-SS-DRAG-ROTATE
- ACET-SS-DRAG-SCALE

Muốn bắt phím điều khiển chắc phải hook keyboard.
mấy cái này thì mình nghĩ nó xài AcGiDrawableOverrule bạn xài .NET vẫn làm dc bằng cách kế thừa lớp DrawableOverrule
wrap từ lớp trên.
Nói thế thôi chứ muốn làm thì e khả năng mình ko tới, các bạn cứ nghiên cứu thử chơi cũng là 1 cách học mà.

Have fun!






  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#132 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 26 December 2011 - 07:18 PM

Mấy hàm extents hay dùng hình như chưa ai viết thì fải. mod ketxu chả chịu cập nhật tất cả các hàm đã viết lên #1 để anh em tiên theo dõi gì cả. Hình đã gửi
1. (ACET-ENT-GEOMEXTENTS ename) và (ACET-GEOM-EXTENTS ename): 2 hàm này giống hệt nhau, trả về 2 điểm Bottom Left và Top Right của đối tượng (chả hiểu bọn tây nó viết 2 hàm này khác nhau cái gì nữa)
(defun Cv:geoem-extents (en / LB RT)
(if en
(progn
(vla-getboundingbox (vlax-ename->vla-object en) 'LB 'RT)
(list (vlax-safearray->list LB) (vlax-safearray->list RT)))))
2. (ACET-GEOM-SS-EXTENTS-FAST ss): trả về 2 điểm Bottom Left và Top Right của tập hợp đối tượng (selection set). 2 hàm tương tự nó nữa là ACET-GEOM-SS-EXTENTS và ACET-GEOM-SS-EXTENTS-ACCURATE, 2 hàm này có thêm 1 đối số nữa dạng number hoặc để nil. mới đầu mình tưởng là hệ số offset nhưng ko fải, chưa hiểu là để làm gì.
(defun Cv:geom-ss-extents-fast (ss / i ssl lstx lsty lstz LB RT)
(if ss
(progn
(setq i -1 ssl (sslength ss))
(while (< (setq i (1+ i)) ssl)
(vla-getboundingbox (vlax-ename->vla-object (ssname ss i)) 'LB 'RT)
(setq lstx (cons (car (setq LB (vlax-safearray->list LB))) lstx)
lstx (cons (car (setq RT (vlax-safearray->list RT))) lstx)
lsty (cons (cadr LB) lsty)
lsty (cons (cadr RT) lsty)
lstz (cons (caddr LB) lstz)
lstz (cons (caddr RT) lstz)))
(list (list (apply 'min lstx) (apply 'min lsty) (apply 'min lstz)) (list (apply 'max lstx) (apply 'max lsty) (apply 'max lstz))))))
3. (ACET-SS-ZOOM-EXTENTS ss) : zoom đến tập hợp đối tượng (selection set)
(defun Cv:ss-zoom-extents (ss / box lstx lsty)
(if ss
(progn
(setq i -1 ssl (sslength ss))
(while (< (setq i (1+ i)) ssl)
(vla-getboundingbox (vlax-ename->vla-object (ssname ss i)) 'LB 'RT)
(setq lstx (cons (car (setq LB (vlax-safearray->list LB))) lstx)
lstx (cons (car (setq RT (vlax-safearray->list RT))) lstx)
lsty (cons (cadr LB) lsty)
lsty (cons (cadr RT) lsty)))
(vla-ZoomWindow
(vlax-get-acad-object)
(vlax-3d-point (list (apply 'min lstx) (apply 'min lsty)))
(vlax-3d-point (list (apply 'max lstx) (apply 'max lsty)))))))
3 code trên mình định cho thêm hệ số offset vào để dùng cho linh động nhưng lại thôi. để thế này cho nó giống bạn ACET
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#133 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 26 December 2011 - 09:22 PM

Hàm zoomextent nên là bước kế thừa của hàm ss-bounding bác ạ, trong hàm cuối bác có code ấy r thì add luôn vào đi th^^
E chờ chức năng add Link nó như ngày xưa thì làm, chứ sửa mãi mỏi lắm ạ
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#134 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 26 December 2011 - 10:33 PM

Mình tính làm thế rồi. nhưng vì làm thế thì lại fải thêm 1 bước sử lý điểm 3D thành 2D (hàm Cv:geom-ss-extents-fast trả về tọa độ điểm 3D) mà hàm vla-ZoomWindow thì không chơi 3D. như thế bước này vô nghĩa quá!
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#135 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 December 2011 - 02:58 PM

Ơ, tại e đọc dòng này này :<pre class="cadvietlispcode">(vla-ZoomWindow(vlax-get-acad-object)(vlax-3d-point (list (apply 'min lstx) (apply 'min lsty)))(vlax-3d-point (list (apply 'max lstx) (apply 'max lsty))</pre>
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#136 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 28 December 2011 - 11:06 AM

.......

- ACET-SS-Drag-move + rotate e đang có trong Lib, bác search cũng sẽ thấy.
......

- ACET-SS-Drag-move + rotate có trong Lib nào Ketxu ơi!
Tue_NV không thấy Lib nào có ACET-SS-Drag-move + rotate cả????
Nếu có thể Ketxu cho Tue_NV xin cái Link có hàm Lisp viết lại hàm ACET-SS-Drag-move + rotate .
Thanks
  • 0

#137 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 28 December 2011 - 01:04 PM

Có thể viết lại 3 hàm SS-Drag của acet bằng autolisp. chỉ khác 1 chút ở chế độ bắt điểm không được ngon như acet nhưng dùng được. bác sử dụng mấy hàm dưới khéo léo 1 chút là viết được thôi: Grread, redraw, osnap, grvecs và biến *error*. em đã viết 1 ứng dụng kiểu này nhưng không viết thành hàm con nên chưa post được.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#138 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 December 2011 - 10:20 AM

- ACET-SS-Drag-move + rotate có trong Lib nào Ketxu ơi!
Tue_NV không thấy Lib nào có ACET-SS-Drag-move + rotate cả????
Nếu có thể Ketxu cho Tue_NV xin cái Link có hàm Lisp viết lại hàm ACET-SS-Drag-move + rotate .
Thanks

Link đây bác. trong đó Lee mac có viết 1 hàm gần giống acet-ss-drag-move. Nhưng nó viết chưa triệt để, chưa giải quyết được vấn đề bắt điểm (do hạn chế của hàm grread) và trả về lỗi khi người dùng nhấn Esc mà không chọn điểm.
Nếu bác còn hứng thú với hàm này thì em gợi ý bác chỉnh sửa luôn code của nó 1 chút cho nhanh:
- kết hợp hàm osnap và biến hệ thống osmode để giải quyết được vấn đề bắt điểm (nếu bác thích thì có thể dùng thêm hàm grvecs để mô tả chế độ bắt điểm cho nó chuyên nghiệp)
- định nghĩa lại biến *error* giải quyết vấn đề người dùng Esc để hàm có thể trả về nil.
giải quyết đươc 2 vấn đề trên thì ta có 1 hàm gần như giống hoàn toàn acet-ss-drag-move.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#139 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 30 December 2011 - 05:17 PM

Có lẽ các bác tuệ không còn hứng thú với mấy hàm drag nên mình viết lại vậy.
(acet-ss-drag-move <selection-set> <base-pt> [<prompt>] [<hilight> [<cursor>]]): trong đó các đối số trong ngoặc vuông [...] là không bắt buộc
- Prompt: dòng nhắc khi chọn điểm.
- hilight : T hoặc nil. nếu T thì hàm sẽ vẽ 1 vector từ điểm base-pt đến vị trí con trỏ.
- cursor: hình dạng con trỏ., 1-không hiện sợi tóc; 2-sợi tóc hình vuông (pickbox); giá trị khác hoặc nil thì con trỏ ở trạng thái bình thường.
Đây là hàm mình viết lại. Có thể truy bắt điểm bình thường.

(defun Cv:ss-drag-move ( ss pt prm highlight cursor flag / *error* er escape get-osnap cursor osmode snap p1 p2 p3 gr dk kc objlst)
(defun escape (msg / )
(redraw)
(if flag
(mapcar '(lambda (x) (vl-catch-all-apply 'vla-delete (list x))) objlst)
(mapcar '(lambda (x) (vla-move x p1 (vlax-3d-point pt))) objlst)) (setq *error* er))
(defun get-osnap (osmode / snap osmode)
(setq snap "")
(if (> osmode 16384)
(while (> osmode 0)
(cond ((>= osmode 8192) (setq osmode (- osmode 8192) snap (strcat snap "_par,")))
((>= osmode 4096) (setq osmode (- osmode 4096) snap (strcat snap "_ext,")))
((>= osmode 2048) (setq osmode (- osmode 2048) snap (strcat snap "_app,")))
((>= osmode 1024) (setq osmode (- osmode 1024) snap (strcat snap "")))
((>= osmode 512) (setq osmode (- osmode 512) snap (strcat snap "_nea,")))
((>= osmode 256) (setq osmode (- osmode 256) snap (strcat snap "_tan,")))
((>= osmode 128) (setq osmode (- osmode 128) snap (strcat snap "_per,")))
((>= osmode 64) (setq osmode (- osmode 64) snap (strcat snap "_ins,")))
((>= osmode 32) (setq osmode (- osmode 32) snap (strcat snap "_int,")))
((>= osmode 16) (setq osmode (- osmode 16) snap (strcat snap "_qua,")))
((>= osmode 8) (setq osmode (- osmode 8) snap (strcat snap "_nod,")))
((>= osmode 4) (setq osmode (- osmode 4) snap (strcat snap "_cen,")))
((>= osmode 2) (setq osmode (- osmode 2) snap (strcat snap "_mid,")))
((>= osmode 1) (setq osmode (- osmode 1) snap (strcat snap "_end,"))))))
snap)
(setq er *error* *error* escape)
(if ss
(progn
(setq dk T p1 (vlax-3d-point pt) objlst (CV:ss-to-list ss t))
(if (not (eq (type cursor) 'INT)) (setq cursor 0))
(if flag (mapcar 'vla-copy objLst))
(if prm (prompt prm))
(while dk
(if (not (= (getvar "osmode") osmode)) (setq osmode (getvar "osmode") snap (get-osnap osmode)))
(setq gr (grread 't 14 cursor))
(cond
((= (car gr) 5)
(redraw)
(if (setq p2 (osnap (cadr gr) snap))
(grvecs (list 2
(polar p2 0.785398 (setq kc (* 9 (Cv:pixel-unit))))
(polar p2 -2.356194 kc) (polar p2 2.356194 kc) (polar p2 -0.785398 kc)))
(setq p2 (cadr gr)))
(if highlight (grdraw pt p2 8))
(setq p3 (vlax-3d-point p2))
(mapcar '(lambda (x) (vla-move x p1 p3)) objlst)
(setq p1 p3))
((= (car gr) 3)
(setq dk (redraw))
(if flag
(mapcar '(lambda (x) (vl-catch-all-apply 'vla-delete (list x))) objlst)
(mapcar '(lambda (x) (vla-move x p1 (vlax-3d-point pt))) objlst))
p2)
((= (car gr) 25) (command "dsettings"))
((equal gr '(2 6))
(if (= (setvar "osmode" (+ (if (< (getvar "osmode") 16384) 16384 -16384) (getvar "osmode"))) 0) (command "dsettings")))
((or (equal gr '(2 32)) (equal gr '(2 13)))
(if flag
(mapcar '(lambda (x) (vl-catch-all-apply 'vla-delete (list x))) objlst)
(mapcar '(lambda (x) (vla-move x p1 (vlax-3d-point pt))) objlst))
(setq dk (redraw))))))))



so với hàm acet thì mình thêm vào 1 đối số cuối cùng. đối số này bằng T hoặc nil. cho phép có hiển thị đối tượng gốc trong quá trình drag hay không. thực tế tất cả những lần mình sử dụng acet-ss-drag mình đều phải sử dụng kèm với hàm acet-ss-draw để ẩn đi đối tượng gốc. việc thêm chức năng này vào hàm sẽ tránh được bất tiện đó.
để sử dụng hàm này các bạn phải load 2 hàm CV:ss-to-list và Cv:pixel-units đã có trong topic này.
Test:
(CV:ss-drag-move (ssget) (getpoint) "Chon diem move: " t 1 nil)
(CV:ss-drag-move (ssget) (getpoint) "Chon diem move: " nil 2 t)

- Nhược điểm so với acet: không trả về nil khi nhấn Esc (cái này mình thất bại rồi :(); hiển thị ký hiệu bắt điểm không giống cad được như acet, (mấy cái hình vuông, tam giác, x màu vàng ấy...). nếu điểm base-pt nằm trên chính đối tượng drag thì khi drag sẽ hơi giật giật do nó tự bắt điểm với chính nó.

- Ưu điểm: nhanh và mượt mà hơn Acet nhiều. Acet làm việc với số lượng đối tượng lớn 1 chút là lag luôn. (cái này mình cũng hơi bất ngờ :D)
bật-tắt chế độ bắt điểm trong khi drag bằng cách gõ F (hoặc F2 hay Ctrl+F theo thói quen) bình thường. chuột phải để thay đổi chế độ bắt điểm.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#140 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 30 December 2011 - 07:03 PM

Khi test thì e lại thấy ngược lại bác ạ, với số lượng lớn thì acet bên máy e chạy bình thường - N với hàm này thì bị giật :( K biết nó có liên quan gì đến vấn đề máy móc hay không ^^
Mà sao ta k lợi dụng chính hàm copy - move của CAD để mần việc này các bác nhỉ :o Hồi trước e nhớ là e đã nghĩ ra bất cập của vấn đề này, rồi cũng mày mò viết lại, n rồi cũng k dùng bao giờ, đến giờ mãi chưa nhớ ra vấn đề đó là gì.
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC