Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

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

Các bài được khuyến nghị

Bạn này không hiểu ý mình rồi. Gọi lệnh bhatch nghĩa là phải lên được hộp thoại kia. Làm kiểu này không lên được đâu.

Cám ơn !!

Bạn thường dùng hpname là gì và biết tỉ lệ hpscale thì dùng lệnh tắt hay hơn là gọi lên hộp thoại chứ

Tôi thường dùng tô vùng nếu là gạch vỡ thì đánh lệnh là gv, còn bê tông là bt nhanh lắm đỡ mất công chọn tỉ lệ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bạn thường dùng hpname là gì và biết tỉ lệ hpscale thì dùng lệnh tắt hay hơn là gọi lên hộp thoại chứ

Tôi thường dùng tô vùng nếu là gạch vỡ thì đánh lệnh là gv, còn bê tông là bt nhanh lắm đỡ mất công chọn tỉ lệ

Cái gì cũng có nguyên nhân của nó cả bạn à.

Cơ quan mình dùng cadr14. Mình viết nguyên bộ lisp cho cơ quan dùng trong đó có hatch mở rộng. Ngặt cái là cadr14 không Hiển thị được các sld của hatch mở rộng như cad đời mới khó cho người khác sử dụng.

Lúc trước mình dùng imagemenu cho việc này nhưng nay không muốn nên mới vướng vần đề trên.

Bây giờ mình ghét cái mặt quá nên viết lại 1 cái hộp thoại mới ken cho việc này lun.

Vấn đề là như vậy bạn ạ !!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Các bác cho em hỏi, có biến hệ thống nào lưu giữ bán kính bo tòn khi ta vẽ một hình chữ nhật không?

 

biến CIRCLERAD lưu bán kính hình tròn khi vẽ hình tròn.

biến FILLETRAD lưu bán kính khi ta dùng lệnh fillet.

 

Không có lệnh nào vẽ một hình chữ nhật bo tròn góc, nên không có biến nào lưu cả.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
biến CIRCLERAD lưu bán kính hình tròn khi vẽ hình tròn.

biến FILLETRAD lưu bán kính khi ta dùng lệnh fillet.

 

Không có lệnh nào vẽ một hình chữ nhật bo tròn góc, nên không có biến nào lưu cả.

 

Command: rec RECTANGLE

Chamfer/Elevation/Fillet/Thickness/Width/<First corner>: f

 

Fillet radius for rectangles <500.0000>: 200

 

Chamfer/Elevation/Fillet/Thickness/Width/<First corner>:

Other corner:

 

Có đây bác nguyenhoanh nhưng cái này không trùng giá trị với FILLETRAD còn nó là cái gì thì mình cũng chịu !!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Command: rec RECTANGLE

Chamfer/Elevation/Fillet/Thickness/Width/: f

 

Fillet radius for rectangles : 200

 

Chamfer/Elevation/Fillet/Thickness/Width/:

Other corner:

 

Có đây bác nguyenhoanh nhưng cái này không trùng giá trị với FILLETRAD còn nó là cái gì thì mình cũng chịu !!

Cảm ơn bạn đã chỉ ra, đúng là từ trước đến giờ không để ý đến chức năng này của lệnh rectangle.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình có 2 vấn đề nhờ các Bạn giải đáp:

 

Thứ 1: mình có 1 SUB hay 1 FUNCTION viết bằng VBA, ví dụ

 

Public b As String

Sub test()

b = "giatritimduoc"

End sub

 

Thì trong lisp làm cách nào để lấy được giá trị của b. Và tương tự trong VBA làm sao lấy được các giá trị được tính toán trong Lisp

 

Thứ 2: mình có 1 file *.txt có nội dung như sau:

 

1 300.2

2 500.5

a2 600.6

 

Trong lisp mình có thể đọc và ghi các giá trị đó lên bản vẽ bằng lệnh TEXT. Riêng giá trị a2 (không phải là số, dùng hàm TYPE thì nhận được nó là loại SYMBOL) thì không thể ghi được. Muốn ghi giá trị a2 thì phải làm như thế nào

 

Thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình có 2 vấn đề nhờ các Bạn giải đáp:

 

Thứ 1: mình có 1 SUB hay 1 FUNCTION viết bằng VBA, ví dụ

 

Public b As String

Sub test()

b = "giatritimduoc"

End sub

 

Thì trong lisp làm cách nào để lấy được giá trị của b. Và tương tự trong VBA làm sao lấy được các giá trị được tính toán trong Lisp

 

Thứ 2: mình có 1 file *.txt có nội dung như sau:

 

1 300.2

2 500.5

a2 600.6

 

Trong lisp mình có thể đọc và ghi các giá trị đó lên bản vẽ bằng lệnh TEXT. Riêng giá trị a2 (không phải là số, dùng hàm TYPE thì nhận được nó là loại SYMBOL) thì không thể ghi được. Muốn ghi giá trị a2 thì phải làm như thế nào

 

Thanks

Thứ 2: Vấn đề này khá thú vị, bạn xem đoạn mã lisp sau.

(setq str "a2 600.6"; giá trị ban đầu của bạn
	str (strcat "(setq " str ")"); bây giờ biến str mang giá trị "(setq a2 600.6)"	   
)
(eval (read str)); thực hiện đoạn mã lisp có nội dung str
(alert (rtos a2)); hiện thị kết quả a2 = 600.6 là kết quả của lệnh (setq a2 600.6)

Với đoạn mã trên, tôi đã thực hiện phép gán a2 bằng 600.6 bằng kỹ thuật execute một dòng string.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ở vấn đề thứ 2:

Hình như Bác Hoành chưa hiểu ý của tien2005.

 

To tien2005:

Để đơn giản code trong lisp với vấn đề trên thì file txt nên là

(chú ý cặp dấu "):

 

1 300.2

2 500.5

"a2" 600.6

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

@Nguyen Hoanh: Thanks, mình lại biết thêm được 1 hàm :s_big:

@Nô Thiên: Thanks, cách của Bạn cũng rất hay, nhưng chỉ cục bộ cho vài giá trị. Nếu cho cả fiel thì làm bằng tay cũng vất vả, mình cũng thử: (setq str ( strcat (chr 34) str (chr 34))) để cho các giá trị trong fiel luôn nằm trong cặp dấu " cũng chưa được. Lạđầnh sống chung với lũ :s_big:

 

Vấn đề mới:

trong vòng While đọc và xử lý các số liệu trong file *.txt. Nếu cuối file *.txt có nhiều hơn 1 hàng trống thì LISP sẽ bị lỗi. mình đã tìm cách bẩy lỗi này bằng cách so sánh với ký tự enter "\n" hay giá trị NIL nhưng không thành công

 

Vậy trong trờng hợp này chúng ta sẽ dùng đọan LISP nào để phát hiện ra các hàng trống này (các Bạn đừng nói mình xóa các hàng trống này trên file *.txt nha). Mục đích là sau vòng while này chúng ta sẽ còn xử lý thêm các lệnh khác

Thanks

 

ec, sau khi xem thử bài viết thì nó ra mã unicode thì khó sửa lại bài viết quá admin ơi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Mình có 2 vấn đề nhờ các Bạn giải đáp:

 

Thứ 1: mình có 1 SUB hay 1 FUNCTION viết bằng VBA, ví dụ

 

Public b As String

Sub test()

b = "giatritimduoc"

End sub

 

Thì trong lisp làm cách nào để lấy được giá trị của b. Và tương tự trong VBA làm sao lấy được các giá trị được tính toán trong Lisp

Jin có một giải pháp cho vấn đề này là truyền dữ liệu (ghi giá trị của b="...") ra một file trung gian. Sau đó trong đoạn mã viết bằng ngôn ngữ khác ta lại đọc file trung gian để lấy giá trị này.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Jin có một giải pháp cho vấn đề này là truyền dữ liệu (ghi giá trị của b="...") ra một file trung gian. Sau đó trong đoạn mã viết bằng ngôn ngữ khác ta lại đọc file trung gian để lấy giá trị này.

 

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 :s_big: ), 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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 :s_big: ), 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

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) ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trong các phần mềm mình thấy có các thứ viện chứa file DWG, vẽ sẳn các hình cần thiết

khi gọi 1 lệnh để thực hiện thì load các hình trong thư viện vào.

Cho mình hỏi làm cách nào để thực hiện được như vậy

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trong các phần mềm mình thấy có các thứ viện chứa file DWG, vẽ sẳn các hình cần thiết

khi gọi 1 lệnh để thực hiện thì load các hình trong thư viện vào.

Cho mình hỏi làm cách nào để thực hiện được như vậy

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?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.autodesk.com/thread.jspa?messageID=1168061

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
.....................

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/Downloads.7z

Lưu ý

doslib61.exe - dùng với Acad 2000 - 2006

doslib78.exe - dùng với Acad 2007 - 2009

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/upfiles/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é :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ì?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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")

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×