Đến nội dung


Hình ảnh

Hiệu Chỉnh File Lisp


  • Please log in to reply
41 replies to this topic

#41 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 23 September 2015 - 10:24 PM

Ek :unsure: ... Xem như đã xác định 4 điểm a; b; c; d của vùng chọn. Lúc này là tư duy rồi -_- .
Quét từ trái qua thì (= 2 (car (car lst)))     (chưa xét điểm pick quét từ trên xuống hay từ dưới lên)
Quét từ phải qua thì  (= 3 (car (car lst)))     (chưa xét điểm pick quét từ trên xuống hay từ dưới lên)
Dùng hàm cond cho 4 trường hợp là xong :)

Danh sách điểm trả về là 4 điểm của vùng chọn.
Tuy nhiên:
+ Thứ tự của 4 điểm này bắt đầu là điểm TopLeft, TopRight, BottomRight cuối cùng là BottomLeft (quay theo chiều kim đồng hồ). <=>(Luôn là như vậy không phục thuộc kiểu quét).
+ (car (car lst)) bằng  2 hoặc 3 (ở đây chỉ ra kiểu chọn là cross hay window - Hay là từ trái hoặc phải) - Theo em hiểu là vậy.
 *** => Như vậy dùng hàm cond bằng cách nào (nghĩ không ra). Không biết bác có cách nào không ???
*** Cách giải quyết của em là dùng thêm Grread. Code để test:

(defun c:tt  (/ lst Pe p1 p2 M-Text)
  (defun M-Text  (pt str)
    (entmakex
      (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 10 pt) (cons 1 str))))
  (if (and (setq lst (cdr (last (ssnamex (ssget)))))
           (setq Pe (cadr (grread T 15 0)))
           (setq lst (vl-sort lst '(lambda (x y) (< (distance (cadr x) pe) (distance (cadr y) pe))))))
    (progn (setq P1 (cadr (last lst))
                 P2 (cadr (car lst)))
           (M-Text p1 "P1")
           (M-Text p2 "P2")))
  (princ))

P/s: Tuy nhiên với kiểu chọn Polygon thì không chuẩn.​
  • 0

#42 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 24 September 2015 - 07:16 PM

Mình chỉ gợi ý thôi ... (car (car lst)) bằng 2 thì chắc chắn là quét chọn từ trái qua phải. 4 điểm a, b, c, d trong lst thì lúc này chì đặt vấn đề là làm sao biết trong b và c điểm nào là p2? Rõ ràng là ko có cơ sở nào để xác định nó nếu ko có một điểm trung gian nhằm xác định p2 khi pick góc chọn thứ 2. Từ đó thì suy ra chì cần xác đinh p2 từ 1 điểm trung gian là mấu chốt. Bạn đã giải quyết tốt bài toán thông qua điểm trung gian pe. Tuy nhiên chú ý pe là điểm theo con trỏ chuột, do đó nếu chọn góc pick p2 xong mà kéo nó đi chỗ khác rồi Enter thì KQ cũng chuối luôn. kiêu Polygon (ssget "_WP" pt_list) làm sao giống với (ssget "_W" p1 p2) mà đòi chuẩn hả bạn??? Ps : Mạng bị gì mà vào Cadviet Lag quá !!!
  • 0