Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2851 replies to this topic

#2781 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 27 May 2016 - 04:42 PM

Không chỉ trong vòng lặp nó mới nhảy mà ở ngoài nó cũng nhảy, hàm này mỗi lần chạy sẽ print ra command line 1 ký tự xuống dòng. Kiểu như đó là 1 trong các nhiệm vụ của nó. Với zoom thì command lại nhanh hơn VLA nhiều. Trừ khi bác cần zoom callback của 1 reactor thì hãy dùng VLA, còn trong mọi trường hợp khác hãy dùng commmand.
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#2782 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 10 June 2016 - 09:42 AM

Chào các anh/chị.

 

Em đang viết đoạn Lisp để mở bản vẽ(đoạn này em làm được rồi), sau đó sắp xếp các cửa sổ đang mở theo Tile Vertically

Nhưng đang bị bí quá,loay hoay mãi tìm không ra hàm nào làm được công việc này.

 

Anh/chị nào biết chỉ em với ạ.

 

Em cảm ơn!


  • 0

#2783 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 10 June 2016 - 10:00 AM

Có command rồi mà bạn :)

(command "SYSWINDOWS" "H") 


  • 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


#2784 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 08 July 2016 - 11:24 AM


 


Bài viết đã được chỉnh sửa nội dung bởi thanhduan2407: 08 July 2016 - 11:33 AM

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2785 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 08 July 2016 - 11:33 AM

Các bác cho em hỏi chút ạ!

Khi bắt đầu thời từ lúc vẽ cho đến khi kết thúc em có 1 nhóm các đối tượng (Group1), sau đó em move nhóm đối tượng đó ra một vị trí khác (lúc đó nhóm đối tượng đó sẽ là Group2) để tạo thành một Wblock. Em muốn tóm được thằng Group2. Thao tác này được lặp đi lặp lại rất nhiều (nhiều Wblock với nhiều Group khác nhau) và em làm thao tác như này nhưng thấy càng về sau tốc độ chạy càng chậm (rồi nó đơ….chạy ngầm) nhưng vẫn ra kết quả. Em muốn nâng cấp để tăng tốc độ chương trình nên nhờ các bác chỉ giáo về cách thức.

 

 
(setq lstAll (list))
  (setq Elast (entlast))
  (while (< i n)
    (progn
      (setq P11 (vlax-curve-getPointAtParam Ob i)
   P22 (vlax-curve-getPointAtParam Ob (+ i 1))
      )

      (setq P_Goc (list (car P11) (cadr P22)))
      (TML1 P11 P22 Tleebd)
      (while
(setq Elast (entnext Elast))
(setq lstAll (reverse (cons Elast lstAll)))
      )
      (setq Elast2 (entlast))
      (ppn:vla-move-ss (CV:List-to-ss lstAll) P_Goc '(0 0 0))
      (while
(setq Elast2 (entnext Elast2))
(setq lstAll2 (reverse (cons Elast2 lstAll2)))
      )
      (command "-WBLOCK"
      (strcat "C:\\WBLOCK\\" "BV" (rtos (+ iii 1) 2 0) ".dwg")
      ""
      '(0 0 0)
      (CV:List-to-ss lstAll2)
      ""
      )
    )
    (setq iii (1+ iii))
    (setq i (+ i 2))
  )

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2786 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 09 July 2016 - 10:38 AM

Mình có ngàn rưỡi cái lisp chỉnh sửa đối tượng mà trong đó bước đầu tiên là chọn đối tượng sửa.

Nhớ nhiều mệt nên mình làm cái lisp chọn đối tượng xong tùy cái đối tượng đó là giống gì thì gọi cái lisp sửa tương ứng.

Vấn dề là làm sao gọi cái lệnh đó lên và biểu nó nhận cái đối tượng đã chọn trước để thực hiện mà ko phải chỉnh gì các lisp đã có cả.

Bác nào có hướng nào ko bày Duy với!


  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2787 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 July 2016 - 11:40 AM

Đang thèm 1 ví dụ cho dễ hiểu.


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


#2788 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 11 July 2016 - 10:07 AM

Ví dụ: Duy đã có 3 lisp xd xt xmt mỗi lisp bước đầu đều yêu cầu chọn 1 đối tượng duy nhất. Duy muốn gọi lệnh sd thì chọn 1 đối tượng là nó chạy luôn các lệnh xd xt xmt mà không hỏi chọn đối tượng 1 lần nửa (yêu cầu ko sửa lisp xd xt xmt còn lisp sd thì sửa thoải mái)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Chon mot doi tuong bat ky
;;;Cu phap su dung (duy:c_doituong<m mdich)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun duy:c_doituong<m (mdich / mdich dchon)
(princ (strcat "\nChon doi tuong " mdich " !"))
(setq dchon (car (entsel)))
(while
(null dchon)
(princ (strcat "\nChua chon duoc doi tuong. Chon doi tuong " mdich " !"))
(setq dchon (car (entsel)))
)
dchon)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xt ()
(setq dtcd (duy:c_doituong<m "muon sua"))
(command ".erase" dtcd "")
(Princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xmt ()
(setq dtcd (duy:c_doituong<m "muon sua"))
(command ".erase" dtcd "")
(Princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:xd ()
(setq dtcd (duy:c_doituong<m "muon sua"))
(command ".erase" dtcd "")
(Princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:sd ()
(setq dtcd (duy:c_doituong<m "muon sua"))
(setq doituongs (entget dtcd))
(setq KIEUDOITUONG (cdr (assoc 0 doituongs)))

(Cond
((= KIEUDOITUONG "TEXT") (c:xt)  )
((= KIEUDOITUONG "MTEXT") (c:xmt)  )
((= KIEUDOITUONG "DIMENSION") (c:xd)  )
)
(Princ))




  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2789 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 11 July 2016 - 11:25 AM

Chắc là vầy chăng?

(defun c:sd ()
 (mapcar '(lambda(x y) (vlax-add-cmd x y)) (list "xt" "xmt" "xd") (list 'c:xt 'c:xmt 'c:xd))
 (setq dtcd (duy:c_doituong<m "muon sua"))
 (setq doituongs (entget dtcd))
 (setq KIEUDOITUONG (cdr (assoc 0 doituongs)))
 (command "_.select" dtcd "")
 (Cond
  ((= KIEUDOITUONG "TEXT") (command "xt" dtcd))
  ((= KIEUDOITUONG "MTEXT") (command "xmt" dtcd))
  ((= KIEUDOITUONG "DIMENSION") (command "xd" dtcd)))
 (Princ))

  • 2

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


#2790 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 27 July 2016 - 07:34 PM

Các bác cho em hỏi xíu được không ạ!

Em copy viewport từ Layout sang Model.

Vậy làm sao có thể lấy được tọa độ của các đỉnh của Viewport được các bác nhỉ?

Em định convert Viewport thành Pline. Hic hic

Em cảm ơn các bác nhiều!


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2791 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

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

Đã gửi 27 July 2016 - 08:57 PM

Có mấy Property value của Viewport: Center, Height, Width => (Vlax-get obj 'value).

Hoặc:

+ Dxf 10: Center point

+ Dxf 40: Width

+ Dxf 41: Height


  • 1

#2792 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 27 July 2016 - 09:10 PM

Không biết lệnh EXPLODE có vấn đề gì mà lisp sau của mình ko chạy. Trong khi đó nếu thay lệnh EXPLODE bằng lệnh khác ví dụ ERASE thì chạy được. Các bác xoi giúp với.

(defun c:xbv ()
(command "undo" "be") 

(cond
((/= (ssget "x" '((0 . "dimension"))) nil) (command ".EXPLODE" (ssget "x" '((0 . "dimension"))) ""))
)


(cond
((/= (ssget "x" '((0 . "hatch"))) nil) (command ".EXPLODE" (ssget "x" '((0 . "hatch"))) ""))
)


(command "undo" "end") 
(Princ)
) 


  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#2793 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 27 July 2016 - 09:30 PM

1). Thay đổi biến EXPLMODE từ 0 sang 1. Nếu chưa được thì thử bước 2.

2). Thay đổi biến QAFLAGS. Đây cũng là biến hệ thống nhưng không có Help, nếu Google sẽ có.


  • 1

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


#2794 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 31 July 2016 - 05:03 PM

Có mấy Property value của Viewport: Center, Height, Width => (Vlax-get obj 'value).

Hoặc:

+ Dxf 10: Center point

+ Dxf 40: Width

+ Dxf 41: Height

Cảm ơn bác nhiều!


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2795 theanh9x99

theanh9x99

    Chưa sử dụng CAD

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

Đã gửi 01 August 2016 - 09:16 PM

Các bác cho em nhờ chút:

Em có một tập hợp nhiều đối tượng (Line, Poline, Spline, Circle, Rec, Arc,...)

Giờ em muốn lọc các đối tượng đó, cái nào dài hơn 200 chẳng hạn thì đổi màu và layer sang một màu mới.

Các cao thủ có thể giúp em được ko ạ.

Trân trọng cảm ơn!


  • 0

#2796 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 01 August 2016 - 09:40 PM

Topic này dùng để hỏi về thuật toán, ý tưởng... chứ không phải nhờ viết lisp. Bạn nên tạo 1 topic mới sẽ phù hợp hơn.

Riêng trường hợp của bạn có thể dùng lệnh qselect, rồi thay đổi.


  • 1

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


#2797 theanh9x99

theanh9x99

    Chưa sử dụng CAD

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

Đã gửi 01 August 2016 - 10:12 PM

vâng ạ, em cảm ơn ạ


  • 0

#2798 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 August 2016 - 11:22 AM

Ai biết thuật toán này tên gì không mách bảo tí để tìm hiểu:

Cho n điểm A,B,C,D,E... (gọi chung là các điểm X) trên m.phẳng. M là điểm di động. Các chi phí đơn vị từ M đến X là kX (đã biết). MX là các khoảng cách từ M đến X.

Tìm vị trí điểm M sao cho tổng chi phí là nhỏ nhất:

(MA*kA+MB*kB+MC*kC+MD*kD+ME*kE+...) -> Min


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


#2799 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 10 August 2016 - 01:36 PM

Ai biết thuật toán này tên gì không mách bảo tí để tìm hiểu:

Cho n điểm A,B,C,D,E... (gọi chung là các điểm X) trên m.phẳng. M là điểm di động. Các chi phí đơn vị từ M đến X là kX (đã biết). MX là các khoảng cách từ M đến X.

Tìm vị trí điểm M sao cho tổng chi phí là nhỏ nhất:

(MA*kA+MB*kB+MC*kC+MD*kD+ME*kE+...) -> Min

Mình cá là GS. Châu cũng bó tay :D, mình chỉ cần cho 2 điểm thôi (ko cần n điểm).

Tìm M để: ka*MA + Kb*MB -> Min

 

Ít nhất chắc cũng cần quan hệ giữa ka với kb chứ nhỉ  :huh:

 

Have fun! :D


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#2800 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 August 2016 - 02:10 PM

Ơ hay! kA và kB là các hằng số đã biết thì quan hệ giữa kA và kB là đã biết rồi, và bài toán 2 điểm thì giải được chứ sao lại không!

Nhắc lại cho rõ đề: các hằng số kX là đã biết, không phụ thuộc vị trí 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.