Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp copy array tổng hợp !


  • Please log in to reply
14 replies to this topic

#1 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 08 May 2011 - 07:18 AM

Em có cái lisp copy array theo các tuỳ chọn rất hay. Nhưng hiện tại nó đang bị lỗi cái mục chọn Key "2". Bác pro nào sửa giúp em mục đó với ạ !
Code
;;;;;;;;;;;;;;;;;;=================== 44================
(DEFUN C:44 ()
(Command "undo" "begin")
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(initget "1 2 3")

(setq key
(getkword
"\n Nhap a=,Auto fix....2:Copy ra doan @n..... 3:so doi tuong :"
)
)
(if (not key)

(progn

(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(PROMPT "\nArray object!")
(SETQ SLT (SSGET))
(initget 7)

(PROMPT "\nStart point:")
(SETQ SPT (GETPOINT))
(PROMPT "\nEnd point:")
(SETQ EPT (GETPOINT SPT))
(SETVAR "OSMODE" 0)
(SETQ GC (ANGLE SPT EPT))

(if ot1
(setq ot2 (getreal (strcat "\na= <" (rtos ot1) ">:")))
(setq ot1 (getreal "\na=:"))
)
(if ot2
(setq ot1 ot2)
)


(Setq NET ot1)
(SETQ DST (DISTANCE SPT EPT))
(SETQ NET1 (/ dst net))

(SETQ NET2 (+ net1 0.5))
(SETQ NET3 (fix net2))




(SETQ DST1 (/ DST NET3))
(SETQ DEM 1)
(WHILE (< DEM NET3)
(SETQ BDT (* DEM DST1))
(SETQ PT1 (POLAR SPT GC BDT))
(COMMAND "COPY" SLT "" SPT PT1)
(SETQ DEM (+ DEM 1))
)
(SETVAR "CMDECHO" CMD)
(command "OSMODE" "15359")
)

(PRINC)
)

;=============

(if (= key "2")
(progn
(setq cmdo (getvar "cmdecho"))
;(command "_.ucs" "")
(setvar "cmdecho" 0)
(princ "\nCopy array:")
(setq ss1 (ssget))
(setq p1 (getpoint "First point: "))
(setq p2 (getpoint p1 "Second point: "))
(if ca:distance
(progn
(setq std (rtos ca:distance 2 4))
(setq d (getdist (strcat "@n=<" std ">: ")))
(if d
(setq ca:distance d)
)
) ;end progn
(setq ca:distance (getdist "a= "))
) ;end if
(setq a (angle p1 p2))
(setq a (* (/ 180 pi) a))
(command "_.ucs" "z" a)
(setq di (distance p1 p2))
(setq d ca:distance)
(setq n (/ di d))
(setq n (+ 1 (atoi (rtos n 2 1))))
(command "_.array" ss1 "" "r" 1 n d)
(command "_.ucs" "")
(setvar "cmdecho" cmdo)
(command "OSMODE" "15359")
(princ)
)
)



(if (= key "3")
(progn
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(PROMPT "\nArray object!")
(SETQ SLT (SSGET))
(initget 7)
(SETQ NET (GETINT "\nSo doi Tuong:"))
(PROMPT "\nDiem Dau:")
(SETQ SPT (GETPOINT))
(PROMPT "\nDiem cuoi:")
(SETQ EPT (GETPOINT SPT))
(SETVAR "OSMODE" 0)
(SETQ GC (ANGLE SPT EPT))
(SETQ DST (DISTANCE SPT EPT))
(SETQ DST1 (/ DST (- NET 1)))
(SETQ DEM 1)
(WHILE (< DEM (- NET 1))
(SETQ BDT (* DEM DST1))
(SETQ PT1 (POLAR SPT GC BDT))
(COMMAND "COPY" SLT "" SPT PT1)
(SETQ DEM (+ DEM 1))
)
(PROMPT "\nKS Pham Hoang Giang")
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(command "OSMODE" "15359")
(PRINC)
)
)
)

Nhắc bạn Hoàng Giang khi post code chú ý cho vào thẻ Code!
  • 0
Hoàng Giang

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 May 2011 - 07:28 AM

Bạn có thâm niên request rồi, nên mình có chút góp ý :
1. Lỗi của bạn là gì ? Mọi người không biết
2. Bạn cần cho đoạn mã vào thẻ code
P/S : bạn là Pham Hoang Giang ??
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 08 May 2011 - 04:36 PM

Em có cái lisp copy array theo các tuỳ chọn rất hay. Nhưng hiện tại nó đang bị lỗi cái mục chọn Key "2". Bác pro nào sửa giúp em mục đó với ạ !
Code

;;;;;;;;;;;;;;;;;;=================== 44================
(DEFUN C:44 ()
(Command "undo" "begin")

)
)
)

Nhắc bạn Hoàng Giang khi post code chú ý cho vào thẻ Code!


Mình nghĩ file của bạn sai UCS thôi. bạn chuyển về UCS World rồi dùng lệnh thử coi dc ko.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#4 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 08 May 2011 - 05:55 PM

Mình nghĩ file của bạn sai UCS thôi. bạn chuyển về UCS World rồi dùng lệnh thử coi dc ko.

Em đã để UCS về WORLD rồi nhưng khi chạy thì nó bị lỗi như sau :
Command: 44
Nhap a=,Auto fix....2:Copy ra doan @n..... 3:so doi tuong :2
Copy array:
Select objects: Specify opposite corner: 1 found

Select objects: First point: Second point: @n=<2.0000>: 2.000000
error: Function cancelled

Và sau khi lỗi thì trục UCS bị thay đổi !
  • 0
Hoàng Giang

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 08 May 2011 - 06:58 PM

Em đã để UCS về WORLD rồi nhưng khi chạy thì nó bị lỗi như sau :
Command: 44
Nhap a=,Auto fix....2:Copy ra doan @n..... 3:so doi tuong :2
Copy array:
Select objects: Specify opposite corner: 1 found

Select objects: First point: Second point: @n=<2.0000>: 2.000000
error: Function cancelled

Và sau khi lỗi thì trục UCS bị thay đổi !

Bạn thay dòng:
(command "_.array" ss1 "" "r" 1 n d)
Bởi dòng dưới đây xem sao:
(if (> n 1) (command "_.array" ss1 "" "r" 1 n d))
  • 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.


#6 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 09 May 2011 - 03:47 AM

Bạn thay dòng:
(command "_.array" ss1 "" "r" 1 n d)
Bởi dòng dưới đây xem sao:
(if (> n 1) (command "_.array" ss1 "" "r" 1 n d))

Em đã thay dòng đó nhưng mà khi chạy thì lisp không copy đối tượng ra được. Nó chỉ thay đổi trục ucs của mình thôi ạ !
  • 0
Hoàng Giang

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 09 May 2011 - 11:00 AM

Em đã thay dòng đó nhưng mà khi chạy thì lisp không copy đối tượng ra được. Nó chỉ thay đổi trục ucs của mình thôi ạ !

Có những điều khó hiểu trong lệnh copy_array mà bạn đang dùng:
1. "First point" và "Second point" ngoài xác định hướng để array thì "Second point" có khống chế các đối tượng array phải nằm trong khoảng từ "First point" đến "Second point" không? Nếu khống chế thì khi bạn chọn khoảng cách "a" lớn hơn khoảng cách này nó sẽ không array là phải. Nó chỉ array khi "a" nhỏ hơn hoặc bằng khoảng cách này mà thôi.
2. Nếu 2 điểm đó chỉ xác định hướng thì bạn phải nhập số lần chứ không phải khoảng cách.
Vấn đề này cũng đơn giản thôi. Bạn nói rõ ý tưởng tôi sẽ sửa cho.
  • 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.


#8 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 09 May 2011 - 10:12 PM

Có những điều khó hiểu trong lệnh copy_array mà bạn đang dùng:
1. "First point" và "Second point" ngoài xác định hướng để array thì "Second point" có khống chế các đối tượng array phải nằm trong khoảng từ "First point" đến "Second point" không? Nếu khống chế thì khi bạn chọn khoảng cách "a" lớn hơn khoảng cách này nó sẽ không array là phải. Nó chỉ array khi "a" nhỏ hơn hoặc bằng khoảng cách này mà thôi.
2. Nếu 2 điểm đó chỉ xác định hướng thì bạn phải nhập số lần chứ không phải khoảng cách.
Vấn đề này cũng đơn giản thôi. Bạn nói rõ ý tưởng tôi sẽ sửa cho.

Lisp này có 3 lựa chọn.
Lựa chọn 1 : Chia đều đoạn AB ra với khoảng cách là giá trị gần nhất giá trị a nhập vào ==> chạy ok
Lựa chọn 2: Copy cách đều các đối tượng ra từng đoạn = a nhập vào trong đoạn từ "First point" đến "Second point" ==> đang bị lỗi
Lựa chọn 3 : nhập vào số đối tượng từ "First point" đến "Second point" , nó sẽ copy ra n đối tượng cách đều nhau.
Các lựa chọn không hề bị chồng chéo nhau. trường hợp khoảng a nhập vào > khoảng cách "First point" tới "Second point" thì nó sẽ ko copy được ra !
  • 0
Hoàng Giang

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 09 May 2011 - 10:29 PM

Lisp này có 3 lựa chọn.
Lựa chọn 1 : Chia đều đoạn AB ra với khoảng cách là giá trị gần nhất giá trị a nhập vào ==> chạy ok
Lựa chọn 2: Copy cách đều các đối tượng ra từng đoạn = a nhập vào trong đoạn từ "First point" đến "Second point" ==> đang bị lỗi
Lựa chọn 3 : nhập vào số đối tượng từ "First point" đến "Second point" , nó sẽ copy ra n đối tượng cách đều nhau.
Các lựa chọn không hề bị chồng chéo nhau. trường hợp khoảng a nhập vào > khoảng cách "First point" tới "Second point" thì nó sẽ ko copy được ra !

1) Lựa chọn 2: Copy cách đều các đối tượng ra từng đoạn = a nhập vào trong đoạn từ "First point" đến "Second point" ==> đang bị lỗi
2) trường hợp khoảng a nhập vào > khoảng cách "First point" tới "Second point" thì nó sẽ ko copy được ra !

Từ 1) suy ra các đối tượng sau khi copy phải nằm trong đoạn "First point" đến "Second point"
Từ 2) suy ra các đối tượng sau khi copy phải nằm ngoài đoạn "First point" đến "Second point"
Như thế làm sao copy?
  • 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 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 10 May 2011 - 01:00 PM

1) Lựa chọn 2: Copy cách đều các đối tượng ra từng đoạn = a nhập vào trong đoạn từ "First point" đến "Second point" ==> đang bị lỗi
2) trường hợp khoảng a nhập vào > khoảng cách "First point" tới "Second point" thì nó sẽ ko copy được ra !

Từ 1) suy ra các đối tượng sau khi copy phải nằm trong đoạn "First point" đến "Second point"
Từ 2) suy ra các đối tượng sau khi copy phải nằm ngoài đoạn "First point" đến "Second point"
Như thế làm sao copy?

khi a < đoạn "First point" đến "Second point" thì nó phải copy được ? đó là trường hợp bài toán sử dụng ? các đối tượng sinh ra nằm trong đoạn "First point" đến "Second point"
  • 0
Hoàng Giang

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2011 - 01:38 PM

khi a < đoạn "First point" đến "Second point" thì nó phải copy được ? đó là trường hợp bài toán sử dụng ? các đối tượng sinh ra nằm trong đoạn "First point" đến "Second point"

Đương nhiên khi a < đoạn "First point" đến "Second point" thì nó phải copy được, còn a > đoạn "First point" đến "Second point" thì nó không copy đươc (vì vô lý).
Lệnh 44 vẫn đúng như vậy mà? Nhớ là không có lỗi gì ở UCS đâu nhé. Tôi vẫn sử dụng tốt mà.
  • 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.


#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 May 2011 - 02:06 PM

Không hiểu 2 bác đang tranh cãi về cái gì nữa ^^ Cái này khéo bác DVH viết lại 1 cái cho bạn ấy còn nhanh hơn giải thích ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 10 May 2011 - 02:19 PM

Không hiểu 2 bác đang tranh cãi về cái gì nữa ^^
..........

@ ketxu : Chắc là tranh cãi để tìm ra cái "tùy chọn rất hay" í mà ?!

Em có cái lisp copy array theo các tuỳ chọn rất hay. .........


  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 May 2011 - 02:35 PM

@ ketxu : Chắc là tranh cãi để tìm ra cái "tùy chọn rất hay" í mà ?!

@Bác Ket: thì bạn ấy cứ loay hoay quanh 1 chỗ ấy, biết làm sao đươc.
@Bác Bach: thực ra thì lisp cũng hay chứ, nhưng... như "@Bác Ket".
Tóm lại: rút kinh nghiệm, lần sau không loay hoay một chỗ như vậy nữa. Hì.
  • 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.


#15 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 10 May 2011 - 04:45 PM

@Bác Ket: thì bạn ấy cứ loay hoay quanh 1 chỗ ấy, biết làm sao đươc.
@Bác Bach: thực ra thì lisp cũng hay chứ, nhưng... như "@Bác Ket".
Tóm lại: rút kinh nghiệm, lần sau không loay hoay một chỗ như vậy nữa. Hì.

Đúng là cái 44 nó vẫn chạy. Nhưng bác thử đánh 44 rồi chọn "2" rồi chọn đối tượng và nhập đoạn a để nó chạy xem nó có copy ra được ko ? hic ! gần đây nó bị lỗi !
  • 0
Hoàng Giang