Đế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

#1481 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 25 January 2013 - 08:31 AM

(command "-hatch" p1 "p" "ansi31" 1 0 "")
  • 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.


#1482 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 January 2013 - 08:38 AM

(command "-hatch" p1 "p" "ansi31" 1 0 "")

chữ màu đỏ là tham số gì vậy anh Ha, vậy là phải đem chữ màu xanh ra trước hả anh :D
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1483 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 25 January 2013 - 08:44 AM

Sau cũng được. Ví dụ:
(command "-hatch" "p" "ansi31" 1 0 p1 "")
Chữ "P" là Properties.
Nói chung khi dùng hàm command: cad hỏi gì thì trả lời nấy. Cách nào cad chịu thì lisp ok.
  • 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.


#1484 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 January 2013 - 08:50 AM

oh xém tí lại hỉu sai rùi ^^, cứ nghĩ p là tham số chọn điểm pick là point ko phải object, nhưng trong bảng hatch nhoc đâu thấy chổ nào là properties ta, tại sao lại phải có propertis thì cad mới chịu nhỉ ^^
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1485 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 25 January 2013 - 08:55 AM

Bạn thử nhập dòng này vào command thì sẽ hiểu (bạn đang nhập từ command chứ không phải từ dialog):
(command "-hatch")
  • 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.


#1486 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 25 January 2013 - 09:09 AM

oh con đường học lsp của nhoc chắc còn dài đây :D, nhoc chưa pit khái niệm dialog là rì^^, chắc anh Ket chưa dạy tới
Ps: thanks anh HA nhiều
  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1487 thuphong

thuphong

    biết vẽ circle

  • Members
  • PipPip
  • 34 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 25 January 2013 - 01:07 PM

Các ace cho mình hỏi với: Trong lisp có hàm nào cho phép thay thế phần tử này bằng phần tử khác tại vị trí được chỉ định không. (Nếu không có xin nhờ các mode viết giúp giùm mình với).
VD
- List ban đầu : ((-1 . <Entities:...>) (10 . 2) (11 . 2) .....(11 . "3") (301 . 5)..))
- Muốn thay (11 . "3") bằng (11 . "4") tại vị trí của "em" (11 . "3") .List sau khi thay là: ((-1 . <Entities:...>) (10 . 2) (11 . 2) .....(11 . "4") (301 . 5)..))
- Lưu ý: trong list ban đầu có thể có nhiều phần tử giống mã nhau (VD trên là mã 11)
Ứng dụng : mình muốn tạo ra một multileader khác từ một multileader đã có.
Chân thành cảm ơn mọi người
  • 0

#1488 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 25 January 2013 - 01:26 PM

(subst newitem olditem lst)
  • 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.


#1489 Chiron

Chiron

    biết dimradius

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

Đã gửi 25 January 2013 - 01:35 PM

Các ace cho mình hỏi với: Trong lisp có hàm nào cho phép thay thế phần tử này bằng phần tử khác tại vị trí được chỉ định không. (Nếu không có xin nhờ các mode viết giúp giùm mình với).
VD
- List ban đầu : ((-1 . <Entities:...>) (10 . 2) (11 . 2) .....(11 . "3") (301 . 5)..))
- Muốn thay (11 . "3") bằng (11 . "4") tại vị trí của "em" (11 . "3") .List sau khi thay là: ((-1 . <Entities:...>) (10 . 2) (11 . 2) .....(11 . "4") (301 . 5)..))
- Lưu ý: trong list ban đầu có thể có nhiều phần tử giống mã nhau (VD trên là mã 11)
Ứng dụng : mình muốn tạo ra một multileader khác từ một multileader đã có.
Chân thành cảm ơn mọi người


Bạn dùng:
(subst newitem olditem lst)
newitem An atom or list.
olditem An atom or list.
lst A list.
Return Values
A list, with newitem replacing all occurrences of olditem. If olditem is not found in lst, subst returns lst unchanged.

Tham khảo thêm hàm entupd
  • 1

#1490 thuphong

thuphong

    biết vẽ circle

  • Members
  • PipPip
  • 34 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 25 January 2013 - 03:03 PM

Các bạn coi giúp giùm mình đọan test sau, sai chỗ nào mà mình tìm không rahttp://www.cadviet.c..._textlist_1.txt
  • 0

#1491 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 25 January 2013 - 03:18 PM

(entmod (subst (cons 302 "2") (cons 302 "1") (entget (car en))))
(entupd)
  • 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.


#1492 Chiron

Chiron

    biết dimradius

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

Đã gửi 25 January 2013 - 04:19 PM

Các bạn coi giúp giùm mình đọan test sau, sai chỗ nào mà mình tìm không rahttp://www.cadviet.c..._textlist_1.txt

(setq en (nentsel))
(<Entity name: 7ee8d600> (15.9828 8.05911 0.0)) => Trong này đâu có cái nào là 302 đâu.
(subst '(302 . "2") '(302 . "1") en) => sai chỗ này. Muốn thay thế thì phải (entget (car (en)))
  • 0

#1493 thuphong

thuphong

    biết vẽ circle

  • Members
  • PipPip
  • 34 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 25 January 2013 - 09:14 PM

(entmod (subst (cons 302 "2") (cons 302 "1") (entget (car en))))
(entupd)

Cảm ơn các Bác đã giúp đỡ. Đúng như bác ĐVH đã chỉ : phải entmode mới được
  • 0

#1494 duy267

duy267

    biết vẽ point

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

Đã gửi 26 January 2013 - 01:53 PM

Mình có DimStyle tên là "1.4". Bây giờ mình muốn chọn tất cả các LEADER có DimStyle là "1.4" mình dùng đoạn code sau:
(sssetfirst nil (ssget "X" (list (cons 0 "leader") (cons 3 "1.4")))) nhưng lại báo nil. Bạn nào có thể giải thích được không. Xin cảm ơn.
  • 0

#1495 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 26 January 2013 - 03:07 PM

Có thể nó không phải là LEADER mà là MULTILEADER.

Mà thằng MULTILEADER không lọc theo DimStyle được.
  • 0

#1496 VoHoan

VoHoan

    biết lệnh move

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

Đã gửi 31 January 2013 - 09:45 AM

Mình có viết lisp này đế xác định tâm của 1 hình kín, trước đây dùng bình thường giờ dùng lại thì bị báo lỗi này: "ActiveX Server returned the error: unknown name:
CENTROID"
Nhờ a e chỉ cách khắc phục với.

(defun c:tam ( / SS i ent P)
(vl-load-com)
(princ "\nChon cac doi tuong khep kin")
(setq SS (ssget)
i 0
)
(repeat (sslength SS)
(setq ent (ssname SS i)
P (vlax-safearray->list
(vlax-variant-value
(vlax-get-property
(vlax-ename->vla-object ent)
'Centroid
)
)
)
i (1+ i)
)
(command "CIRCLE" P 1)
)
(princ)
)

  • 0

#1497 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 31 January 2013 - 09:57 AM

Đối tượng phải là Region hoặc thêm đoạn code chuyển thành Region nữa
  • 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.


#1498 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 288 Bài viết
Điểm đánh giá: 142 (tàm tạm)

Đã gửi 31 January 2013 - 10:00 AM

Bạn chạy với đối tượng không có CENTROID thì nó lỗi là phải rồi. Nên catch error trong trường hợp này. và bắt buộc phải thêm điều kiện convert đối tượng về region (để lấy CENTROID)
  • 0

#1499 VoHoan

VoHoan

    biết lệnh move

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

Đã gửi 31 January 2013 - 10:06 AM

Bạn chạy với đối tượng không có CENTROID thì nó lỗi là phải rồi. Nên catch error trong trường hợp này. và bắt buộc phải thêm điều kiện conver đối tượng về region (để lấy CENTROID)

Lâu ngày không dùng lisp này nên quên bước quan trọng này, nhờ 2 bạn nhắc mới nhớ ra. Mình hay "xào, nấu lisp" với đi "mót" nên kiến thức về lisp chưa vững lắm. Nếu không convert thì có thuật toán gì đế lấy tâm của hình kín không?
  • 0

#1500 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 31 January 2013 - 10:28 AM

Tham khảo code của LM (tuy chưa hoàn hảo lắm). Trên CV cũng đã có nhưng tôi không nhớ nằm ở đâu.

(defun c:pc ( / acdoc acspc acsel reg ) (vl-load-com) ;; &#169; Lee Mac 2011
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace)))
(if (ssget '((0 . "LWPOLYLINE") (-4 . "&=") (70 . 1)))
(progn
(vlax-for obj (setq acsel (vla-get-ActiveSelectionSet acdoc))
(vlax-invoke acspc 'addpoint
(trans (vlax-get (setq reg (car (vlax-invoke acspc 'addregion (list obj)))) 'Centroid) 1 0))
(vla-delete reg))
(vla-delete acsel)))
(princ))

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