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

#861 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 01 September 2011 - 08:19 PM

2 bạn có thể nói sơ qua cách dùng DBx là như thế nào ko? DBx là gì và dùng để làm những gì?

Theo mình biết thì DBx là custom entity được viết bằng C++ và đi kèm với nó là 1 hàm arx để tạo ra entity đó.
Nếu bản vẽ có ObjectDBX mà file .dbx ko được load thì nó sẽ được biểu diễn thành ACAD_PROXY_ENTITY
Có gì chưa đúng mong dc bổ sung thêm. Thanks!

Mình nghe người ta nói thì cũng nói theo cho oai, chứ chửa dùng thằng này làm gì bao giờ, mà cũng hok biết về lý thuyết thì nó là cái chi chi nữa ^^
  • 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


#862 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 September 2011 - 11:44 AM

Tôi có bài toán thế này:
- Phần mềm của tôi sau khi chạy nó sẽ tạo ra các đối tượng trên bản vẽ, VD nó là: Spline 1 thuộc lớp L1, Spline2 thuộc L2,...
- Tôi sẽ sử dụng các đối tượng này để thao tác cho các bước tiếp theo.
- Vì vậy, tôi không muốn chúng bị gán cho các đối tượng khác trên bản vẽ để khỏi nhầm lẫn khi thao tác tiếp.
Vậy có cách gì để làm cho các đối tượng của tôi có đặc tính đặc biệt như trên không?
Xin cám ơn!
  • 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.


#863 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 14 September 2011 - 11:39 PM

Hochoaivandot xin được hỏi cách tìm đường dẫn (full) của 1 file bất kỳ (có tên file) .
Ví dụ tìm đường dẫn của file "YahooMessenger.exe"
Viết Hàm (searchfile "YahooMessenger.exe") chẳng hạn. Return "C:\\Program Files (x86)\\Yahoo!\\Messenger\\YahooMessenger.exe".
Mình đã thử hàm (findfile "YahooMessenger.exe") nhưng không được.
Xin được cảm ơn suông trước, Thanks = "Like This" khi có Reply.
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#864 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 September 2011 - 12:00 AM

Hochoaivandot xin được hỏi cách tìm đường dẫn (full) của 1 file bất kỳ (có tên file) .
Ví dụ tìm đường dẫn của file "YahooMessenger.exe"
Hàm (searchfile "YahooMessenger.exe") chẳng hạn. Return "C:\\Program Files (x86)\\Yahoo!\\Messenger\\YahooMessenger.exe".
Mình đã thử hàm (findfile "YahooMessenger.exe") nhưng không được.
Xin được cảm ơn suông trước, Thanks = "Like This" khi có Reply.

Theo ngu ý của tôi thì hàm findfile chỉ tìm được các file ở trong thư mục chứa bản vẽ hiện hành hoặc file nằm trong Support File Search Path nếu như không cung cấp đầy đủ đường dẫn cho nó. Và không có hàm nào tìm được cả.
Thân thương!
  • 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.


#865 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 15 September 2011 - 12:16 AM

Theo ngu ý của tôi thì hàm findfile chỉ tìm được các file ở trong thư mục chứa bản vẽ hiện hành hoặc file nằm trong Support File Search Path nếu như không cung cấp đầy đủ đường dẫn cho nó. Và không có hàm nào tìm được cả.
Thân thương!


Cảm ơn Doan Van Ha với phần trả lời về cách dùng hàm findfile (đã Like This); còn câu trả lời không có hàm nào tìm được cả mình hi vọng có 1 thành viên khác trả lời ngược lại. Mình thấy yêu cầu này cũng thực tế nên chắc sẽ có cách giải quyết (có thể phải viết hàm chứ không có sẵn).
Chờ đợi...
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#866 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 September 2011 - 12:24 AM


(defun ST:File_GetAll ( Dir typ )
(append (mapcar '(lambda ( x ) (strcat Dir "\\" x)) (vl-directory-files Dir typ 1))
(apply 'append
(mapcar '(lambda ( x ) (ST:File_GetAll (strcat dir "\\" x) typ))
(cddr (vl-directory-files dir "*" -1))
)
)
)
)
Hàm này dùng đệ quy nên cẩn thận khi dùng với số lượng file tìm lớn, dễ gây crash lắm nhá ^^
Ví dụ : (ST:File_GetAll "D:" "1.dwg")
  • 2

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


#867 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 15 September 2011 - 11:06 PM

Chào cả nhà ! các bác giúp em vấn đề nhỏ xí : em dùng hàm IF : em cần thỏa mản 2 hoặc nhiều điều kiện thì lisp chạy công tác 1 thì có cấu trúc của hàm IF như thế nào ah. ví dụ Đ/k : a>0 và b>0 thì công việc thứ nhất sẽ đc chạy..
Em xin cảm ơn !
  • 0

#868 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 15 September 2011 - 11:39 PM

Chào cả nhà ! các bác giúp em vấn đề nhỏ xí : em dùng hàm IF : em cần thỏa mản 2 hoặc nhiều điều kiện thì lisp chạy công tác 1 thì có cấu trúc của hàm IF như thế nào ah. ví dụ Đ/k : a>0 và b>0 thì công việc thứ nhất sẽ đc chạy..
Em xin cảm ơn !


(if (and (> a 0) (> b 0))
(progn
(neu dung)
)
(progn
(neu sai)
)
)

  • 1

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#869 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 16 September 2011 - 06:39 AM


(if (and (> a 0) (> b 0))
(progn
(neu dung)
)
(progn
(neu sai)
)
)

Em cảm ơn bác, vậy nếu em muốn dùng ghép cùng nhiều điều kiện xảy ra luôn thì có đc ko? vd: a>0,b>0 => công việc 1. a<0,b>0 => công việc 2: a<0,b<0 => công việc 3.... vậy có thể dùng đc không bác.và nếu dùng thì cấu trúc nó như thế nào.
  • 0

#870 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 16 September 2011 - 07:26 AM

Em cảm ơn bác, vậy nếu em muốn dùng ghép cùng nhiều điều kiện xảy ra luôn thì có đc ko? vd: a>0,b>0 => công việc 1. a<0,b>0 => công việc 2: a<0,b<0 => công việc 3.... vậy có thể dùng đc không bác.và nếu dùng thì cấu trúc nó như thế nào.

Dùng hàm COND
VD :

(cond
( (and (> a 0) (> b 0))
(work1) )
( (and (< a 0) (> b 0))
(work2))
( (and (< a 0) (< b 0))
(work3))
( t ; cac t/hop khac
(work4))
)

  • 1

#871 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 16 September 2011 - 02:20 PM

Dùng hàm COND
VD :


(cond
( (and (> a 0) (> b 0))
(work1) )
( (and (< a 0) (> b 0))
(work2)).....

Bác xem giúp đoạn code bảng tính này của em sai chô nào mà nó bào : error: no function definition
( Cái lisp đầu tiên trong cuộc đời đó bác :) )


(defun c:vm ()
( setq a1(getdist "\n nhap chieu dai canh a1:")
a2(getdist "\n nhap chieu dai canh a2:")
a3(getdist "\n nhap chieu dai canh a3:")
b(getdist "\n nhap chieu rong canh b:")
L1(getdist "\n nhap khoang cach L1:")
L2(getdist "\n nhap khoang cach L2:")
B(getdist "\n nhap khoang cach B:")
Htn(getdist "\n nhap cao do tu nhien Htn:")
Hdm(getdist "\n nhap cao do day mong Hdm:")
sb(getdist "\n nhap so buoc mong:")
btc(getdist "\n nhap khoang cach b thi cong:")
hdtc(getdist "\n nhap chieu cao dao thu cong Hdtc:")
hbtl(getdist "\n nhap chieu day be tong lot Hbtl:")
m(getdist "\n nhap do soai cua dat m:")
)
(setq S1(- L2 (+ a2 (/ a3 2) 200 (* btc 2)))
S2(- B (+ b 200 (* btc 2)))
Hdcg(- (+ (- Htn Hdm) hbtl) hdtc))
(cond
((and (> S1 0) (=< S2 0))
(setq B0(+ (* sb B) b (* btc 2))
L0(+ (* L1 2) (* L2 2) (* a1 2) 200 (* btc 2))
B10(+ B0 (* m 2 Hdcg))
L10(+ L0 (* m 2 Hdcg))
Vdcg(/ (+ (* B0 L0) (* B10 L10) (* (+ B0 L0) (+ B10 L10))) 6)
Vdtc1(* hdtc 2 sb (* (+ b 200 (* btc 2)) (+ a1 a2 200 L1 ) (* btc 2)))
Vdtc2(* hdtc sb (* (+ a3 200) (+ b 200 (* btc 2))))
Vdtc(+ Vdtc1 vdtc2)
V(+ Vdtc Vdcg))))
(princ V)
)



  • 0

#872 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 16 September 2011 - 02:27 PM

Bác xem giúp đoạn code bảng tính này của em sai chô nào mà nó bào : error: no function definition
( Cái lisp đầu tiên trong cuộc đời đó bác :) )


(defun c:vm ()
( setq a1(getdist "\n nhap chieu dai canh a1:")
a2(getdist "\n nhap chieu dai canh a2:")
a3(getdist "\n nhap chieu dai canh a3:")
b(getdist "\n nhap chieu rong canh b:")
L1(getdist "\n nhap khoang cach L1:")
L2(getdist "\n nhap khoang cach L2:")
B(getdist "\n nhap khoang cach B:")
Htn(getdist "\n nhap cao do tu nhien Htn:")
Hdm(getdist "\n nhap cao do day mong Hdm:")
sb(getdist "\n nhap so buoc mong:")
btc(getdist "\n nhap khoang cach b thi cong:")
hdtc(getdist "\n nhap chieu cao dao thu cong Hdtc:")
hbtl(getdist "\n nhap chieu day be tong lot Hbtl:")
m(getdist "\n nhap do soai cua dat m:")
)
(setq S1(- L2 (+ a2 (/ a3 2) 200 (* btc 2)))
S2(- B (+ b 200 (* btc 2)))
Hdcg(- (+ (- Htn Hdm) hbtl) hdtc))
(cond
((and (> S1 0) (=< S2 0))
(setq B0(+ (* sb B) b (* btc 2))
L0(+ (* L1 2) (* L2 2) (* a1 2) 200 (* btc 2))
B10(+ B0 (* m 2 Hdcg))
L10(+ L0 (* m 2 Hdcg))
Vdcg(/ (+ (* B0 L0) (* B10 L10) (* (+ B0 L0) (+ B10 L10))) 6)
Vdtc1(* hdtc 2 sb (* (+ b 200 (* btc 2)) (+ a1 a2 200 L1 ) (* btc 2)))
Vdtc2(* hdtc sb (* (+ a3 200) (+ b 200 (* btc 2))))
Vdtc(+ Vdtc1 vdtc2)
V(+ Vdtc Vdcg))))
(princ V)
)


Không có hàm =< mà chỉ có hàm <=
  • 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.


#873 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 16 September 2011 - 02:38 PM

Ôi ! đc roay bác. Em cảm ơn các bác nhiều lắm ! hi đọc lisp lâu roay mà giờ mới có time ngồi tập làm đc.
  • 0

#874 npham

npham

    biết lệnh rotate

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

Đã gửi 17 September 2011 - 12:06 AM

Hochoaivandot xin được hỏi cách tìm đường dẫn (full) của 1 file bất kỳ (có tên file) .
Ví dụ tìm đường dẫn của file "YahooMessenger.exe"
Viết Hàm (searchfile "YahooMessenger.exe") chẳng hạn. Return "C:\\Program Files (x86)\\Yahoo!\\Messenger\\YahooMessenger.exe".
Mình đã thử hàm (findfile "YahooMessenger.exe") nhưng không được.
Xin được cảm ơn suông trước, Thanks = "Like This" khi có Reply.


Bạn có thể tìm đường dẫn của nó trong registry (dùng (vl-registry-read reg-key [val-name]) để đọc)


Tôi có bài toán thế này:
- Phần mềm của tôi sau khi chạy nó sẽ tạo ra các đối tượng trên bản vẽ, VD nó là: Spline 1 thuộc lớp L1, Spline2 thuộc L2,...
- Tôi sẽ sử dụng các đối tượng này để thao tác cho các bước tiếp theo.
- Vì vậy, tôi không muốn chúng bị gán cho các đối tượng khác trên bản vẽ để khỏi nhầm lẫn khi thao tác tiếp.
Vậy có cách gì để làm cho các đối tượng của tôi có đặc tính đặc biệt như trên không?
Xin cám ơn!


Chưa hiểu ý của bác lắm. Có phải bác không muốn gán cho nó 1 biến nào đó không?
Ví dụ sau khi vẽ spline1 ta gán nó cho (setq doituong1 (entlast)), tuong tu cho spline2....

Nếu không muốn làm cách trên, bác có thể làm cho nó "đặc biệt" bằng cách thêm thông tin mở rộng cho nó.
  • 0

#875 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 17 September 2011 - 12:40 AM

Dùng hàm COND như vậy có đúng không ahm, sao em chạy nó không báo gì hết !
VD :

(cond
( (and (> a 0) (> b 0))
(work1) )
[b](princ "\n dong nhac bao ket qua cua CV1 neu xay ra:")[/b]
( (and (< a 0) (> b 0))
(work2))
[b](princ"\n dong nhac bao ket qua cua CV2 neu xay ra:")[/b]
( (and (< a 0) (< b 0))
(work3))
[b](princ"\n dong nhac bao ket qua cua CV2 neu xay ra:")[/b]
)

  • 0

#876 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 September 2011 - 07:26 AM

Các hàm (work1)(work2)(work3) đã có chưa bạn ?
- Trường hợp a= 0 / b = 0 bạn đã lường chưa ?
  • 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


#877 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 17 September 2011 - 11:03 AM

Các hàm (work1)(work2)(work3) đã có chưa bạn ?
- Trường hợp a= 0 / b = 0 bạn đã lường chưa ?

các hàm đó có cả rồi anh.bên trên thì em mới đưa ra 1 tr/ hợp nhưng các trường hợp khác xem cúng viết tương tự như cú pháp của hàm COND .anh xem cái lisp của em bên trên nhé. khi t/m Đk thứ nhất thì chỉ có trường hợp đó xảy ra -> lisp chạy và ghi ra kết quả, nếu trường hợp 1 không thỏa mản thì lisp xét đến trường hợp thứ 2 nếu thỏa mản thì nó chạy và cho kết quả cong không thì xét đến các trường hợp tiếp theo.
em cảm ơn !
  • 0

#878 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 17 September 2011 - 11:16 AM

Mình đang hỏi là bạn đã lường các trường hợp a= 0 hoặc b=0 chưa ? Vì mình không thấy có liệt kê trong cond của bạn.
Cấu trúc cond thường dùng nhất là

(cond
((BT1) (princ "Lam cong viec 1 neu bieu thuc 1 tra ve khac Nil"))
((BT2) (princ "Lam cong viec 2 neu bieu thuc 2 tra ve khac Nil"))
....
(T (princ "Lam cong viec n neu tat ca cac bieu thuc ben tren deu tra ve Nil"))
)
Chú ý biểu thức T cuối cùng, có nghĩa nó sẽ xử lý các việc thuộc điều kiện bạn không liệt kê.
Như ví dụ bạn đưa bên trên, hãy thêm cond (T (princ "a*b = 0")) hoặc đặt thêm xử lý rõ ràng cho nó, nếu không, a=0 hoặc b = 0 thì sẽ không thuộc trường hợp nào bạn liệt kê cả, nên nó sẽ không làm việc!

Ngoài ra bạn phải đặt dòng Princ vào bên trong dấu ngoặc của mỗi cond, không nó sẽ bị hiểu nhầm thành điều kiện so sánh

(cond
( (and (> a 0) (> b 0))
(work1)(princ "\n dong nhac bao ket qua cua CV1 neu xay ra:") )
( (and (< a 0) (> b 0))(work2)
(princ"\n dong nhac bao ket qua cua CV2 neu xay ra:")
)
( (and (< a 0) (< b 0))(work3)
(princ"\n dong nhac bao ket qua cua CV2 neu xay ra:")
)
)


  • 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


#879 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 17 September 2011 - 12:08 PM

Ax được rồi anh ahm, do em đặt princ ngoài cái dấu (and..
  • 0

#880 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 18 September 2011 - 10:27 AM

Em chào cả nhà ! chúc ngày cn vui vẻ ! em nhờ các bác giúp em vấn đề : Hướng dẫn em tạo Dim: kiểu dim, hight text, kiểu đường gióng, tỷ lệ,..
tạo layer và gán layer cho đôi tượng.
  • 0