Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
lehung1988

[ Nhờ viết lisp ]

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

Mình dùng cái này rất nhiều nhưng quá nhiều động tác mong bạn nào giúp đỡ để kiếm thêm tý cơm nuôi vợ :)

Mình muốn stretch đối tượng đến vị trí mà vị trí đó cách vị trí mình click chuột 1 khoảng xác định trước ( khoảng định trước sẽ lưu vào các lần tiếp theo như lênh offset)

 ví dụ: với một line

 stretch (vao lenh)  -> chọn 1 đầu đoạn thẳng  ( vao lenh ) -> chon điểm xuất phát ->  chọn điểm đến-> chọn khoảng cách( khoang cach nay se lưu lại vào các lần sau như lệnh offset  chảng hạn)  

 Cám ơn và mời cafe trà đá.

 

 

Đây là cái lisp stretch cách một điểm nhưng không biết lưu giá trị đó lại cho lần sau

http://www.cadviet.com/upfiles/3/21669_stretch_from.lsp

 
(defun c:SS (/ sset P1 P2)
(setq sset (ssget))
(if (null sset) 
(progn(princ "\nERROR: Nothing selected.")
(exit)))
(setq p1 (getpoint "First point : ")
p2 (getpoint p1 "Base point : "))
(command "stretch" sset "" P1 "FROM" P2))
 
(defun c:SS (/ sset P1 P2)
(setq sset (ssget))
(if (null sset) 
(progn(princ "\nERROR: Nothing selected.")
(exit)))
(setq p1 (getpoint "First point : ")
p2 (getpoint p1 "Base point : "))
(command "stretch" sset "" P1 "FROM" P2))
 
(defun c:SS (/ sset P1 P2)
(setq sset (ssget))
(if (null sset) 
(progn(princ "\nERROR: Nothing selected.")
(exit)))
(setq p1 (getpoint "First point : ")
p2 (getpoint p1 "Base point : "))
(command "stretch" sset "" P1 "FROM" P2))

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 hiểu ý bạn lắm, cái chuyện lưu lại khoảng cách để dùng cho ofset thì ok. Nhưng stretch thì chỉ stretch 1 điểm thôi chứ không phải stretch cả đám ssget. Gửi lại bản lisp đã sửa.

http://www.cadviet.com/upfiles/3/127168_tmp1_12.lsp

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

 

Mình dùng cái này rất nhiều nhưng quá nhiều động tác mong bạn nào giúp đỡ để kiếm thêm tý cơm nuôi vợ :)

Mình muốn stretch đối tượng đến vị trí mà vị trí đó cách vị trí mình click chuột 1 khoảng xác định trước ( khoảng định trước sẽ lưu vào các lần tiếp theo như lênh offset)

 ví dụ: với một line

 stretch (vao lenh)  -> chọn 1 đầu đoạn thẳng  ( vao lenh ) -> chon điểm xuất phát ->  chọn điểm đến-> chọn khoảng cách( khoang cach nay se lưu lại vào các lần sau như lệnh offset  chảng hạn)  

 Cám ơn và mời cafe trà đá.

 

 

Đây là cái lisp stretch cách một điểm nhưng không biết lưu giá trị đó lại cho lần sau

http://www.cadviet.com/upfiles/3/21669_stretch_from.lsp

 
(defun c:SS (/ sset P1 P2)
(setq sset (ssget))
(if (null sset) 
(progn(princ "\nERROR: Nothing selected.")
(exit)))
(setq p1 (getpoint "First point : ")
p2 (getpoint p1 "Base point : "))
(command "stretch" sset "" P1 "FROM" P2))

Hề hề hề,

Chả biết bạn sử dụng cái lisp bạn gửi như thế nào, nhưng mình thử thì nó nằm chỏng gọng chứ chả chịu ngọ nguậy gì. Về cơ bản cái dòng lệnh

(command "stretch" .......) sai về cú pháp sử dụng lệnh stretch của cad. Bạn hãy check lại coi sao.

Bạn dùng thử cái này coi đã đủ để "kiếm thêm tý (tiền) nuôi vợ chưa nhé??? Nếu chưa thì hãy chỉ rõ cái chỗ chưa đủ ấy để xem có cách gì sửa cho đúng ý bạn được không nhé. Hoặc là bỏ bèng vợ đi để khỏi phải mất công nuôi nấng và khỏi phải "kiếm thêm".

Chớ có tự ái vì cái lisp này là mình ăn cắp chút chút từ cái bạn gửi biếu cho dù cái ấy nó chưa thực sự kiếm được cơm.

http://www.cadviet.com/upfiles/3/5194_21669_stretch_from.lsp.

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 2 bạn đã theo dõi giúp mình, 

nhưng vợ thì không bỏ được  hề hề

lệnh của mình gửi bản chất chỉ là lệnh Stretch rồi sau đó dùng chức năng FROM của chuột phải

 

ví dụ đối tượng là 1 rectang  và có đường thăng đứng .

trình tự  : gõ stretch_ chọn đốt tượng_chọn điểm bắt đầu giữ SHIFT + chuột phải rồi chọn FROM xong chọn điểm mốc rồi dịch hướng cần Stretch + nhập khoảng cách

 Đấy mình muốn kết hợp tất cả cái đó với một con số cố định trước đó bạn cái mình up lên phải nhập cái khoảng cách mà cái khoảng cách đấy thường xuyên được nhắc lại.

 

nhờ bạn chỉnh sửa

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 2 bạn đã theo dõi giúp mình, 

nhưng vợ thì không bỏ được  hề hề

lệnh của mình gửi bản chất chỉ là lệnh Stretch rồi sau đó dùng chức năng FROM của chuột phải

 

ví dụ đối tượng là 1 rectang  và có đường thăng đứng .

trình tự  : gõ stretch_ chọn đốt tượng_chọn điểm bắt đầu giữ SHIFT + chuột phải rồi chọn FROM xong chọn điểm mốc rồi dịch hướng cần Stretch + nhập khoảng cách

 Đấy mình muốn kết hợp tất cả cái đó với một con số cố định trước đó bạn cái mình up lên phải nhập cái khoảng cách mà cái khoảng cách đấy thường xuyên được nhắc lại.

 

nhờ bạn chỉnh sửa

Hề hề hề,

Không biết bạn là người viết đoạn lisp này hay là do người khác viết. Song bạn đã dùng thử chưa và kết quả ra sao????

Bạn dã dùng thử cái lisp mình gửi hay chưa?? Bạn có ý kiến gì về cái lisp đó??? Nó có đúng với yêu cầu của bạn hay không??? Nếu không thì không ở chỗ nào??

Nếu đúng thì bạn hãy so sánh hai cái lisp để hiểu được vì sao mình nói rằng cái lisp bạn gửi chưa đúng với cú pháp sử dụng của lệnh stretch trong CAD.

Dù sao cũng cám ơn bạn vì qua đó mình biết thêm được một cách sử dụng lệnh stretch.

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

Mọi người cho mình hỏi mình thiết lập 1 khoảng cách có sẵn lisp trên mà không được . Ai giúp mình với. Cảm ơn rất rất nhiều!

(defun c:SS (/ sset P1 P2)

(setq sset (ssget))

(if (null sset)

(progn(princ "\nERROR: Nothing selected.")

(exit)))

(setq p1 (getpoint "First point : ")

p2 (getpoint p1 "Base point : "))

command "stretch" sset "" P1 "FROM" P2 "100"))

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ạn thử nghiên cứu thêm Grread để lấy tọa độ trỏ chuột hiện tại >>> Cấp thêm tọa độ điểm thứ 3 theo kiểu tọa độ cực với góc tọa độ là P2, hướng P2-Chuột, k/c "100"

p/s:
Tạt ngang & phát biểu vội, nếu có sai sót xin nhẹ 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

Bạn có thể dành ít thời gian giúp mình được không. Tại vì mình hay làm như thế lặp đi lặp lại. Cảm ơn bạn rất rất nhiều!!!

  • Vote giảm 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

Stretch với điểm đầu là 0,0, điểm thứ 2 là 100,0 là bạn đã di chuyển đi 1 đoạn 100 sang phải rồi. Cứ thể mà áp dụng, k cần getpoint nữa

  • Vote giảm 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
Vào lúc 19/3/2019 tại 09:21, BinhQN đã nói:

Mọi người cho mình hỏi mình thiết lập 1 khoảng cách có sẵn lisp trên mà không được . Ai giúp mình với. Cảm ơn rất rất nhiều!

(defun c:SS (/ sset P1 P2)

(setq sset (ssget))

(if (null sset)

(progn(princ "\nERROR: Nothing selected.")

(exit)))

(setq p1 (getpoint "First point : ")

p2 (getpoint p1 "Base point : "))

command "stretch" sset "" P1 "FROM" P2 "100"))

+ Chơi dại thì có thể chơi gọn thế này:

(defun c:DC (/ P1 P2)
(setq p1 (getpoint "\nFirst point : ")
          p2 (GETCORNER P1 "\nBase point : "))
(command "STRETCH" (ssget "C" p1 p2) "" '(0 0) '(100 0))
(princ))

Nhược điểm: Không kiểm soát rõ ràng cái gì được Stretch. 

  • Like 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

Em cảm ơn bác Danh Cong. Em cũng thử lisp anh rồi nhưng chưa đúng ý. Nên em cũng viết thử. Nhưng bị nhược điểm mất bắt điểm!!!

**
(defun c:SS (/ OLDERR CMD OSM sset P1 P2 a p)
(SETQ OLDERR *error*
      *error* myerror)
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(setq sset (ssget))
(if (null sset) 
(progn(princ "\nERROR: Nothing selected.")
(exit)))
(INITGET 7)
(setq p1 (getpoint "First point : ")
p2 (getpoint p1 "Base point : "))
(INITGET 7)
(setq p (getpoint p2 "\nSpecify a point for angle of line: \n"))
(SETVAR "OSMODE" 0)
(setq a (polar p2 (angle p2 p) 1000))
(command "stretch" sset "" P1 "FROM" P2 a))
(SETVAR "OSMODE" OSM)
(SETVAR "CMDECHO" CMD)
(PRINC)
)
 

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

Thử lisp này xem

 

(defun c:ss(/ p1 p2 g1 sset)
  (if (setq sset (ssget))
    (progn
      (setq p1 (getpoint "\nFirst point : ")
        p2 (getpoint "\nFrom point : ")
        g1 (getangle p2 "\nAngle:")
        p2 (polar p2 g1 1000)
        g1 (getvar 'osmode))
      (setvar 'osmode 0)
      (command "STRETCH" sset "" p1 p2)
      (setvar 'osmode g1))
    (princ "\nERROR: Nothing selected."))
  (princ))
      

  • Like 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

Bác giúp em hiện đường thẳng lúc kéo để biết có vuông góc được không ạ, và giúp em nếu đang dùng lệnh của chương trình mà bạn nhấn phím Esc thì chế độ bắt vẫn trả lại 

Em cảm ơn!

  • Vote giảm 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

(defun c:ss(/ p1 p2 g1 sset)
  (if (and (setq sset (ssget))

           (setq p1 (getpoint "\nFirst point : "))

           (setq p2 (getpoint p1 "\nFrom point : "))

           (setq g1 (getangle p2 "\nAngle:")))
    (progn
      (setq p2 (polar p2 g1 1000)
        g1 (getvar 'osmode))
      (setvar 'osmode 0)
      (command "STRETCH" sset "" p1 p2)
      (setvar 'osmode g1))
    (princ "\nERROR: "))
  (princ))

 

Mình sửa cho bạn như vậy trên ipad nên bạn xem thử như thế nào.

Bạn cũng biết lisp nên mình nghĩ bạn biết nên xử lý thế nào. Còn nếu muốn preview nhiều thì khá phức tạp vì phải làm grread. Còn trả biến osmode thì do nhập giá trị nil nên hàm lỗi.

  • Like 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
44 phút trước, ngokiet đã nói:

Còn trả biến osmode thì do nhập giá trị nil nên hàm lỗi.

Khi viết chương trình nhỏ đôi khi không cần phải đặt biến Osmode = 0.

Ví dụ: (command ".LINE" "non" P1 "non" "P2" ""). Thì "non" có nghĩa là đặt tạm thời chế độ bắt điểm lúc này bằng 0, nó chỉ có tác dụng 1 lần duy nhất trước khi pick P1 thôi, vậy nên đến P2 lại phải thao tác lại. :))) Hi vọng điều này hữu ích cho bạn.

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
17 phút trước, Danh Cong đã nói:

Khi viết chương trình nhỏ đôi khi không cần phải đặt biến Osmode = 0.

Ví dụ: (command ".LINE" "non" P1 "non" "P2" ""). Thì "non" có nghĩa là xóa tạm thời chế độ bắt điểm lúc này bằng 0, nó chỉ có tác dụng 1 lần duy nhất trước pick P1 thôi, vậy nên đến P2 lại phải đặt lại. :))) Hi vọng điều này hữu ích cho bạn.

Mình cũng biêt nhưng mình ít sử dụng hàm command. Mình thích sửa trực tiếp hơn là command. Chẳng qua do bạn ấy muốn viết lisp nên mình làm theo form bạn ấy cho dễ hiểu để có thể tự chỉnh sửa theo nhu cầu của bạn ấy thôi. Còn sài hàm vl thì đở lỗi hơn.

 

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

Giờ trên máy tính nên mình sửa 1 chút cho bạn theo ý bác @Danh Cong

Bổ sung thêm có thể nhập lại khoảng cách from (Lúc nhập Angle thì nhấn D or Setdist)

 Sửa lại mới biết là khi dùng lệnh getangle thì có thể nhập góc bằng ký tự NEWS (Bắc Đông Tây Nam) Hic hic

- Có 1 biến global là *offsets* để lưu khoảng cách offset.

 

(defun c:ss(/ p1 p2 g1 sset cmd)
  (or (numberp *offsets*) (setq *offsets* 1000))
  (if (and (setq sset (ssget))
           (setq p1 (getpoint "\nFirst point : "))
           (setq p2 (getpoint p1 "\nFrom point : "))
       (progn
         (while (eq (progn
              (initget "setDist")
              (setq g1 (getangle p2 (strcat "\nDistance = "(rtos *offsets*) " ; Angle [setDist]:"))))
            "setDist")
           (If (setq g1 (getdist (strcat "Distance <" (rtos *offsets*) ">:"))) (setq *offsets* g1)))
         g1))
    (progn
      (setq cmd (getvar 'cmdecho))
      (setvar 'cmdecho 0)
      (command "stretch" sset "" "non" p1 "non" (polar p2 g1 *offsets*))
      (setvar 'cmdecho cmd))
    (princ "\nERROR: "))
  (princ))
      
      

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
Đăng nhập để thực hiện theo  

×