Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2848 replies to this topic

#1221 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 09 July 2012 - 04:10 PM

Trong khi chờ các bạn giúp đỡ mình đã viết hàm "break" đối tượng dựa vào danh sách quản lý đối tượng và các tọa độ tại điểm cần "break". Hàm này mình thấy chỉ sd tót cho TH đối tượng hở (như đoạn thẳng, pline hở, spline hỏ, cung, tròn, cung elip), còn các TH kín như HCN, đg tròn, elip hoặc pl, spl đóng thì chưa chạy đc. Phiền các bạn tư vấn cho. Sau đây là code :

(defun breaktheodsdt( ds / h name p i ss L j Lj m)
(setq m 0)
(foreach n ds (progn
(setq h (car n) name (handent h) i 1 L (length n) ss (ssadd))
(ssadd name ss)
(while (< i L)
(setq p (nth i n) p (list (/ (car p) 1000.0) (/ (cadr p) 1000.0)))
(setq j 0 Lj (sslength ss) kt nil)
(while (and (null kt) (< j Lj))
(setq name (ssname ss j))
(setq p1 (vlax-curve-getClosestPointTo name p))
; (print (list name p1 p))
(if (<= (distance p p1) 0.002) (progn
(command "_.break" name p p)
(setq name (entlast))
(ssadd name ss)
(setq kt T Lj (sslength ss))
(print (setq m (1+ m)))
))
(setq j (1+ j))
)
(setq i (1+ i))
)
))
)

  • 0

#1222 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 12 July 2012 - 09:28 AM

Chờ các bác mãi kg thấy đâu (có lẽ đang mãi mê với mục &quot;so sánh bv&quot;), mình mày mò viết thêm một đoạn code cho nó làm nốt cái cv cắt đối tượng.

;Ham giao doi tuong cua 1 ban tren Cadviet
(defun GiaoDT (ent1 ent2 / ob1 ob2 g kq sd)
(setq ob1 (vlax-ename->vla-object ent1) ob2 (vlax-ename->vla-object ent2))
(setq g (vlax-variant-value (vla-IntersectWith ob1 ob2 acExtendNone)))
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g (progn
(setq kq nil sd (fix (/ (length g) 3)))
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g)))) g (cdddr g))
)
kq
) nil)
)
;Ham sx trich tren Cadviet
(defun SXDStheocs( lis index)
(vl-sort lis (function (lambda (e1 e2) (< (nth (- index 1) e1) (nth (- index 1) e2)))))
)
(defun frac( real)
(abs (- (abs real) (abs (fix real))))
)
;PP chia &#244; cua bac Thai
(defun select-c (p1 p2 n filter / ss)
(if (setq ss (ssget "c" p1 p2 filter))
(if (< (sslength ss) (abs (setq n (* -1 n))))
(list (list p1 p2))
(if (< n 0)
(append (select-c p1 (list (* 0.5 (+ (car p2) (car p1))) (cadr p2)) n filter)
(select-c p2 (list (* 0.5 (+ (car p2) (car p1))) (cadr p1)) n filter))
(append (select-c p1 (list (car p2) (* 0.5 (+ (cadr p2) (cadr p1)))) n filter)
(select-c p2 (list (car p1) (* 0.5 (+ (cadr p2) (cadr p1)))) n filter))))))

; lay phan tu theo so hieu tu thuc the
(defun diem( name n)
(cdr (assoc n (entget name)))
)
;Ham lap ds diem va doi tuong giao tai diem
(defun rtoi( r)
(fix (* 1000 (atof (rtos r 2 3))))
)
(defun prtoi( p)
(list (rtoi (car p)) (rtoi (cadr p)))
)
;Ham tim giao cua 2 doi tuong bang PP chia o, sau do dua vao ham lapdsgiao1 de lapds giao diem giao va doi tuong giao tai diem
(defun lapdsdiemgiaovadtgiao( loai / tg i j Li Lj ss n1 n2 k lis lisgiao2dt n m tg)
(defun breaktheodsdt1( ds / h name n1 p i ss L j Lj m tg1 tg2)
(setq m 0)
(setq tg1 (getvar "millisecs"))
(foreach n ds (progn
(setq m (1+ m))
(if (= (frac (/ m 1000.0)) 0.0) (progn
(setq tg2 (getvar "millisecs"))
(prompt (strcat "\nGiai doan cat doi tuoong: " (itoa m) " : "))
(princ (/ (- tg2 tg1) 1000.0))
(princ " giay.")
(setq tg1 tg2)
))
(setq h (car n) name (handent h) i 1 L (length n) ss nil ss (ssadd))
(ssadd name ss)
(while (< i L)
(setq p (nth i n) p (list (/ (car p) 1000.0) (/ (cadr p) 1000.0)))
(setq j 0 Lj (sslength ss) kt nil)
(while (and (null kt) (< j Lj))
(setq name (ssname ss j))
(setq p1 (vlax-curve-getClosestPointTo name p))
(if (<= (distance p p1) 0.002) (progn
(cond
((and (= (diem name 0) "ELLIPSE") (= (diem name 41) 0.0)) (setq p1 (list (+ (car p) 0.001) (+ (cadr p) 0.001))))
((or (= (diem name 0) "CIRCLE") (= (diem name 0) "SPLINE")) (setq p1 (list (+ (car p) 0.001) (+ (cadr p) 0.001))))
((and (= (diem name 0) "LWPOLYLINE") (= (diem name 70) 1)) (setq p1 (list (+ (car p) 0.0001) (+ (cadr p) 0.0001))))
((and (= (diem name 0) "POLYLINE") (= (diem name 70) 1)) (setq p1 (list (+ (car p) 0.0001) (+ (cadr p) 0.0001))))
(T (setq p1 p))
)
(setq n1 (entlast))
(command "_.break" name p p1)
(setq name (entlast))
(if (null (equal n1 name)) (ssadd name ss))
(setq kt T)
))
(setq j (1+ j))
)
(setq i (1+ i))
)
))
)
;sd ham giao doi tuong de lap ds doi tuong giao va diem giao
(defun lapdsgiaotheodt1( lisgiao2dt n1 n2 / p dl dl1 h1 h2)
(foreach m lisgiao2dt (progn
(setq p (prtoi m) h1 (diem n1 5) h2 (diem n2 5))
(setq dl (assoc h1 listggiaotheodt))
(if (null dl) (setq listggiaotheodt (append listggiaotheodt (list (list h1 p)))) (progn
(setq dl1 nil)
(if (null (member p dl)) (setq dl1 (append dl (list p))))
(if dl1 (setq listggiaotheodt (subst dl1 dl listggiaotheodt)))
))
(setq dl (assoc h2 listggiaotheodt))
(if (null dl) (setq listggiaotheodt (append listggiaotheodt (list (list h2 p)))) (progn
(setq dl1 nil)
(if (null (member p dl)) (setq dl1 (append dl (list p))))
(if dl1 (setq listggiaotheodt (subst dl1 dl listggiaotheodt)))
))
))
)
;;;;;;;;;;;;;;;;;;;
(setq tg (getvar "millisecs") m 0 tg1 tg)
(if (setq ss (ssget "x" '((0 . "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE")))) (progn
(setq box (ACET-GEOM-SS-EXTENTS-FAST ss) p1 (car box) p2 (cadr box))
(setq lis (select-c p1 p2 50 '((0 . "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE"))))
(setq i 0 Li (length lis) listggiaotheop nil listggiaotheodt nil)
(while (< i Li)
(setq box (nth i lis) p1 (car box) p2 (cadr box))
(setq ss (ssget "c" p1 p2 '((0 . "LINE,ARC,SPLINE,LWPOLYLINE,POLYLINE,CIRCLE,ELLIPSE"))))
(setq j 0 Lj (sslength ss))
(while (< j Lj)
(setq n1 (ssname ss j))
(setq k (+ j 1))
(while (< k Lj)
(setq n2 (ssname ss k))
(setq lisgiao2dt (Giaodt n1 n2))
(cond
((= loai 4) (if lisgiao2dt (lapdsgiaotheodt1 lisgiao2dt n1 n2)))
)
(setq k (1+ k))
(setq m (1+ m))
(if (= (frac (/ m 10000.0)) 0.0) (prompt (strcat "\nGiai doan tim giao: " (itoa m))))
)
(setq j (1+ j))
)
(setq i (1+ i))
)
))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(print (strcat "\nCo " (itoa (length listggiaotheodt)) " diem giao"))
(if (and (= loai 4) listggiaotheodt) (breaktheodsdt1 listggiaotheodt))
(princ (/ (- (getvar "millisecs") tg) 1000.0))
(princ " giay.")
)
(defun c:vdtg4()
(command "undo" "be")
(lapdsdiemgiaovadtgiao 4)
(command "undo" "e")
)

(vl-load-com)
Lệnh là vdtg4. Nói chung giai đoạn tìm giao đã chạy ổn và khá nhanh, nhưng gđ cắt đối tượng mình chưa yên tâm lắm.
- Một là : PP cắt như thế có ổn kg
- Hai là : Kg hiểu sao thời gian ngày càng chậm (code trong hàm breaktheodsdt1)
Nhờ các bạn xem và tư vấn giúp 2 vđ trên.
Mình đưa bv đủ thứ đt để các bạn thử. Có thể xóa bốt đi nếu cần.
http://www.cadviet.c...oituong2070.dwg
Xin cám ơn
  • 0

#1223 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 12 July 2012 - 09:36 AM

Các bác có cách nào làm việc này không chỉ mình với:

-Có điểm a và điểm b.
-Làm sao khi thực hiện bất cứ lệnh gì mình gỏ "pd" hay gì cũng được sẽ pan từ a đến b mà không gián đoạn lệnh cad đang thực hiện.

Thank all!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1224 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 July 2012 - 10:40 AM

Các bác có cách nào làm việc này không chỉ mình với:

-Có điểm a và điểm b.
-Làm sao khi thực hiện bất cứ lệnh gì mình gỏ "pd" hay gì cũng được sẽ pan từ a đến b mà không gián đoạn lệnh cad đang thực hiện.

Thank all!

Cái này gọi là : transparent command
Với a và b là biến thì em chưa có cách.
Nếu biết a, b là giá trị nào đó thì anh có thể sử dụng cái này. Ví dụ a=(0 0 0) ; b= (500 500 0)
Khi thực hiện bất cứ lệnh gì ... anh gõ 'pn sẽ pan từ a đến b mà không gián đoạn lệnh cad đang thực hiện.

(defun c:pn() (vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) "'-pan 0,0,0 500,500,0 "))
  • 1

#1225 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 12 July 2012 - 10:43 AM

Cám ơn Tuệ nhé. Lại là vla rồi :ph34r:
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1226 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 July 2012 - 10:47 AM

Cám ơn Tuệ nhé. Lại là vla rồi :ph34r:

transparent command : Lệnh trong lệnh không cho phép dùng command anh à.
Nếu dùng được bằng Command thì em đã viết bằng Command cho anh rồi :D
  • 1

#1227 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 12 July 2012 - 11:15 AM

Tôi dùng không được. Trích dẫn:
Command: (vl-load-com)
Command: l
LINE Specify first point:
Specify next point or [Undo]: 'pn
nil
Point or option keyword required.
Specify next point or [Undo]: '-pan >>Specify base point or displacement: 0,0,0
>> Specify second point: 500,500,0
** Requires a regen, cannot be transparent.
Resuming LINE command.
Hỏi thêm tí nữa: sao không dùng (command "pan") trong lệnh được, nhưng dùng (command "m2p") thì được?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1228 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 12 July 2012 - 11:23 AM

vậy thì bác nên hỏi. "pan" và "m2p" khác nhau ở điểm gì ngoài chức năng của nó. sẽ ra câu trả lời ngay thôi
  • 0

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


#1229 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 July 2012 - 11:29 AM

Tôi dùng không được. Trích dẫn:
Command: (vl-load-com)
Command: l
LINE Specify first point:
Specify next point or [Undo]: 'pn
nil
Point or option keyword required.
Specify next point or [Undo]: '-pan >>Specify base point or displacement: 0,0,0
>> Specify second point: 500,500,0
** Requires a regen, cannot be transparent.
Resuming LINE command.
Hỏi thêm tí nữa: sao không dùng (command "pan") trong lệnh được, nhưng dùng (command "m2p") thì được?

Của mình khác với của bác :

Command: l
LINE Specify first point:
Specify next point or [Undo]: 'pn
nil

Point or option keyword required.

Specify next point or [Undo]: '-pan >>Specify base point or displacement: 0,0,0
>> Specify second point: 500,500,0
Resuming LINE command.

Specify next point or [Undo]:

2./ Mtp bản chất nó là transparent command rồi. Còn PAN thì không phải transparent command đâu bác à. Muốn transparent command thì phải 'PAN
  • 1

#1230 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 12 July 2012 - 11:46 AM

Cám ơn bác Tue_NV đã trả lời cặn kẻ và đàng hoàng. Tôi quên mất các lệnh trong osnap là lệnh trong suốt.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1231 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 13 July 2012 - 11:13 AM

Kg biết vđ này đã có ai đề cập chưa. Nếu có rồi bạn nào biết chỉ giúp
Mình muốn viết một hàm tựa như foreach, tức đối số là một hàm sẽ nhận trị do hàm gọi cung cấp;
VD : (defun aaa( bbb / a) (setq a 1) (bbb a))
trong đó bbb là bất cứ hàm nào, nó sẽ sd trị của biến a để làm việc gì đó. Cám ơn các bạn
  • 0

#1232 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 13 July 2012 - 11:28 AM

Kg biết vđ này đã có ai đề cập chưa. Nếu có rồi bạn nào biết chỉ giúp
Mình muốn viết một hàm tựa như foreach, tức đối số là một hàm sẽ nhận trị do hàm gọi cung cấp;
VD : (defun aaa( bbb / a) (setq a 1) (bbb a))
trong đó bbb là bất cứ hàm nào, nó sẽ sd trị của biến a để làm việc gì đó. Cám ơn các bạn

Ví dụ đây bác :
(setq bbb (lambda(x) (alert (itoa x))))
(defun aaa( bbb / a) (setq a 1) (bbb a))

-> thử : (aaa bbb)
  • 1

#1233 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 13 July 2012 - 11:30 AM


(defun bbb (a)(1+ a))
(defun aaa( bbb / a) (setq a 1) (bbb a))
Gọi : (aaa bbb)
  • 1

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


#1234 hdt4151

hdt4151

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 13 July 2012 - 03:11 PM

Khi chọn 1 đối tượng trước đó ta hay dùng biến P, ví dụ: move p, hay copy P => thực hiện lệnh sau đó đối tượng được chọn. Nếu mình muốn đối tượng được tự động chọn trước đó (polyline khi được chọn như vậy sẽ hiện ra mấy chấm xanh ở đỉnh) rồi sau đó mới dùng lệnh copy, move thì làm thế nào ? viết lisp như hế nào ?
  • 0

#1235 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 13 July 2012 - 03:19 PM

Khi chọn 1 đối tượng trước đó ta hay dùng biến P, ví dụ: move p, hay copy P => thực hiện lệnh sau đó đối tượng được chọn. Nếu mình muốn đối tượng được tự động chọn trước đó (polyline khi được chọn như vậy sẽ hiện ra mấy chấm xanh ở đỉnh) rồi sau đó mới dùng lệnh copy, move thì làm thế nào ? viết lisp như hế nào ?

Hề hề hề,
Vưỡn thế.
(command "copy" "p" ......)
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1236 hdt4151

hdt4151

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 13 July 2012 - 07:43 PM

không phải bác Bình ơi :D

vd thế này:

(setq ent (car (entsel)))

bây h làm sao cho đối tượng ent được chọn sẵn ở ngoài màn hình (như khi ta select vậy đó, nếu đối tượng là LINE chẳng hạn sẽ hiện lên 3 điểm màu xanh ở đầu, mid, cuối). Rồi sau đó thích copy hay move hay j j đó tuỳ ý mình (hơi giống như trong lisp tìm trọng tâm của 1 hình, kết quả cho ra 1 điểm đã đc chọn sẳn) :D
  • 0

#1237 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 13 July 2012 - 09:37 PM

(setq ss (ssadd))
(setq ent (car (entsel)))
(setq ss (ssadd ent ss))
(sssetfirst nil ss)
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1238 hdt4151

hdt4151

    biết vẽ pline

  • Members
  • PipPip
  • 69 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 14 July 2012 - 08:04 AM

Thanks bạn :)

Cho mình hỏi nữa là nếu gồm nhiều đối tượng thì làm thế nào, mình thử (setq ent (ssget)) thì không được.
  • 0

#1239 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 July 2012 - 08:25 AM

(setq ent (ssget))
(sssetfirst nil ent)
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1240 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 July 2012 - 10:43 AM

không phải bác Bình ơi :D

vd thế này:

(setq ent (car (entsel)))

bây h làm sao cho đối tượng ent được chọn sẵn ở ngoài màn hình (như khi ta select vậy đó, nếu đối tượng là LINE chẳng hạn sẽ hiện lên 3 điểm màu xanh ở đầu, mid, cuối). Rồi sau đó thích copy hay move hay j j đó tuỳ ý mình (hơi giống như trong lisp tìm trọng tâm của 1 hình, kết quả cho ra 1 điểm đã đc chọn sẳn) :D

Hề hề hề,
Vậy ý bạn là muốn nó nổi griped lên hử???
(setq ent (car (entsel))
ss (ssadd ent ss))
(sssetfirst nil ss)
Bạn thử dùng như vầy xem sao. Cái nài trên diễn đàn có nói tới rồi, bạn chịu khó tìm kiếm để biết thêm nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.