Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

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

Các bài được khuyến nghị

Cám ơn 2 Bác Gia_Bach và Tue_NV!

Với Line thì dễ, với PLINE không Curve thì như Bác Tue_NV nói là cũng làm được, còn với Curve hoặc SPLINE thì chắc botay.com thôi. Khốn nỗi là tôi cần xử lý trên bản vẽ của người ta, mà nó gồm các đường Line, Pline, Spline rất không có quy luật. Nếu không thể thì chắc chơi kiểu tạo Line tạm thôi, mặc dầu kiểu này nó dẫn tới một số kết quả không ưng ý liên quan tới những vấn đề khác.

Thân thương!

Cái này mình nghĩ là nên viết 1 hàm con cho nó:

1. Vẽ tạm 1 line qua p1 p2

2. tìm giao

3. undo lại lúc chưa vẽ line

4. trả kết quả biến giao điểm

như thế mình nghĩ chắc không ảnh hưởng gì đến bản vẽ đâu nhỉ :lol:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cái này mình nghĩ là nên viết 1 hàm con cho nó:

1. Vẽ tạm 1 line qua p1 p2

2. tìm giao

3. undo lại lúc chưa vẽ line

4. trả kết quả biến giao điểm

như thế mình nghĩ chắc không ảnh hưởng gì đến bản vẽ đâu nhỉ :lol:

Tôi đã đi y chang như Bác chỉ rồi. Tuy nhiên, cách này chán ở chỗ cái line tạm (mặc dù đã U tức thời). Do điểm p1 và p2 của tôi di động liên tục trên màn hình nên các line tạm này xuất hiện liên tục làm ngứa con mắt bên phải đỏ con mắt bên trái, thành ra mới nhờ các bác. Nếu không có cách khác thì chấp nhận nhỏ vi-ro-to vậy!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Theo em thì :

- Tạo Line tạm với thuộc tính Visible = 0.

- TÌm giao

- Xóa (không nên undo)

Ngoài ra, vì đặc tính là p1 - giao - p2 sẽ thẳng hàng nên bác có thể chạy điểm theo bước nhảy để tìm, nhưng có thể tin là nó sẽ khiến việc bác làm dài như ngày mùa hè vậy :wub:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi đã đi y chang như Bác chỉ rồi. Tuy nhiên, cách này chán ở chỗ cái line tạm (mặc dù đã U tức thời). Do điểm p1 và p2 của tôi di động liên tục trên màn hình nên các line tạm này xuất hiện liên tục làm ngứa con mắt bên phải đỏ con mắt bên trái, thành ra mới nhờ các bác. Nếu không có cách khác thì chấp nhận nhỏ vi-ro-to vậy!

Sao bạn không nói ngay cái này từ đầu, đưa ra điều kiện chi mà khó vậy?

Bạn có thể làm theo ý của KetXu hoặc là cách này : đảm bảo là không thấy Line đâu

Tắt Layer hiện hành đi. Vẽ Line tạm trên Layer hiện hành. Tìm giao điểm, xóa LINE là được.

Xong đâu đấy, bật đèn cho Layer hiện hành -> OK

 

Line vẽ trên Layer hiện hành đã bị tắt đèn tối om, chả thấy chi đâu hè? :lol:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cám ơn Ketxu và Bác Tue_NV!

- Dùng erase hay hơn undo là khỏi nháy mắt ở thanh trạng thái, bây giờ mới biết được điều này Ketxu ơi!

- Vẽ trên layer tắt cũng là 1 chiêu đỡ nháy mắt trên screen!

==> khỏi tốn Vi-ro-to rồi!

Chỉ còn nháy chút xíu ở vị trí con chuột thôi (nếu không vẽ line tạm thì vị trí trỏ chuột không bị nháy).

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@bác Hạ : Vẽ trên Layer tắt thì có lợi là chỉ thao tác 1 lần đầu trong suốt quá trình chạy lisp, mà có cái thiệt nếu bản vẽ to to mà đối tượng thuộc layer đấy lại nhìu nhìu ^^

Mà e cứ tưởng thời gian entmake 1 line không đủ để bác biết là nó nháy chứ nhỉ :o

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@bác Hạ : Vẽ trên Layer tắt thì có lợi là chỉ thao tác 1 lần đầu trong suốt quá trình chạy lisp, mà có cái thiệt nếu bản vẽ to to mà đối tượng thuộc layer đấy lại nhìu nhìu ^^

Mà e cứ tưởng thời gian entmake 1 line không đủ để bác biết là nó nháy chứ nhỉ :o

Ta có thể tạo 1 Layer tạm gọi là Layer tắt. "Tắt đèn" Layer đó rồi vẽ Line tạm trên Layer tắt đó. Khi xóa hết Line thì ta DEL Layer tạm đó đi, như vậy thì đâu có thiệt chi?

 

@DVH : nên sử dụng Entmake thay vì sử dụng Command để vẽ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@bác Hạ : Vẽ trên Layer tắt thì có lợi là chỉ thao tác 1 lần đầu trong suốt quá trình chạy lisp, mà có cái thiệt nếu bản vẽ to to mà đối tượng thuộc layer đấy lại nhìu nhìu ^^

Mà e cứ tưởng thời gian entmake 1 line không đủ để bác biết là nó nháy chứ nhỉ :o

1). Đã chơi chiêu thì ta tiếp tục chiêu: tạo 1 layer tạm, tắt nó, vẽ line tạm, tìm giao, xoá layer tạm ==> nó không phụ thuộc các đối twợng khác.

2). entmake nó cũng tốn vi-ro-to đấy

P/S: Bac Tue_NV đã nhanh hơn rồi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ta có thể tạo 1 Layer tạm gọi là Layer tắt. "Tắt đèn" Layer đó rồi vẽ Line tạm trên Layer tắt đó. Khi xóa hết Line thì ta DEL Layer tạm đó đi, như vậy thì đâu có thiệt chi?

 

@DVH : nên sử dụng Entmake thay vì sử dụng Command để vẽ

 

 

1). Đã chơi chiêu thì ta tiếp tục chiêu: tạo 1 layer tạm, tắt nó, vẽ line tạm, tìm giao, xoá layer tạm ==> nó không phụ thuộc các đối twợng khác.

2). entmake nó cũng tốn vi-ro-to đấy

P/S: Bac Tue_NV đã nhanh hơn rồi

 

Hề hề. Em có ý kiến gì về phương án đó đâu. Nếu là bản vẽ của mình thì xài tốt :wub: .

Nhưng về mặt bới móc thì là thế này :

- Bác tạo 1 Layer mới (entmake hoặc command) -> Set thuộc tính LayerOn cho layer là False <=> (1 hàm entmake + slot gán LayerOn / command )

- Tiếp theo tạo Line (bằng command hoặc entmakex), set thuộc tính layer cho nó là layer tạm vừa tạo <=> (1 hàm entmake + 1 slot gán Layer / command)

- Cuối cùng Purge Layer (1 command)

Vị chi là 3 bước. Có thể nghĩ đến vấn đề code dài hơn (nếu dùng entmake để tạo layer, line), chậm hơn (nếu dùng command để tạo / xóa layer, line), kiểm tra Layer, xử lý trường hợp tên layer tạm trùng tên layer có sẵn trên bản vẽ, purge layer khi xong xuôi ....vv và vv...Và tóm lại là e thấy nó hơi rườm ^^

 

Đằng nào cũng phải tạo Line với 1 slot thuộc tính , vậy chi bằng gom tất cả lại sử dụng (1 entmakex + slot visible) và gán Line tạo bằng 1 setq luôn ;)

(defun InVisLine (pt1 pt2)(entmakex (list (cons 0 "Line")(cons 10 (trans pt1 1 0))(cons 11 (trans pt2 1 0))(cons 60 1))))

 

@bác ĐVH : bác cố gắng, cố gắng dùng entmake, lần đầu thì lâu, nhưng những lần sau chỉ là copy paste. Tốc độ 2 cái này chênh nhau quá nhiều, mà entmake lại can thiệp trực tiếp vào Database mà không cần thông qua UI, không bị ảnh hưởng nhiều của các biến hệ thống liên quan đến screen.....

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hề hề. Em có ý kiến gì về phương án đó đâu. Nếu là bản vẽ của mình thì xài tốt :wub: .

Nhưng về mặt bới móc thì là thế này :

- Bác tạo 1 Layer mới (entmake hoặc command) -> Set thuộc tính LayerOn cho layer là False <=> (1 hàm entmake + slot gán LayerOn / command )

- Tiếp theo tạo Line (bằng command hoặc entmakex), set thuộc tính layer cho nó là layer tạm vừa tạo <=> (1 hàm entmake + 1 slot gán Layer / command)

- Cuối cùng Purge Layer (1 command)

Vị chi là 3 bước. Có thể nghĩ đến vấn đề code dài hơn (nếu dùng entmake để tạo layer, line), chậm hơn (nếu dùng command để tạo / xóa layer, line), kiểm tra Layer, xử lý trường hợp tên layer tạm trùng tên layer có sẵn trên bản vẽ, purge layer khi xong xuôi ....vv và vv...Và tóm lại là e thấy nó hơi rườm ^^

 

Đằng nào cũng phải tạo Line với 1 slot thuộc tính , vậy chi bằng gom tất cả lại sử dụng (1 entmakex + slot visible) và gán Line tạo bằng 1 setq luôn ;)

Ketxu viết : Đằng nào cũng phải tạo Line với 1 slot thuộc tính -> Là chưa thỏa đáng đâu.

Nếu tạo rất nhiều nhiều LINE+set 1 thuộc tính so với việc tạo nhiều nhiều LINE không cần set thêm thuộc tính nào cả thì cái nào tốc độ sẽ nhanh hơn nhỉ?

 

Khi mà Layer tạm khi tạo nó, đồng thời set Layer tạm thành Layer hiện hành và Line vẽ trên Layer hiện hành đó. LINE đâu có cần phải set thêm thuộc tính nào nữa, phải không?

 

Trong trường hợp nếu sử dụng phương án này để xóa tất cả các LINE đã vẽ và Layer tạm vừa tạo thì sử dụng lệnh LAYDEL là xong

và trước đó phải Layerp rồi mới Laydel

Như vậy xóa tất cả Line tạo ra và Layer vừa tạo trong 1 lệnh chớ mấy. khỏi phải nháy mắt khi xóa LINE vậy

 

Tuy nhiên, thì code có rườm rà hơn 1 chút. Tue_NV vote (+) cho Ketxu vì ý này

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ô, đúng là nếu set layer là layer hiện hành thì không cần phải set thuộc tính cho Line nữa, vote gấp, tuy nhiên, về tốc độ thì ... chưa chắc ^^

Vì có 2 vấn đề e thấy ở đây như sau :

- Layer của đối tượng : không code trong entmake không có nghĩa là cad không phải set cho nó.

Sau khi đọc bài bác nói e cũng chột dạ test thử xem giữa (entmakex Line có cons 60) và (entmake Line thường), kết quả cũng khá bất ngờ :

Command: (defun eLine1 (p1 p2)(entmakex (list (cons 0 "Line")(cons 10 p1)(cons

11 p2)(cons 60 1))))

ELINE1

 

Command: (defun eLine2 (p1 p2)(entmakex (list (cons 0 "Line")(cons 10 p1)(cons

11 p2))))

ELINE2

 

Command: (setq p1 (getpoint) p2 (getpoint))

(-685165.0 1.60979e+006 0.0)

 

 

Command: (sosanh '((eline1 p1 p2)(eline2 p1 p2)))

Elapsed milliseconds / relative speed for 4096 iteration(s):

 

(ELINE1 P1 P2).....1045 / 1.03 <Nhanh nhất>

(ELINE2 P1 P2).....1076 / 1.00 <Chậm nhất>

 

Command: (sosanh '((eline1 p1 p2)(eline2 p1 p2)))

Elapsed milliseconds / relative speed for 16384 iteration(s):

 

(ELINE1 P1 P2).....1467 / 1.02 <Nhanh nhất>

(ELINE2 P1 P2).....1498 / 1.00 <Chậm nhất>

 

Command: (sosanh '((eline1 p1 p2)(eline2 p1 p2)))

Elapsed milliseconds / relative speed for 16384 iteration(s):

 

(ELINE1 P1 P2).....1466 / 1.02 <Nhanh nhất>

(ELINE2 P1 P2).....1497 / 1.00 <Chậm nhất>

 

Command: (sosanh '((eline1 p1 p2)(eline2 p1 p2)))

Elapsed milliseconds / relative speed for 16384 iteration(s):

 

(ELINE1 P1 P2).....1544 / 1.03 <Nhanh nhất>

(ELINE2 P1 P2).....1591 / 1.00 <Chậm nhất>

 

Command: (sosanh '((eline1 p1 p2)(eline2 p1 p2)))

Elapsed milliseconds / relative speed for 16384 iteration(s):

 

(ELINE1 P1 P2).....1482 / 1.01 <Nhanh nhất>

(ELINE2 P1 P2).....1498 / 1.00 <Chậm nhất>

Kết quả hoàn toàn nằm ngoài dự đoán, bác thử kiểm chứng lại xem sao :o

 

- Vấn đề 2 : Cơ chế của Laydel vẫn là ssget filter và command erase, thực chất vẫn là chạy vòng lặp qua tất cả các đối tượng, vì trong dữ liệu của bản vẽ, table Layer không quy định các đối tượng thuộc nó, mà chỉ có các đối tượng riêng biệt có gán thêm dòng quy định nó thuộc về layer nào thôi.

=> Nếu bác dùng laydel thì code 1 dòng, nhưng tốc độ thì....

Vấn đề xấu nhất vẫn là layer tạm trùng với layer bản vẽ, vì vậy ket mới nói nếu bản vẽ của mình thì xài tốt, không cần xử lý tên layer random + trùng tên mà chỉ cần đặt 1 cái tên rất dài ^^

 

P/S : e đi ra công trường thôi, tối về chém gió tiếp ^^ sai gì các bác cứ mắng, e không ngại tiếp thu đâu ^^

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ô, đúng là nếu set layer là layer hiện hành thì không cần phải set thuộc tính cho Line nữa, vote gấp, tuy nhiên, về tốc độ thì ... chưa chắc ^^

Vì có 2 vấn đề e thấy ở đây như sau :

- Layer của đối tượng : không code trong entmake không có nghĩa là cad không phải set cho nó.

Sau khi đọc bài bác nói e cũng chột dạ test thử xem giữa (entmakex Line có cons 60) và (entmake Line thường), kết quả cũng khá bất ngờ :

 

Kết quả hoàn toàn nằm ngoài dự đoán, bác thử kiểm chứng lại xem sao :o

 

- Vấn đề 2 : Cơ chế của Laydel vẫn là ssget filter và command erase, thực chất vẫn là chạy vòng lặp qua tất cả các đối tượng, vì trong dữ liệu của bản vẽ, table Layer không quy định các đối tượng thuộc nó, mà chỉ có các đối tượng riêng biệt có gán thêm dòng quy định nó thuộc về layer nào thôi.

=> Nếu bác dùng laydel thì code 1 dòng, nhưng tốc độ thì....

Vấn đề xấu nhất vẫn là layer tạm trùng với layer bản vẽ, vì vậy ket mới nói nếu bản vẽ của mình thì xài tốt, không cần xử lý tên layer random + trùng tên mà chỉ cần đặt 1 cái tên rất dài ^^

 

P/S : e đi ra công trường thôi, tối về chém gió tiếp ^^ sai gì các bác cứ mắng, e không ngại tiếp thu đâu ^^

Chưa biết kết quả như thế nào? Chưa check nữa. Bận quá. Nhưng Vote (+) cho Ketxu 1 cái đã

Ketxu có thể post hàm sosanh để anh em check thử luôn nhé

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tôi đang sử dụng 1 lệnh A.

Tôi dùng hàm Grread để lấy toạ độ điểm con chuột đang di chuyển trên screen, để sử dụng cho lệnh A này.

Trong quá trình thực hiện lệnh A, tôi lại muốn có 1 dòng nhập liệu xuất hiện phía góc phải dưới của trỏ chuột, di chuyển cùng với trỏ, để lấy số liệu nhập vào này dùng cho lệnh A. Không biết điều này có làm được không? Mong được chỉ giùm.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chưa biết kết quả như thế nào? Chưa check nữa. Bận quá. Nhưng Vote (+) cho Ketxu 1 cái đã

Ketxu có thể post hàm sosanh để anh em check thử luôn nhé

Đây ạ. E có sửa tí tiếng Việt cho dễ nhớ. Có thể nói rất cần thiết cho lisper khi lựa chọn phương án cho mình, nên e luôn đặt trong Contents

(defun sosanh


;;;      (sosanh statements)
;;;
;;;          
;;;
;;;=================================================================
;;;
;;;  VD:
;;;
;;;      (sosanh
;;;         '(
;;;              (1+ 1)
;;;              (+ 1 1)
;;;              (+ 1 1.0)
;;;              (+ 1.0 1.0)
;;;          )
;;;      )
;;;
;;;=================================================================

                (statements / _lset _rset _tostring _eval _princ _main)

;;;=================================================================
;;;
;;;  (_LSet text len fillChar)
;;;
;;;=================================================================

(defun _lset (text len fillchar / padding result)
 (setq
  padding (list (ascii fillchar))
  result  (vl-string->list text)
 ) ;_  setq
 (while
  (< (length
      (setq padding
            (append padding padding)
      ) ;_  setq
     ) ;_  length
     len
  ) ;_  <
 ) ;_  while
 (while
  (< (length
      (setq result
            (append result padding)
      ) ;_  setq
     ) ;_  length
     len
  ) ;_  <
 ) ;_  while
 (substr (vl-list->string result) 1 len)
) ;_  defun
;;;=================================================================
;;;
;;;  (_RSet text len fillChar)
;;;
;;;=================================================================

(defun _rset (text len fillchar / padding result)
 (setq
  padding (list (ascii fillchar))
  result  (vl-string->list text)
 ) ;_  setq
 (while
  (< (length
      (setq padding
            (append padding padding)
      ) ;_  setq
     ) ;_  length
     len
  ) ;_  <
 ) ;_  while
 (while
  (< (length
      (setq result
            (append padding result)
      ) ;_  setq
     ) ;_  length
     len
  ) ;_  <
 ) ;_  while
 (substr
  (vl-list->string result)
  (1+ (- (length result) len))
 ) ;_  substr
) ;_  defun

;;;=================================================================
;;;
;;;  (_ToString x)
;;;
;;;=================================================================

(defun _tostring (x / result)
 (if
  (< (strlen
      (setq result
            (vl-prin1-to-string x)
      ) ;_  setq
     ) ;_  strlen
     40
  ) ;_  <
  result
  (strcat (substr result 1 36) "..." (chr 41))
 ) ;_  if
) ;_  defun
;;;=================================================================
;;;
;;;  (_Eval statement iterations)
;;;
;;;=================================================================
(defun _eval (statement iterations / start)
 (gc)
 (setq start (getvar "millisecs"))
 (repeat iterations (eval statement))
 (- (getvar "millisecs") start)
) ;_  defun

;;;=================================================================
;;;
;;;  (_Princ x)
;;;
;;;=================================================================

(defun _princ (x)
 (princ x)
 (princ)
;;; forces screen update
) ;_  defun
;;;=================================================================
;;;
;;;  (_Main statements)
;;;
;;;=================================================================

(defun _main

       (statements / boundary iterations timings slowest fastest lsetlen rsetlen index count)

 (setq
  boundary 1000
  iterations 1
 ) ;_  setq
 (_princ "\U+0110ang so s\U+00E1nh t\U+1ED1c \U+0111\U+1ED9....")
 (while
  (or
   (< (apply 'max
             (setq timings
                   (mapcar
                    '(lambda (statement)
                      (_eval statement iterations)
                     ) ;_  lambda
                    statements
                   ) ;_  mapcar
             ) ;_  setq
      ) ;_  apply
      boundary
   ) ;_  <
   (< (apply 'min timings)
      boundary
   ) ;_  <
  ) ;_  or
  (setq iterations
        (* 2 iterations)
  ) ;_  setq
  (_princ ".")
 ) ;_  while
 (_princ
  (strcat
   "\rElapsed milliseconds / relative speed for "
   (itoa iterations)
   " iteration(s):\n\n"
  ) ;_  strcat
 ) ;_  _princ
 (setq
  slowest (float (apply 'max timings))
  fastest (apply 'min timings)
 ) ;_  setq
 (setq lsetlen
       (+ 5
          (apply 'max
                 (mapcar (function strlen)
                         (setq statements
                               (mapcar (function _tostring)
                                       statements
                               ) ;_  mapcar
                         ) ;_  setq
                 ) ;_  mapcar
          ) ;_  apply
       ) ;_  +
 ) ;_  setq
 (setq rsetlen
       (apply 'max
              (mapcar
               '(lambda (ms) (strlen (itoa ms)))
               timings
              ) ;_  mapcar
       ) ;_  apply
 ) ;_  setq

 (setq
  index 0
  count (length statements)
 ) ;_  setq
 (foreach pair

               (vl-sort
                (mapcar 'cons statements timings)
                '(lambda (a B) (< (cdr a) (cdr B)))
               ) ;_  vl-sort
  ((lambda (pair / ms)
    (_princ
     (strcat
      "    "
      (_lset (car pair) lsetlen ".")
      (_rset
       (itoa (setq ms (cdr pair)))
       rsetlen
       "."
      ) ;_  _rset
      " / "
      (rtos (/ slowest ms) 2 2)
      (cond
       ((eq 1 (setq index (1+ index))) " <Nhanh nh\U+1EA5t>")
       ((eq index count) " <Ch\U+1EADm nh\U+1EA5t>")
       ("")
      ) ;_  cond
      "\n"
     ) ;_  strcat
    ) ;_  _princ
   ) ;_  lambda
   pair
  )
 ) ;_  foreach
 (princ)
) ;_  defun
;;;=================================================================
;;;
;;;  Program is defined, let's rock and roll ...
;;;
;;;=================================================================

(_main statements)

) ;_  defun

 

@bác ĐVH : cái thằng grread lằng nhằng lắm ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@bác ĐVH : cái thằng grread lằng nhằng lắm ^^

Nó lằng nhằng mới khổ! Khổ thâm niên vì thằng này rồi! Tóm lại, câu hỏi dễ hiểu hơn, dùng hàm GRREAD kiểu gì để nó, hoặc:

- Có thể lấy được điểm khi con chuột di chuyển trên screen?

- Có thể lấy được điểm khi bấm chọn chuột trái vào 1 điểm trên screen?

- Có thể lấy được string nhập từ bàn phím?

Hai bước đầu đã làm được. Thêm bước 3 thì đang bí.

Thân thương!

P/S (11h 18/8/2011): Đã tìm được cách rồi, tuy chưa mỹ mãn lắm.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nó lằng nhằng mới khổ! Khổ thâm niên vì thằng này rồi! Tóm lại, câu hỏi dễ hiểu hơn, dùng hàm GRREAD kiểu gì để nó, hoặc:

- Có thể lấy được điểm khi con chuột di chuyển trên screen?

- Có thể lấy được điểm khi bấm chọn chuột trái vào 1 điểm trên screen?

- Có thể lấy được string nhập từ bàn phím?

Hai bước đầu đã làm được. Thêm bước 3 thì đang bí.

Thân thương!

Bác thử ngó qua cái lisp này e viết xem có vận dụng được không ? Keypress bắt đầu khi g1 = 2, g2 Integer. E nghiên cứu thằng này hơi ít ^^

My link

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bác thử ngó qua cái lisp này e viết xem có vận dụng được không ? Keypress bắt đầu khi g1 = 2, g2 Integer. E nghiên cứu thằng này hơi ít ^^

My link

 

Em xin hỏi làm sao để làm được như lệnh -Hatch

Command: -hatch
Current hatch pattern:  ANSI31
Specify internal point or [Properties/Select objects/draW boundary/remove Boundaries/Advanced/DRaw order/Origin]

Tức là nếu mình Pick điểm hoặc bấm keyword để nhập dữ liệu theo cách khác (như select object)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em xin hỏi làm sao để làm được như lệnh -Hatch

Command: -hatch
Current hatch pattern:  ANSI31
Specify internal point or [Properties/Select objects/draW boundary/remove Boundaries/Advanced/DRaw order/Origin]

Tức là nếu mình Pick điểm hoặc bấm keyword để nhập dữ liệu theo cách khác (như select object)

Bạn xem thêm 1 ví dụ ở đây nữa:

Bài viết số 3

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Khi nhập từ command là "Pan" thì screen xuất hiện "bàn tay năm ngón em vẫn kiêu sa" để cho ta di chuyển màn hình.

Nhưng khi dùng (command "pan") thì nó bắt nhập 2 điểm, mà không xuất hiện "tay ngọc tay ngà" nữa.

Vậy, bạn nào biết xin chỉ giùm: cách dùng hàm (command) để có "bàn tay"?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Khi nhập từ command là "Pan" thì screen xuất hiện "bàn tay năm ngón em vẫn kiêu sa" để cho ta di chuyển màn hình.

Nhưng khi dùng (command "pan") thì nó bắt nhập 2 điểm, mà không xuất hiện "tay ngọc tay ngà" nữa.

Vậy, bạn nào biết xin chỉ giùm: cách dùng hàm (command) để có "bàn tay"?

Như vầy bác ạ :

(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) "'_pan\r")

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Như vầy bác ạ :

(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) "'_pan\r")

Chà, nhanh như điện! Nhưng lại thêm một câu hỏi nữa:

Tôi đang sử dụng các thứ này trong hàm grread. Câu lệnh của Ket nếu paste vào command thì ok, nhưng khi nó nằm trong grread thì nó lại "câm" luôn. Tôi gởi lên đây 4 đoạn để dễ thấy nhé:

...
((equal '(11 1339) GRVAL) (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) "'_pan\r")) ;NO
((equal '(11 1340) GRVAL) (command "_.zoom" "")) ;OK
((equal '(11 1417) GRVAL) (command "_.zoom" "w" pause pause)) ;OK
((equal '(11 1342) GRVAL) (command "_.zoom" "p")) ;OK
...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ồ, câu nào biết thì trả lời nhanh thôi ^^ Ví dụ như câu này thì trả lời ngay được : Em không biết :|

Có lẽ đã dùg grread thì phải theo luật chơi của nó thôi ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×