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

#141 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 10 September 2008 - 07:40 AM

Bác nào hiểu biết về clipboard trong Win thì giới thiệu cho anh em với!
Clipboard có thể sử dụng trong hầu hết các ứng dụng chạy trên Win và các loại dữ liệu rất đa dạng. Chẳng hạn có thể copy các giá trị từ CAD qua Word, Excel, và ngược lại
Vậy có cách nào lưu một giá trị (kiểu số, text, thậm chí cả đối tượng CAD) vào trong clipboard (bằng ngôn ngữ lisp hay vba) ?



VBA

Xóa Clipboard

Dim MyData As DataObject

Set MyData = New DataObject
MyData.SetText ""
MyData.PutInClipboard

Nhận một chuổi từ Clipboad và gán váo một biến String

Dim MyData As DataObject
Dim strClip As String

Set MyData = New DataObject
MyData.GetFromClipboard
strClip = MyData.GetText

Nhận một chuỗi từ biến String và đưa vào Clipboard

Dim MyData As DataObject
Dim strClip As String
strClip = "Hi there"

Set MyData = New DataObject

MyData.SetText strClip
MyData.PutInClipboard

LISP - Theo như thông tin của LISP chuẩn thì không có thao tác với CLIPBOARD, tuy nhiên bạn có thể vào trang http://www.lutzow.com/clipboar.htm download gói clipboard và thực hiện theo đoạn code sau

Create an instance of the activeX Object

Make sure (vl-load-com) is loaded
(setq clipOBJ (vlax-create-object "Lutzow.ClipBoard"))

Send text to the clipboard

(vlax-invoke-method clipOBJ 'SetClipBoardText "Text")

Get text from the clipboard

(setq textSTR (vlax-invoke-method clipOBJ 'GetClipBoardText))

Clear the clipboard of any text

(vlax-invoke-method clipOBJ 'ClearClipBoard)


hoặc
;Install doslib. Load in Autocad Doslib15.arx or Doslib16.arx to use a routine.

(defun c:ctc ();;copy text clipboard
(setq ENT (entsel "\n Select text:"))
(setq TEXTO (cdr (assoc 1 (entget (car ent)))))
(dos_clipboard texto)
(princ "\n")
(princ " Text or string - ")(princ TEXTO)(princ " - send to
Clipboard!")
(princ))
Tham khảo tại
http://discussion.au...ssageID=1168061
  • 0

#142 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 10 September 2008 - 07:48 AM

Cám ơn Jing đã trả lời, cách của Jing rất tổng quát và thích hợp cho nhiều ngôn ngữ. Mình thì xử lý bằng cách ghi giá trị của b dạng text ra bản vẽ tại 1 vị trí bất kỳ nào đó (chỉ dùng trong autocad thôi :) ), sau đó dùng lisp đọc giá trị này, sau khi đọc xong thì xóa cái text này

Ngoài các cách trên không biết còn cách nào lấy trực tiếp giá trị của b trong bộ nhớ của máy tính mà không cần qua bước trung gian nào khác không



Tạo một key trên Registry, ghi trên đó rồi lại đọc trên đó. Đơn giản và nhanh chóng
  • 0

#143 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 10 September 2008 - 07:59 AM

.....................
LISP - Theo như thông tin của LISP chuẩn thì không có thao tác với CLIPBOARD, tuy nhiên bạn có thể vào trang http://www.lutzow.com/clipboar.htm download gói clipboard và thực hiện theo đoạn code sau
............................................


Cám ơn Vndesperados, vì trang http://www.lutzow.com/clipboar.htm báo lỗi "This domain name was recently registered\purchased." Nếu Vndesperados còn lưu gói clipboard trên máy tính cá nhân, vui lòng upload lên CadViet, cám ơn nhiều.
  • 0

#144 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 10 September 2008 - 08:21 AM

Cám ơn Vndesperados, vì trang http://www.lutzow.com/clipboar.htm báo lỗi "This domain name was recently registered\purchased." Nếu Vndesperados còn lưu gói clipboard trên máy tính cá nhân, vui lòng upload lên CadViet, cám ơn nhiều.



Cũng chưa lấy được bạn àh :)
Nhưng mà có thể dùng cái này với đọan code ở dưới
http://www.cadviet.c...es/Downloads.7z
Lưu ý
doslib61.exe - dùng với Acad 2000 - 2006
doslib78.exe - dùng với Acad 2007 - 2009
  • 0

#145 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 10 September 2008 - 08:59 AM

Cũng chưa lấy được bạn àh :)
Nhưng mà có thể dùng cái này với đọan code ở dưới
http://www.cadviet.c...es/Downloads.7z
Lưu ý
doslib61.exe - dùng với Acad 2000 - 2006
doslib78.exe - dùng với Acad 2007 - 2009

Oa. Cái này hay quá. Em xem qua rồi nhưng chưa hiểu kỹ lắm về cái này. Bác giải thích kỹ hơn giúp em với nhé :)
  • 0

#146 Hung_tthanh

Hung_tthanh

    biết pan

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

Đã gửi 12 September 2008 - 09:02 AM

Bạn đã hỏi câu này 2 chổ rồi nhưng câu hỏi của bạn không rỏ:
-Các hình cần thiết: đây là bạn đề cập đến cái gì vậy, ý bạn là file cad hay cái ảnh sld để hiển thị.
-Khi gọi 1 lệnh để thực hiện thì load các hình trong thư viện vào: cái này cũng không hiểu ý nghĩa được.
*Bạn muốn biết cách làm gì:
-Cách tạo file sld từ file cad?
-Cách tạo chương trình thư viện có hình ảnh và từ đó chọn để chèn thư viện vào?

k

ko fải là file Slide. Nếu bạn dùng các phần mềm bạn sẽ thấy. Thay vì dùng code để tạo những hình gì đó mà đặc biệt or được dùng lại nhiều lần thì lại vẽ sẳn hình đó ra sau đó khi add nó vào khi gọi. Chẳng hạn như phần mêm NoCad, nếu bạn xoá đi mấy file dwg rùi cho chạy thì bạn sẽ thấy là báo lỗi ko tìm đc file ngay
  • 0

#147 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 12 September 2008 - 01:59 PM

k

ko fải là file Slide. Nếu bạn dùng các phần mềm bạn sẽ thấy. Thay vì dùng code để tạo những hình gì đó mà đặc biệt or được dùng lại nhiều lần thì lại vẽ sẳn hình đó ra sau đó khi add nó vào khi gọi. Chẳng hạn như phần mêm NoCad, nếu bạn xoá đi mấy file dwg rùi cho chạy thì bạn sẽ thấy là báo lỗi ko tìm đc file ngay

Nói chung là cách diển tả của bạn mà tui hiểu được là chết liền.
Tui diển giải 1 số ý như thế này bạn coi thử nghen.

-Những file cad mà hay dùng thì người ta tạo và lưu thành file mẫu để dùng đi dùng lại nhiều lần cách lưu và đặt tên thư mục là tuỳ từng người.
-Cách bình thường nhứt để dùng cái thư viện này là dùng lệnh insert chèn vào bản vẽ.
-Cách thứ hai là dùng menuimage làm xuất hiện bảng trong đó có 1 bên là danh sách tên file, một bên là các ảnh của file. Khi bạn chọn 1 cái ảnh hoặc tên file và bấm ok thì nó chèn ra cho bạn.
+Những cái ảnh hiển thị mà bạn thấy là ảnh đại diện của file chứ không phải file *.dwg. Bạn sẽ thấy khi người tạo nhầm lẩn thì có tình trạng chọn cái ảnh này nhưng khi chèn ra thì lẩi cái file khác. :)
+Người ta có thể chọn cái ảnh và bấm ok để làm nhiều việc khác (không nhất thiết là chèn file cad) tuỳ thuộc vào câu l;ệnh của người lập trình.
-Cách thứ 3 là viết riêng 1 con lisp dcl để cho ra cái hộp hoại tác dụng cũng gần giống menuimage nhưng có thể thêm nhiều nút và nhiều chức năng hơn.

Giải thích như vậy mong rằng bạn hiểu bây giờ lại hỏi.
Bạn muốn biết cách làm cái gì?
  • 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


#148 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

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

Đã gửi 01 October 2008 - 10:53 PM

Các bác cho em hỏi, đoạn mã nào và làm thế nào để load một hộp thoại với nội dung hộp thoại là một số thông tin ghi chú. Thanks

(alert "Thong tin ghi chu!\nThong tin.\nGhi chu")
  • 1

#149 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 03 October 2008 - 01:53 PM

Cái này thì cũng ko hay lắm, mình muốn hiện hộp thoại tương tự như file DCL zậy.
Đoạn mã nào dùng để load file DCL

Bạn vào mục autolisp xem bài lisp di động của duy782006 bạn xem phần giới thiệu lệnh nếu đúng ý bạn thì :
Xem file tienich//dcl//gioithieulenh.dcl và tienich//lenh//gtlenh.lsp.
Có gì théc mét thì lại liên lạc. :cheers:
  • 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


#150 khanh67

khanh67

    biết vẽ circle

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

Đã gửi 03 October 2008 - 01:53 PM

Bạn nào có file lisp vẽ đường ống thoát phân trong công trình cấp thoát nước cho xin với. Xin cảm ơn . Mail của tôi : nguyenkhanh67@gmail.com
  • 0

#151 xnetlove

xnetlove

    biết pan

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

Đã gửi 03 October 2008 - 02:34 PM

Chào các thành viên trong Diễn đàn CadViet. Pro nào có thể viết dùm mình líp: Vẽ nết cắt, cửa đi, cửa sổ mà sau khi thực hiện xong đối tượng đước gán về layer của riêng chúng (Thực ra lip này trên Diễn dàn cũng đã có nhưng chưa tự gán layer nên mất thời gian gán lại). Thank !
  • 0

#152 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 03 October 2008 - 04:30 PM

Chào các thành viên trong Diễn đàn CadViet. Pro nào có thể viết dùm mình líp: Vẽ nết cắt, cửa đi, cửa sổ mà sau khi thực hiện xong đối tượng đước gán về layer của riêng chúng (Thực ra lip này trên Diễn dàn cũng đã có nhưng chưa tự gán layer nên mất thời gian gán lại). Thank !


Nếu đã có LISP rồi thì Bạn post kèm theo rồi Nhờ CADViet giúp Bạn thêm phần gán layer

Topic này để hỏi về LISP, nếu có yêu cầu viết LISP thì BẠn vui lòng qua topic viết LISP theo yêu cầu
  • 0

#153 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 28 November 2008 - 03:31 PM

Báo cáo các bác,
Em đang học để viết được lisp. Dưng mà khó đáo để.
Em vớ được củ lisp này trên diễn đàn, chạy thử thì ngon nhưng khi mở ra đọc thì không hiểu. Vào Developer Help đọc thì chả thấy rõ ra được điều gì mong các bác thắp giùm em cái nến để em sáng ra nhé.

(defun C:GED();;;Get Excel Data
(vl-load-com)
(setq
ex (vlax-get-object "Excel.Application")
sl (vlax-get-property ex 'selection)
txtvr (vlax-get-property sl 'text)
txt (vlax-variant-value txtvr)
ir (vlax-get-property sl 'row)
ic (vlax-get-property sl 'column)
)
(alert
(strcat
"\nContent: " txt
"\nColumn: " (chr (+ ic 64))
"\nRow: " (itoa ir)
)
)
)

Các vấn đề em thắc mắc như sau:
1/- Biến sl được gán là giá trị của hàm (vlax-get property ex ' selection). Khi selection là một cell thì hàm (vlax-get-property sl 'text) sẽ chạy được và cho ra giá trị của biến txtvr. Còn khi selection là một range gồm nhiều cells thì hàm (vlax-get-property sl 'text) cho ra giá trị của biến txtvr là nil. Như vậy biến sl phải có thuộc tính (property) là text có phải không ạ? Nếu biến sl không phải có thuộc tính là text thì làm sao biết? Ngoài thuộc tính text , biến sl còn có các thuộc tính khác, làm sao để lấy được các thuộc tính của biến sl khi nó là một range, một sheet
2/- Đọc trong Developer Help thì nó nói biến sl là một VLA-object , vậy VLA- object là gì? các mà DXF nếu có của các object này ra sao hay nó chỉ có các thuộc tính thôi?
3/- Có thể tham khảo về các vấn đề trên ở đâu ạ?
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#154 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 November 2008 - 06:11 PM

Các bác ơi,
Ăn Tết sớm thế ư? Có ai rảnh giúp em với, hu hu.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#155 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 01 December 2008 - 10:49 AM

Các bác ơi,
Ăn Tết sớm thế ư? Có ai rảnh giúp em với, hu hu.

1. Chẳng ai ăn Tết lúc này! Có lẽ mọi người đang bận kiếm tiền tiêu Tết!

2. Đoạn trên là của ssg đã post. Nhưng hãy tạm gác cái đó lại, mời bạn sang xem cái này có lẽ hay hơn:

http://www.cadviet.c...amp;#entry42970

nếu có vướng mắc gì thì cũng nên thảo luận luôn ở đó.

3. VLA-Object là Visual LISP ActiveX Object. ActiveX là một kỹ thuật được phát triển bởi Microsoft, với mục đích để các ngôn ngữ lập trình khác nhau, môi trường khác nhau, phần mềm khác nhau có thể giao tiếp được với nhau. Ssg nhớ là đã post bài tổng quan về VLA-Object ở đâu đó rồi, bạn search chắc sẽ thấy. Ngoài ra, bạn vào Help gõ các từ khoá liên quan ở Index cũng thấy.
  • 0

#156 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 December 2008 - 08:40 AM

Mình dùng đoạn sau để chọn 1 đối tượng là TEXT nếu không chọn được đối tượng hoặc đối tượng không phải là TEXT thì lặp lại đến khi nào được mới thôi.

(setq ddd (entsel "\nChon TEXT mau"))
(while
(or
(null ddd)
(/= "TEXT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la TEXT! Chon lai")
(setq ddd (entsel "\nChon TEXT mau"))
)


Gây giờ mình muốn nó chấp nhận cả MTEXT, DIM nửa thì sửa như thế nào mong các bác chỉ giáo. Thank
  • 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


#157 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 11 December 2008 - 04:05 PM

Lisp như sau:
(setq ddd (entsel "\nChon TEXT mau") s (cdr (assoc 0 (entget (car ddd)))))
(while
(or
(null ddd)
(and (/= "TEXT" s) (/= "MTEXT" s) (/= "DIMENSION" s)
)
)
(setq ddd (entsel "\nChon TEXT mau") s (cdr (assoc 0 (entget (car ddd)))))
)
Tuy nhiên nếu để chọn 1 đối tượng mà không cần lấy điểm pick thì chỉ cần
(setq ddd nil)
(while
(not ddd)
(setq ddd (ssget ":S" '((-4 . ""))))
)

  • 0

#158 cuong49x5

cuong49x5

    biết vẽ pline

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

Đã gửi 20 December 2008 - 03:13 PM

Có bác nào biết cách để mình load lisp 1 lần cho cad rồi những lần sau vào cad nó tự hiểu ko?Chứ cứ mỗi lúc vào cad lại phải load lisp thấy khổ quá!Hic hic
  • 0

#159 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 20 December 2008 - 03:20 PM

Có bác nào biết cách để mình load lisp 1 lần cho cad rồi những lần sau vào cad nó tự hiểu ko?Chứ cứ mỗi lúc vào cad lại phải load lisp thấy khổ quá!Hic hic


Lúc bạn load LISP bạn có thể chọn Startup Suite để load tự động cho những lần sau
  • 0

#160 giaptk3

giaptk3

    biết vẽ pline

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

Đã gửi 20 December 2008 - 03:26 PM

Có bác nào biết cách để mình load lisp 1 lần cho cad rồi những lần sau vào cad nó tự hiểu ko?Chứ cứ mỗi lúc vào cad lại phải load lisp thấy khổ quá!Hic hic

bạn dung lệnh ap sau đó chọn contents tiếp đó chọn add - sau đó chọn lisp cần load sẽ được.
sau này sẽ ko cần phải load nữa
  • 0