Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 mrphuocvie

mrphuocvie

    biết vẽ ellipse

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

Đã gửi 11 June 2014 - 08:49 PM

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.

  • 0

#2 mrphuocvie

mrphuocvie

    biết vẽ ellipse

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

Đã gửi 12 June 2014 - 11:20 AM

Help me!


  • 0

#3 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 12 June 2014 - 12:39 PM

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ó "".


  • 0

#4 mrphuocvie

mrphuocvie

    biết vẽ ellipse

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

Đã gửi 12 June 2014 - 12:47 PM

Anh ơi! em đã chỉnh sửa lại rồi chưa chưa được ah!


  • 0

#5 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 12 June 2014 - 12:58 PM

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?


  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 12 June 2014 - 01:48 PM

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 ""))
 


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


#7 mrphuocvie

mrphuocvie

    biết vẽ ellipse

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

Đã gửi 12 June 2014 - 06:21 PM

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.


  • 0

#8 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 12 June 2014 - 07:17 PM

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)
)
 

  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 12 June 2014 - 09:39 PM

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 ư?


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


#10 mrphuocvie

mrphuocvie

    biết vẽ ellipse

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

Đã gửi 12 June 2014 - 10:01 PM

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ở!


  • 0

#11 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 13 June 2014 - 12:03 AM

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 "")


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 June 2014 - 08:16 AM

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.


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