Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
mrphuocvie

Tư vấn hiệu chỉnh giúp đoạn lisp về lệnh COPY!

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

mrphuocvie    8

Command: COPY
Select objects: 1 found
Select objects:
Current settings:  Copy mode = Multiple
Specify base point or [Displacement/mOde] <Displacement>:
Specify second point or [Array] <use first point as displacement>: a
Enter number of items to array: 10
Specify second point or [Fit]: f
Specify second point or [Array]:
Specify second point or [Array/Exit/Undo] <Exit>:
;Phía trên là các dòng lệnh thực hiện trong Autocad2015, mình muốn đơn giản thao tác trên bằng đoạn lisp này nhưng...
;Điều mình mong muốn là: Chọn đối tượng, chọn điểm đầu, điểm cuối, số lượng array trong khoảng từ điểm đầu đến diểm cuối.
(defun C:`CR1()
	(setq ss (ssget))
	(setq p1 (getpoint "\nPick first point!"))
	(setq p2 (getpoint "\nPick second point!"))
	(setq nb (getreal "\nInput number <10>:"))
	(command "copy" ss p1 "a" nb "f" p2 "")
)
--------------------------------------------------------------------------------------------------
Command: COPY
Select objects: 1 found
Select objects:
Current settings:  Copy mode = Multiple
Specify base point or [Displacement/mOde] <Displacement>:
Specify second point or [Array] <use first point as displacement>: a
Enter number of items to array: 10
Specify second point or [Fit]:
Specify second point or [Array/Exit/Undo] <Exit>:
;Phía trên là các dòng lệnh thực hiện trong Autocad2015, mình muốn đơn giản thao tác trên bằng đoạn lisp này nhưng...
;Điều mình mong muốn là: Chọn đối tượng, chọn điểm đầu, điểm cuối, khoảng cách giữa các đối tượng được array sau đó lisp sẽ tính số lượng và thực hiện lệnh.
(defun C:`CR2()
	(setq ss (ssget))
	(setq p1 (getpoint "\nPick first point!"))
	(setq p2 (getpoint "\nPick second point!"))
	(setq dt (getreal "\nInput distance <100>:"))
	(setq nb (+ fix(/ (distance p1 p2) dt) 1))
	(command "copy" ss p1 "a"  nb "" p2 "")
)

 

Command: COPY
Select objects: 1 found
Select objects:
Current settings:  Copy mode = Multiple
Specify base point or [Displacement/mOde] <Displacement>:
Specify second point or [Array] <use first point as displacement>: a
Enter number of items to array: 10
Specify second point or [Fit]: f
Specify second point or [Array]:
Specify second point or [Array/Exit/Undo] <Exit>:
;Phía trên là các dòng lệnh thực hiện trong Autocad2015, mình muốn đơn giản thao tác trên bằng đoạn lisp này nhưng...
;Điều mình mong muốn là: Chọn đối tượng, chọn điểm đầu, điểm cuối, số lượng array trong khoảng từ điểm đầu đến diểm cuối.
(defun C:`CR1()
(setq ss (ssget))
(setq p1 (getpoint "\nPick first point!"))
(setq p2 (getpoint "\nPick second point!"))
(setq nb (getreal "\nInput number <10>:"))
(command "copy" ss p1 "a" nb "f" p2 "")
)
--------------------------------------------------------------------------------------------------------------------

 

 

Command: COPY
Select objects: 1 found
Select objects:
Current settings:  Copy mode = Multiple
Specify base point or [Displacement/mOde] <Displacement>:
Specify second point or [Array] <use first point as displacement>: a
Enter number of items to array: 10
Specify second point or [Fit]:
Specify second point or [Array/Exit/Undo] <Exit>:
;Phía trên là các dòng lệnh thực hiện trong Autocad2015, mình muốn đơn giản thao tác trên bằng đoạn lisp này nhưng...
;Điều mình mong muốn là: Chọn đối tượng, chọn điểm đầu, điểm cuối, khoảng cách giữa các đối tượng được array sau đó lisp sẽ tính số lượng và thực hiện lệnh.
(defun C:`CR2()
(setq ss (ssget))
(setq p1 (getpoint "\nPick first point!"))
(setq p2 (getpoint "\nPick second point!"))
(setq dt (getreal "\nInput distance <100>:"))
(setq nb (+ fix(/ (distance p1 p2) dt) 1))
(command "copy" ss p1 "a"  nb "" p2 "")
)
;Phía trên là các dòng lệnh thực hiện trong Autocad2015, mình muốn đơn giản thao tác trên bằng đoạn lisp này nhưng...
;Điều mình mong muốn là: Chọn đối tượng, chọn điểm đầu, điểm cuối, số lượng array trong khoảng từ điểm đầu đến diểm cuố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
Tot77    501

Không có cad2015 để test nhưng dựa vào lisp của bạn thấy có những cái cần sửa sau:

1. Sau (command "copy" ss thì có thêm "".

2. Thay getreal bằng getint.

3.  (+ fix(/ (distance --> (+ (fix(/ (distance 

4. Cuối lệnh copy không có "".

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
Tot77    501

Kẹt là tôi không có cad15 nên không biết lỗi ở đâu, lệnh copy của cad15 khác với đời cad trước. Nó báo lỗi thế nà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
Doan Van Ha    2.676

Cũng không có Cad2015, nhưng độ là vầy:


(defun C:CR1( / ss p1 p2 nb)
 (setq ss (ssget))
 (setq p1 (getpoint "\nPick first point!"))
 (setq p2 (getpoint "\nPick second point!"))
 (setq nb (getint "\nInput number <10>:"))
 (if (not nb) (setq nb 10))
 (command "copy" ss "" p1 "a" nb "f" p2 ""))
(defun C:CR2( / ss p1 p2 dt nb)
 (setq ss (ssget))
 (setq p1 (getpoint "\nPick first point!"))
 (setq p2 (getpoint "\nPick second point!"))
 (setq dt (getreal "\nInput distance <100>:"))
 (if (not dt) (setq dt 100))
 (setq nb (+ (fix (/ (distance p1 p2) dt)) 1))
 (command "copy" ss "" p1 "a"  nb 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
mrphuocvie    8

Cũng không được luôn anh Doan Van Ha ah!

Ngoài đoạn lisp trên mọi người có thể viết giúp em đoạn lisp có tác dụng như vậy hay không?

`CR1:

- Chọn đối tượng

- Chọn điểm đầu

- Chọn điểm cuối

- Nhập khoảng cách để array đối tượng từ điểm đầu đến điểm cuối.

`CR2:

- Chọn đối tượng

- Chọn điểm đầu

- Chọn điểm cuối

- Nhập số lượng để array đối tượng từ điểm đầu đến điểm cuối.

Thanks.

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
Tot77    501

Viết lại cái của bạn.

 

(defun C:`CR1()  
  (setq ss (ssget))
  (setq p1 (getpoint "\nPick first point!"))
  (setq p2 (getpoint p1 "\nPick second point!"))
  
  (if (not nb) (setq nb 10))
  (setq nb1 (getint (strcat "\nInput number <" (itoa nb) ">:"))) 
  (if nb1 (setq nb nb1))
  
  (setq dt (/ (distance p1 p2) nb 1.0)
os (getvar 'osmode)
n 0)
  (setvar 'osmode 0)
  (repeat nb (command "copy" ss "" p1 (polar p1 (angle p1 p2) (* (setq n (1+ n)) dt))))
  (setvar 'osmode os)
  
)
 
(defun C:`CR2()
  (setq ss (ssget))
  (setq p1 (getpoint "\nPick first point!"))
  (setq p2 (getpoint p1 "\nPick second point!"))
  
  (if (not dt) (setq dt 100))
  (setq dt1 (getreal (strcat "\nInput distance <" (rtos dt) ">:")))
  (if dt1 (setq dt dt1))
    
  (setq nb (fix (/ (distance p1 p2) dt))
os (getvar 'osmode)
n 0)
  (setvar 'osmode 0)
  (repeat nb (command "copy" ss "" p1 (polar p1 (angle p1 p2) (* (setq n (1+ n)) dt))))
  (setvar 'osmode os)
)
 

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
Doan Van Ha    2.676

Cũng không được luôn anh Doan Van Ha ah!

Chán nhất là bệnh nhân cứ kêu đau mà không nói đau ở đâu!

Chẳng lẽ bạn không thể diễn giải cụ thể "không được" là như thế nà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
mrphuocvie    8

Hihi, lại một lần nữa cảm ơn anh Tot77 về sự giúp đỡ tận tình của anh.

Anh Doan Van Ha ah, em xin lỗi. Tại vì lúc chiều trước lúc đi làm về em lên forum thấy anh viết đoạn lisp đó rồi load về chạy. Không được nên buồn quá rồi về luôn và comment như thế. Lần sau em sẽ rút kinh nghiệm! Cảm ơn anh đã nhắc 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
phamthanhbinh    3.123

Hihi, lại một lần nữa cảm ơn anh Tot77 về sự giúp đỡ tận tình của anh.

Anh Doan Van Ha ah, em xin lỗi. Tại vì lúc chiều trước lúc đi làm về em lên forum thấy anh viết đoạn lisp đó rồi load về chạy. Không được nên buồn quá rồi về luôn và comment như thế. Lần sau em sẽ rút kinh nghiệm! Cảm ơn anh đã nhắc nhở!

Hề hề hề,

Mình cũng không có CAD2015 để thử. Song nếu như bạn mô tả phần thực hiện của lệnh copy thì có nhẽ là bạn đã thiếu tham số copy mode trong lisp. Hãy thử sửa lại như sau:

(command "copy" ss "" "m" p1 "a" nb "f" 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
Doan Van Ha    2.676

Hihi, lại một lần nữa cảm ơn anh Tot77 về sự giúp đỡ tận tình của anh.

Anh Doan Van Ha ah, em xin lỗi. Tại vì lúc chiều trước lúc đi làm về em lên forum thấy anh viết đoạn lisp đó rồi load về chạy. Không được nên buồn quá rồi về luôn và comment như thế. Lần sau em sẽ rút kinh nghiệm! Cảm ơn anh đã nhắc nhở!

Vẫn chưa nói được điều cần thiết, đó là sau khi dùng lệnh bị lỗi, nhấn F2, chụp màn hình paste lên đây xem sao.

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  

×