Đế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
2854 replies to this topic

#1001 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 December 2011 - 11:42 AM

Em viết lisp trong cad 2007, làm sao lấy được mã đối tượng của 1 khối solid

An aggregate is a collection of items that are gathered together to form a total quantity
_________________________________

free text
charms


Chẳng hạn dùng:

(entget (car (entsel "\nChon Solid: ")))

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


#1002 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 December 2011 - 01:42 PM

Hehe ko hiểu ý bác Bình lắm nhưng sao lại đổi nick nhỉ???

Hề hề hề
À tại vì bác cứ nói chung ..... mà lại không thích detailing discussion lắm.
Hề hề hề,....

PS: Đùa trêu bác đấy, chớ giận nghen.....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1003 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 December 2011 - 01:46 PM

Em viết lisp trong cad 2007, làm sao lấy được mã đối tượng của 1 khối solid

An aggregate is a collection of items that are gathered together to form a total quantity
_________________________________

free text
charms


Hề hề hề, chả biết bạn định lấy nó làm chi chứ việc lấy thì cứ y chang như lấy của các đối tựọng khác mà thôi. Có điều nó ra cái mã mà đọc xong thì té xỉu mấy tuần vì chả biết dùng thế nào bạn ạ.
Hế hề hề.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#1004 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 13 December 2011 - 02:26 PM

Hề hề hề
À tại vì bác cứ nói chung ..... mà lại không thích detailing discussion lắm.
Hề hề hề,....

PS: Đùa trêu bác đấy, chớ giận nghen.....

Hehehe,interface là 1 thứ trừu tượng nên ko detail nó dc bác àh. Nếu giải thích chắc tốn vài trang của CADViet mà kết quả chắc cũng chẳng tới đâu nhất là với chút xíu cái mà bác gọi là học mót của em. Nhưng em cũng có để lại cái detail để bác nào google thì hiểu detail của nó rồi.
Tính em ko hay giận, bác yên tâm hehehe :D
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#1005 anhcos

anhcos

    biết lệnh hatchedit

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

Đã gửi 13 December 2011 - 03:03 PM

Interface chỉ dùng cho ngôn ngữ lập trình OOP, bản thân nó không có một đoạn code nào.
LISP có kiểu dữ liệu, mệnh lệnh và dòng điều khiển nhưng không có các cấu trúc dữ liệu nên tương lai sẽ khó phát triển.
  • 0
Clear sky!

MF Rock collection.

#1006 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 14 December 2011 - 09:52 PM

Thông thường, để lấy text của dim thường dùng dxf 1 hoặc dxf 42. Nhưng trong trường hợp của file kèm theo thì kết quả không đúng.
Link dưới đây là 1 bản vẽ, trên đó có 2 kiểu dim:
1). Kiểu dim nguyên bản: là kiểu dim từ bản vẽ người khác gởi cho tôi.
2). Kiểu dim copy: được tôi copy từ dim nguyên bản để test thử.
Kết quả:
1). Kiểu nguyên bản: sai (nếu dùng mã 1 hoặc 42)
2). Kiểu copy: đúng (nếu dùng mã 1 hoặc 42)
Vậy ai biết nguyên nhân xin chỉ giùm. Thanks!
http://www.cadviet.c...9_test_dim1.dwg
P/S: kiểm tra một số lisp của vài cao thủ trên CADViet thì cũng thấy vậy. Vậy là sao nhỉ?
  • 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.


#1007 damvinhduy

damvinhduy

    biết vẽ line

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

Đã gửi 14 December 2011 - 11:21 PM

Có một số lisp khi load vào sử dụng thì báo lỗi: ActiveX Server returned an error: Error loading type library/DLL. Không biết đó là lỗi gì, các bạn nào biết chỉ giúp cách khắc phục. Thanks.
  • 0

#1008 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 14 December 2011 - 11:27 PM

Có một số lisp khi load vào sử dụng thì báo lỗi: ActiveX Server returned an error: Error loading type library/DLL. Không biết đó là lỗi gì, các bạn nào biết chỉ giúp cách khắc phục. Thanks.


Trích dẫn:
ActiveX Server returned an error: Invalid index
Chương trình sử dụng hàm Vlax-safearray->list để chuyển 1 Safearray rỗng đến 1 List.
  • 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.


#1009 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 15 December 2011 - 08:39 AM

Thông thường, để lấy text của dim thường dùng dxf 1 hoặc dxf 42. Nhưng trong trường hợp của file kèm theo thì kết quả không đúng.
Link dưới đây là 1 bản vẽ, trên đó có 2 kiểu dim:
1). Kiểu dim nguyên bản: là kiểu dim từ bản vẽ người khác gởi cho tôi.
2). Kiểu dim copy: được tôi copy từ dim nguyên bản để test thử.
Kết quả:
1). Kiểu nguyên bản: sai (nếu dùng mã 1 hoặc 42)
2). Kiểu copy: đúng (nếu dùng mã 1 hoặc 42)
Vậy ai biết nguyên nhân xin chỉ giùm. Thanks!
http://www.cadviet.c...9_test_dim1.dwg
P/S: kiểm tra một số lisp của vài cao thủ trên CADViet thì cũng thấy vậy. Vậy là sao nhỉ?

Chào bạn Doan Van Ha
Mã DXF 42 quy định chiều dài thực của dimension tuy nhiên là optional (có cũng dc, ko có cũng ko sao)
Mã DXF 1 thể hiện text override
Theo như chúng ta đã biết định dạng dwg/dxf ko chỉ có AutoCAD mới tạo ra dc mà có nhiều phần mềm khác có thể tạo ra.
Mình nghĩ bản vẽ bạn nhận dc do 1 phần mềm nào đó tạo ra hoặc 1 version CAD thấp hơn tạo ra nên lệnh dim bỏ qua dxf 42 hoặc nó ghi một giá trị khác vào (-1: có thể là flag chỉ measure text = giá trị thực)

Vậy để lấy chính xác Text của dim ta làm thế nào?
mình nghĩ nên viết thêm 1 defun tính toán lại giá trị measure của DIM (suggestion: dxf code 13, 14, 50,...) cho vào các hàm CV luôn cũng dc hehe

p/s: Bạn có thể vào đây để tìm hiểu thêm về DXF qua các phiên bản: http://usa.autodesk....linkID=10809853
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#1010 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 December 2011 - 09:28 AM

Cứ động vào nó là nó lại thay đổi nhỉ
Vậy để đề phòng, mỗi ObjDim thì bác : vla-copy => vla-delete
Hoặc bê nguyên cả cụm Dim đi 1 đơn vị rồi lại bê về chỗ cũ ^^
  • 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


#1011 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 15 December 2011 - 09:33 AM

Cứ động vào nó là nó lại thay đổi nhỉ
Vậy để đề phòng, mỗi ObjDim thì bác : vla-copy => vla-delete
Hoặc bê nguyên cả cụm Dim đi 1 đơn vị rồi lại bê về chỗ cũ ^^


Thủ thuật thì biết, nhưng không hiểu bản chất thôi. Chắc có thể như Detailing nói, để nghiên cứu và hỏi lại tác giả của bản vẽ xem.
@Detailing: đã làm việc với người cung cấp bản vẽ này. Họ khẳng định: bản vẽ không dùng 1 phần mềm nào khác, chỉ thuần tuý dùng cad.
  • 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.


#1012 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 15 December 2011 - 10:01 AM


Thủ thuật thì biết, nhưng không hiểu bản chất thôi. Chắc có thể như Detailing nói, để nghiên cứu và hỏi lại tác giả của bản vẽ xem.
@Detailing: đã làm việc với người cung cấp bản vẽ này. Họ khẳng định: bản vẽ không dùng 1 phần mềm nào khác, chỉ thuần tuý dùng cad.

Như mình đã nói rồi CAD version thấp hơn sẽ bị.
Bạn thử như sau:
tạo bản vẽ mới vẽ 1 cái Dim Save as AutoCAD R14/97LT/98LT Drawing (*.dwg)
tắt bản vẽ đi rồi mở lại sẽ thấy "hiệu quả" ngay :D
Good luck!
  • 2

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#1013 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 15 December 2011 - 10:37 AM


Thủ thuật thì biết, nhưng không hiểu bản chất thôi. Chắc có thể như Detailing nói, để nghiên cứu và hỏi lại tác giả của bản vẽ xem.
@Detailing: đã làm việc với người cung cấp bản vẽ này. Họ khẳng định: bản vẽ không dùng 1 phần mềm nào khác, chỉ thuần tuý dùng cad.

Chào bạn DoanVanHa

Bản chất của nó nằm ở Annotative

Bạn làm theo cách sau thì dxf 42 của Dim nguyên bản sẽ thấy giá trị :
-> Gõ lệnh Dimstyle -> Chọn Dimstyle cần modify -> ở đây Dimstyle là K_TRU
-> Tab fit -> tick chọn Scale dimmension to Layout -> OK -> Close

Cái này có lẽ nguyên nhân mà bạn detailling đã nói đấy
Các bản CAD đời thấp chưa có Annotative nên mới xảy ra chuyện này
Và đương nhiên sau này bạn có tick chọn Scale dimmension to Layout hay Use overall scale of thì giá trị của Dim nằm ở dxf1 hay là dxf42
  • 2

#1014 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 15 December 2011 - 11:22 AM

Có lẽ bản chất đã hiểu và giải pháp cũng đã có. Thank tất cả!
P/S: giải pháp của tôi là như code kèm theo. Các bác xem hay/dỡ chỗ nào để tiếp thu.

(defun GetTxtDim (ent)
(cond
((and (= (cdr (assoc 1 (entget ent))) "") (/= (cdr (assoc 42 (entget ent))) -1.0))
(setq txt (cdr (assoc 42 (entget ent)))))
((and (= (cdr (assoc 1 (entget ent))) "") (= (cdr (assoc 42 (entget ent))) -1.0))
(command "_dimstyle" "apply" ent "")
(setq txt (cdr (assoc 42 (entget ent)))))
(T (setq txt (cdr (assoc 1 (entget ent)))))))

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


#1015 damvinhduy

damvinhduy

    biết vẽ line

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

Đã gửi 15 December 2011 - 09:15 PM


Trích dẫn:
ActiveX Server returned an error: Invalid index
Chương trình sử dụng hàm Vlax-safearray->list để chuyển 1 Safearray rỗng đến 1 List.

Chưa hiểu ý của bác. Bác có thể nói rõ nguyên nhân và cách khắc phục không. Cảm ơn nhiều.
  • 0

#1016 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 16 December 2011 - 08:39 AM

Có lẽ bản chất đã hiểu và giải pháp cũng đã có. Thank tất cả!
P/S: giải pháp của tôi là như code kèm theo. Các bác xem hay/dỡ chỗ nào để tiếp thu.

Mình đã từng gặp vấn đề này rồi. và mình chỉ cần chỉnh sửa mỗi dxf 1 là ok. vì dim là đối tượng fức nên thêm hàm entupd nữa.
PS: sửa giá trị của dim thì chỉ cần sửa giá trị dxf 1 của đối tượng chính, muốn giữ nguyên giá trị dim thì thêm vào chuỗi sửa 2 ký tự <> làm tiền tố hay hậu tố hay ở giữa chuỗi sửa thì tùy. mã dxf 42 kệ nó. áp dụng với tất cả các loại dim.
  • 0

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


#1017 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 16 December 2011 - 08:43 AM

Mình đã từng gặp vấn đề này rồi. và mình chỉ cần chỉnh sửa mỗi dxf 1 là ok. vì dim là đối tượng fức nên thêm hàm entupd nữa.


Bác có thể nói rõ hơn được không? Tôi nghĩ vấn đề này nhiều người cần, nên nếu có giải pháp tối ưu để dùng thì tuyệt.
  • 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.


#1018 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 16 December 2011 - 09:12 AM

thì nó chỉ đơn giản như vậy thôi mà bác.
(defun c:df (/ en res)
(entmod (subst (cons 1 "chuoi sua <>m") (assoc 1 (setq res (entget (setq en (car(entsel "chon dim"))) '("*")))) res))
(entupd en))
nếu cần chắc ăn thì bác entmod luôn giá trị dxf 1 đối tượng con Mtext của dim (nhưng mình thử bỏ qua bước này vẫn được. nó tự động thay đổi giá trị theo mã dxf 1 của đối tượng chính)
  • 0

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


#1019 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 16 December 2011 - 09:40 AM

thì nó chỉ đơn giản như vậy thôi mà bác.
(defun c:df (/ en res)
(entmod (subst (cons 1 "chuoi sua <>m") (assoc 1 (setq res (entget (setq en (car(entsel "chon dim"))) '("*")))) res))
(entupd en))
nếu cần chắc ăn thì bác entmod luôn giá trị dxf 1 đối tượng con Mtext của dim (nhưng mình thử bỏ qua bước này vẫn được. nó tự động thay đổi giá trị theo mã dxf 1 của đối tượng chính)


Như vậy, với mỗi một dim thì phải nhập "chuoi sua" vào hay sao bác?
  • 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.


#1020 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 December 2011 - 09:41 AM

Có lẽ bản chất đã hiểu và giải pháp cũng đã có. Thank tất cả!
P/S: giải pháp của tôi là như code kèm theo. Các bác xem hay/dỡ chỗ nào để tiếp thu.


(defun GetTxtDim (ent)
(cond
((and (= (cdr (assoc 1 (entget ent))) "") (/= (cdr (assoc 42 (entget ent))) -1.0))
(setq txt (cdr (assoc 42 (entget ent)))))
((and (= (cdr (assoc 1 (entget ent))) "") (= (cdr (assoc 42 (entget ent))) -1.0))
(command "_dimstyle" "apply" ent "")
(setq txt (cdr (assoc 42 (entget ent)))))
(T (setq txt (cdr (assoc 1 (entget ent)))))))

Dở bác ạ...
- Dài + rối (chắc bác chưa viết gọn lại)
- Sử dụng command trong hàm
- Giá trị hàm trả về không cố định TYPE

(defun getTxt(dim / ret)
(setq ret
(vl-princ-to-string
(cond ((/= ""(setq ret(vla-get-TextOverride dim))) ret)
(T (vla-update dim)(vla-get-Measurement dim))
)
)
))

  • 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