Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

Thứ 1 : Bạn hãy dùng Qselect hoặc Fi để lọc text trước khi thực hiện lisp thêm text.

Thứ 2 : đã có lisp trên diễn đàn. Bạn hãy tận dụng chức năng của Google và Tool Tìm kiếm của diễn đàn trước khi hỏi lại :)

Tolerance

 

Thứ cái nữa : chắc phải hỏi bác AutoDesk. Vì cái dấu . bạn cho vào Find String nó cũng trùng với wildcard của CAD, có nghĩa tương đương với chọn các ký tự non-alphanumeric, chẳng may khoảng trắng cũng đáp ứng được nhu cầu ^^

Để thao tác với dấu ., bạn thử thêm dấu ` đằng trước xem sao :)

Thứ 1: Lisp them text nó bắt chọn text sau, và không kết hợp với fi được. Lọc được text bằng fi rồi, gõ themtext thì lệnh fi mất tác dụng.

Thứ 2: Lisp bạn viết là tìm. Giờ mình muốn nó tìm và thay thế như find. Lisp bạn viết nó tìm ra vị trí của tolerance, nhưng không replace giá trị hàng loạt được. Có lẽ phải dùng block att thôi.

 

Thứ 3: Mình thêm ` ở chỗ find thì nó tìm k thấy. Mình cần thay dấu chấm thành dấu phẩy của chữ số (theo Việt Nam).

 

Thứ 4: Thanks 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
Tue_NV    3.841

Thứ 1: Lisp them text nó bắt chọn text sau, và không kết hợp với fi được. Lọc được text bằng fi rồi, gõ themtext thì lệnh fi mất tác dụng.

.....

Khi chạy Lisp -> Ở dòng select object : bạn nhấn 'fi -> lọc.....

Khi lọc bằng FI trước -> chạy Lisp -> Ở dòng select object : bạn nhấn P để chọn lại đối tượng đã lọc bằng FI trướ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

Mấy anh ơi, em gà cad lắm, mấy anh có lisp nào để đánh dấu thứ tự cột 1,2,3,.... hay a,b,c ko. Em vẽ bài rất nhiều cột mà phải ngồi sửa text từng cái mệt quá.....

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

Khi chạy Lisp -> Ở dòng select object : bạn nhấn 'fi -> lọc.....

Khi lọc bằng FI trước -> chạy Lisp -> Ở dòng select object : bạn nhấn P để chọn lại đối tượng đã lọc bằng FI trước đó

Đùng là mình kém quá. Không biết sử dụng chức năng cửa lisp. Mình làm theo cách lọc trước, rồi chạy, nhấn P thì ok. Còn chạy lisp trước thì chưa được. Nhưng chừng đó là quá đủ rồi. Cảm ơn bạn ketxu nhiều (không biết ý nghĩa nickname ketxu là gì ta?)

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
ketxu    2.653

Két xù là 1 nhân vật trong phim Ông trùm thôi :).

Việc change tol có lẽ cũng không khó,srr bạn vì mình không đọc kỹ :).

Còn thêm dấu ` đằng trước thì mình làm được, k hiểu sao bên bạn hok đượ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

Mà nhân tiện bác Tue chỉnh cái lisp đánh số thứ tự bản vẽ của bác theo ý e được không ợ. Lisp của bác em tải ở đây

 

Lisp này xuất ra kết quả "Bản vẽ số: 1/n". Giờ bác chỉnh, khi xuất kết quả có thể tùy chọn 1 trong 2 kết quả:

1. "Bản vẽ số: 1/n" (như cũ)

2. "Bản vẽ số: 01/n" khi n<10 được không ợ (nhiều khi e cần có số 0 trước mà k biết làm sao)

 

Cảm ơn bác 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
phamthanhbinh    3.123

Nói ra hơi xấu hổ các bác ạ, em tốt nghiệp rồi mà cũng vẫn chỉ đi dùng lisp do người khác viết mà chẳng hiểu tí tạo nào về lisp. Em cũng tìm kiếm trên mạng mấy ngày nhưng chưa thấy gì tiến triển. Anh em tốt bụng có bài giảng hay chương trình nào hay dạy về autolisp không? cho em xin...rồi e sẽ cố gắng trở thành thành viên trung thành của toppic này...

Bạn hãy chịu khó vào topic Hướng dẫn học lisp và Hỏi về lisp để tham khảo nhé. Hy vọng bạn sẽ tìm được cái mình cầ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
phamthanhbinh    3.123

Mấy anh ơi, em gà cad lắm, mấy anh có lisp nào để đánh dấu thứ tự cột 1,2,3,.... hay a,b,c ko. Em vẽ bài rất nhiều cột mà phải ngồi sửa text từng cái mệt quá.....

Bạn hãy gửi bản vẽ và cái hình kết quả bạn muốn có lên 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
latoidayvn    1

Các bạn có thể cho mình cái lệnh xuất đúng độ cao và toạ độ của đường pline và 3dpline

VD: mình có 5 điểm có độ cao từ 1-5

mình nối 5 điểm đó với nhau

bây giờ xuất toạ độ và độ cao ra excel thì nó xuat các điểm đó theo thứ tự điểm nối đường từ 1-5 đó

Mình đã thử máy lệnh nhưng hình khi nối độ cao thì nó chỉ lấy độ cao của điểm thứ nhất là độ cao của đường lên khi xuất điểm thì độ cao chỉ có 1

Còn lisp 2d3d thì lại đòi hỏi có đường pline trước và fải nhập độ cao lên khi làm nhiều hơi bất tiện

Mong các bạn giúp mì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
thanhblue    0

Chả là em đang phải làm hồ sơ nghiệm thu công trình đường mặc dù đã có lisp rồi nhưng vẫn còn thủ công quá. Nên nhờ cao thủ viết lại lisp để công việc trôi chảy hơn. Cụ thể như sau. Dùng lệnh cd để lấy cao độ gốc và tích vào các điểm mình muốn lấy cao độ và độ dài so với tim đường ( lisp cũ) giờ em muốn có lisp chỉ cẩn tích vào tim đuờng là có thể hiện lên những giao điểm trên cùng một đường thẳng luôn. em gửi file và lisp cũ kèm theo. Có cao thủ nào giúp đỡ tí.Thank nhiều

 

http://www.mediafire.com/?tyzspn7ur7k7g1a

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
phamthanhbinh    3.123

Chả là em đang phải làm hồ sơ nghiệm thu công trình đường mặc dù đã có lisp rồi nhưng vẫn còn thủ công quá. Nên nhờ cao thủ viết lại lisp để công việc trôi chảy hơn. Cụ thể như sau. Dùng lệnh cd để lấy cao độ gốc và tích vào các điểm mình muốn lấy cao độ và độ dài so với tim đường ( lisp cũ) giờ em muốn có lisp chỉ cẩn tích vào tim đuờng là có thể hiện lên những giao điểm trên cùng một đường thẳng luôn. em gửi file và lisp cũ kèm theo. Có cao thủ nào giúp đỡ tí.Thank nhiều

 

http://www.mediafire.com/?tyzspn7ur7k7g1a

Chào bạn thanhblue,

Yêu cầu của bạn không quá khó, song cái khó chính là hiểu đưpợc đúng cái kết quả bạn cần.

Đọc bài post của bạn, chưa hiểu cái khái niệm những giao điểm trên cùng một đường thẳng là những giao điểm nào bạn ạ.

File bản vẽ bạn gửi mình cũng đã xem song cũng chả rõ hơn là bao vì có rất nhiều giao điểm mà chả thấy bạn ghi cái chi cả.

Vậy thì giao điểm nào là cần ghi và giao điểm nào thì không cần??? Tốt nhất bạn nên chỉ dẫn cụ thể để người viết lísp có thể hiểu rõ bạn nhé.

Thực tế trên diễn đàn có rất nhiều người giỏi về cái chuyên môn bạn đang làm, song cũng còn rất nhiều người chưa biết đến cái chuyên môn ấy. Vậy nên nếu bạn mô tả càng tỉ mỉ cái yêu cầu của bạn, chắc chắn cơ hội được giúp của bạn sẽ tăng lên đáng kể và do đó thời gian chờ đợi kết quả của bạn cũng giảm đi bạn ạ.

Rất mong bạn lưu tâm khi post các yêu cầu của mì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
thanhblue    0

Chào bạn thanhblue,

Yêu cầu của bạn không quá khó, song cái khó chính là hiểu đưpợc đúng cái kết quả bạn cần.

Đọc bài post của bạn, chưa hiểu cái khái niệm những giao điểm trên cùng một đường thẳng là những giao điểm nào bạn ạ.

File bản vẽ bạn gửi mình cũng đã xem song cũng chả rõ hơn là bao vì có rất nhiều giao điểm mà chả thấy bạn ghi cái chi cả.

Vậy thì giao điểm nào là cần ghi và giao điểm nào thì không cần??? Tốt nhất bạn nên chỉ dẫn cụ thể để người viết lísp có thể hiểu rõ bạn nhé.

Thực tế trên diễn đàn có rất nhiều người giỏi về cái chuyên môn bạn đang làm, song cũng còn rất nhiều người chưa biết đến cái chuyên môn ấy. Vậy nên nếu bạn mô tả càng tỉ mỉ cái yêu cầu của bạn, chắc chắn cơ hội được giúp của bạn sẽ tăng lên đáng kể và do đó thời gian chờ đợi kết quả của bạn cũng giảm đi bạn ạ.

Rất mong bạn lưu tâm khi post các yêu cầu của mình.

Lân đầu tiên em post bài nên cũng có nhiều sơ suất! mong các bác thông cảm! Những điểm em cần em gửi kèm thêm bản cad giải thích như sau http://www.mediafire.com/?af0s417tgysx1ko

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
lenhatanh    2

Các Bác giúp em lênh tạo Block có Attribute và tự nhập cao độ theo số đã nhập với.

(Lệnh dưới mới chỉ tạo được block (không có Attribute):

 

...

(setq TenBlock (getstring "\n - Nhap ten block: "))

(While

(setq Caodo (getreal "\n - Nhap cao đo: "))

(setq Diem (getpoint "\n - Chon Diem Dat Block: "))

(entmake (list (cons 0 "insert") (cons 2 TenBlock) (cons 10 Diem)))

)

...

 

Xin 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
phamthanhbinh    3.123

Lân đầu tiên em post bài nên cũng có nhiều sơ suất! mong các bác thông cảm! Những điểm em cần em gửi kèm thêm bản cad giải thích như sau http://www.mediafire.com/?af0s417tgysx1ko

Hề hề hề,

Thực tình thì vẫn chưa rõ cái bạn cần lắm. Tuy nhiên mình cứ làm thử cái lísp này để bạn dùng coi sao rồi sửa tiếp. Lisp này mình cứ coi như điếc, hễ có giao điểm nào là nó chơi cái giao điểm đó bất kể là đường màu vàng hay màu ghi bạn nhé. Nếu bạn thấy chưa thích thì post lên để sửa tiếp nhé.

Nhớ rằng lisp sử dụng với cái bản vẽ bạn post C1 nên nó có sẵn các layer trong hàm lọc và đã có sẵn các block thuộc tính của bạn. Khi dùng với các bản vẽ khác thì bạn phải kiểm tra lại các thông số này xem có đúng không nhé.

hề hề hề,

Của bạn đây:

;; free lisp from cadviet.com
(defun DXF (code elist)
(cdr (assoc code elist))
)

(princ "\nGo lenh \"CD\" ")
(defun c:CD ( / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 atlast oslast pt0 x0 y0 ed h0 lng ln ssln sslst )
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(command "UCS" "w")

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
;(setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/")) 
;ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(setq tx1 1 
        ty1 1
)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien <end of> : ") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 15359) 
;;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
(setq lng (car (entsel "\n Hay chon line goc"))
       ssln (ssget (list (cons 0 "LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
       sslst (acet-ss-to-list ssln)
)
;;;;;(While (/= pt nil)
(foreach ln sslst
(setq pt (car (acet-geom-intersectwith lng ln 0)))
(if pt
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0) 
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
);pro
)
);foreach
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------

 

Chúc bạn vui.

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
phamthanhbinh    3.123

Các bạn có thể cho mình cái lệnh xuất đúng độ cao và toạ độ của đường pline và 3dpline

VD: mình có 5 điểm có độ cao từ 1-5

mình nối 5 điểm đó với nhau

bây giờ xuất toạ độ và độ cao ra excel thì nó xuat các điểm đó theo thứ tự điểm nối đường từ 1-5 đó

Mình đã thử máy lệnh nhưng hình khi nối độ cao thì nó chỉ lấy độ cao của điểm thứ nhất là độ cao của đường lên khi xuất điểm thì độ cao chỉ có 1

Còn lisp 2d3d thì lại đòi hỏi có đường pline trước và fải nhập độ cao lên khi làm nhiều hơi bất tiện

Mong các bạn giúp mình...

Hề hề hề,

Trên diễn đàn đã có lisp xuất tọa độ các đỉnh của một polyline ra excel. Để thực hiện yêu cầu của bạn chỉ đơn giản là bạn hãy tạo một polyline theo đúng trật tự của các đỉnh theo ý của bạn rồi sử dụng cái lisp đó là xong. bạn hãy chịu khó tìm và áp dụng thử coi.

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
thanhblue    0

Bác Bình ah. trước hết em cảm ơn bác đã giúp đỡ em và quan tâm đến vấn đề của em. Nhung lisp của bác em chưa hiểu cách sữ dụng với lại em xin tóm gọn một lần nữa mục đích của em là thế này. Trên trắc ngang của file C1 của em là trắc ngang đường em đang làm. Vì phải làm hồ sơ nghiệm thu cao độ của từng lớp ( các đường nằm ngang) nên em phải lấy được cao độ của các điềm giao của từng đường một với các đường khác ( dọc hoặc xiên). Trong bản vẽ có cho sẵn cao độ gốc của một số đường nền lisp cũ nó có các quá trình như sau: Lấy điểm gốc, lấy cao độ gốc--> tích từng giao điểm trên đường đó để lấy cao độ và khoảng cách từ tim đường ra. Giờ em muốn bác giúp làm cho cái lisp như sau: Lấy điểm gốc, lấy cao độ gốc( định nghĩa cao độ và khoảng cách của chính điểm đó) --> tích vào đường nằm ngang( lớp đắp em đang cần lấy cao độ và khoảng cách) thì sẽ tự động xuất ra tại các vị trí có giao điểm tại đường nằm ngang đó.Thank bác. Nhờ bác giúp cho trọn vẹ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
phamthanhbinh    3.123

Bác Bình ah. trước hết em cảm ơn bác đã giúp đỡ em và quan tâm đến vấn đề của em. Nhung lisp của bác em chưa hiểu cách sữ dụng với lại em xin tóm gọn một lần nữa mục đích của em là thế này. Trên trắc ngang của file C1 của em là trắc ngang đường em đang làm. Vì phải làm hồ sơ nghiệm thu cao độ của từng lớp ( các đường nằm ngang) nên em phải lấy được cao độ của các điềm giao của từng đường một với các đường khác ( dọc hoặc xiên). Trong bản vẽ có cho sẵn cao độ gốc của một số đường nền lisp cũ nó có các quá trình như sau: Lấy điểm gốc, lấy cao độ gốc--> tích từng giao điểm trên đường đó để lấy cao độ và khoảng cách từ tim đường ra. Giờ em muốn bác giúp làm cho cái lisp như sau: Lấy điểm gốc, lấy cao độ gốc( định nghĩa cao độ và khoảng cách của chính điểm đó) --> tích vào đường nằm ngang( lớp đắp em đang cần lấy cao độ và khoảng cách) thì sẽ tự động xuất ra tại các vị trí có giao điểm tại đường nằm ngang đó.Thank bác. Nhờ bác giúp cho trọn vẹn.

hề hề hề,

Thật xin lỗi bạn vì mình nghĩ rằng bạn đã biết cách dùng cái líp mình gửi. Do mình chỉ cải biên từ cái lisp mà chính bạn đã gửi lên diễn đàn nên cách chạy nó hoàn toàn giồng với cách bạn đã từng làm với líp cũ.

Cụ thể như sau:

1/- Load lisp vào CAD

2/- Chạy lisp bằng cách nhập lệnh CD trên dòng command.

3/- Khi lisp yêu cầu bạn nhập chiều cao text, bạn có thể nhập chiều cao tùy ý hoặc enter để chấp nhận chiều cao mặc định là 1.

4/- Khi lisp yêu cầu nhập điểm tim TN tu nhiên thì bạn pick vào cái điểm bạn muốn lấy.

5/- Khi lisp yêu cầu bạn chọn cao độ gốc thì bạn chọn cái text cao độ mà bạn muốn.

6/- Khi lisp yêu cầu bạn chọn line gốc thì bạn chọn cái line mà bạn định ghi cao độ.

7/- khi lisp yêu cầu bạn chọn đối tượng, hãy quét chọn tất cả các đường có giao điểm với line gốc mà bạn muốn ghi kích thước.

8/- Nhấn enter để kết thúc việc chọn đối tượng.

9/- Với mỗi giao điểm tìm được lisp sẽ yêu cầu bạn chọn phía ghi text, bạn hãy chọn theo cái độ khoái của bạn sao cho nó đèm đẹp là Ok, lisp sẽ tự động ghi cao độ cho bạn tại giao điểm đó. Cứ thế lần lượt cho tới giao điểm cuối cùng.

 

Vậy đó, nó chỉ khác với cái bạn đã từng làm là không phải pick từng giao điểm một. Thay vào đó bạn phải chọn các đường có giao điểm mà bạn muốn ghi cao đó.

 

Thực tế thì về cái sự nhanh và tiện của cái lisp này so với lisp cũ có nhẽ chả đáng là bao, song nó là một phép thử để bạn tự kiểm tra lại xem có cần chỉnh sửa gì nữa không để làm tiếp.

 

Theo ý mình thì có thể bỏ cái việc chọn phía ghi cao độ đi và thay vào đó là để lisp sẽ tự ghi cao độ theo một chuẩn nào đó. Chẳng hạn về phía trái hay phải của giao điểm . Như vậy lisp sẽ chạy nhanh hơn do không phải chờ bạn chọn nữa. Tuy nhiên có thể dẫn tới là việc ghi ra không đẹp do có thể có những text bị trùng lên nhau... bạn hãy tự suy nghĩ và lựa chọn lấy một phương án ghi cao độ, mình sẽ giúp bổ sung để bạn có được cái lisp ưng ý.

 

Ngoài ra theo yêu cầu công việc của bạn nếu cần chỉnh sửa gì thêm thì hãy post lên nhé,

 

Rất nmong bạn chạy thử và cho ý kiến để có thể hoàn thiện cái lisp trên theo yêu cầu công việc của bạn.

 

Chúc bạn vui,

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
phamthanhbinh    3.123

Nó báo lỗi error: no function definition: ACET-SS-TO-LIST khi em enter bác Bình ah.

Hề hề hề,

Vậy là bạn chưa cài Express Tools rồi. Bạn đang dùng Cad bao nhiêu vậy, 2000, 2004, hay 2....?

Trong trường hợp bạn không có bộ cài Express tools mình sẽ sửa lại cái lísp trên một chút vậy.

Nó đây bạn nhé. Cách dùng như lisp trước.

;; free lisp from cadviet.com
(defun DXF (code elist)
(cdr (assoc code elist))
)

(princ "\nGo lenh \"CD\" ")
(defun c:CD ( / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 atlast oslast pt0 x0 y0 ed h0 lng ln ssln sslst p1 p2 p3 p4 )
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(command "UCS" "w")

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
;(setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/")) 
;ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(setq tx1 1 
        ty1 1
)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien <end of> : ") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 15359) 
;;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
(setq lng (car (entsel "\n Hay chon line goc"))
        p1 (cdr (assoc 10 (entget lng)))
        p2 (cdr (assoc 11 (entget lng)))
       ssln (ssget (list (cons 0 "LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
       ;;;;;sslst (acet-ss-to-list ssln)
       sslst (ss2ent ssln)
)
;;;;;(While (/= pt nil)
(foreach ln sslst
(setq p3 (cdr (assoc 10 (entget ln)))
         p4 (cdr (assoc 11 (entget ln)))
         pt (inters p1 p2 p3 p4)
)
;;;;;;(setq pt (car (acet-geom-intersectwith lng ln 0)))
(if pt
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0) 
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
);pro
)
);foreach
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------
(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

 

Bạn lưu ý là với cái lisp sửa nãy thì các đường tạo ra giao điểm cần ghi cao độ phải là Line bạn nhé. Nếu không phải là line thì lisp sẽ không chạy đúng đâu. Thực tế thì bản vẽ bạn gửi chúng đều là line cả nhưng mình vẫn cứ nhắc bạn vậy, mong bạn đừng cho mình là dở hơi nhé....

 

Bạn hãy thử nhé và chúc bạn vui.

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
lenhatanh    2

Các Bác cho em hỏi 02 vấn đề với:

- Có thể ghép file *.DCL vào file *.lsp hoặc *.fas không ?

- Có cách nào gom hết các file có đuôi *.vlx lại làm một không ?

Momg được giúp đỡ, xin 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
Doan Van Ha    2.680

Các Bác cho em hỏi 02 vấn đề với:

- Có thể ghép file *.DCL vào file *.lsp hoặc *.fas không ?

- Có cách nào gom hết các file có đuôi *.vlx lại làm một không ?

Momg được giúp đỡ, xin cảm ơn nhiều !

1. Trên diễn đàn có rất nhiều ví dụ về việc viết DCL trong LSP. Chẳng hạn như trong topic "Tiếng Việt trong hộp thoại - phần II" có 1 ví dụ của bác Thaistreet. Đã ghép được vào LSP thì đương nhiên chuyển qua FAS nó cũng nằm trong đó luôn.

2. Theo tôi biết, để "gom" thành VLX thì chỉ có 5 dạng đuôi: LSP, DCL, PRJ, FAS, TXT. Như vậy, e rằng không gom được VLX với VLX bạn ạ.

Mạo muội biết đến đâu nói đến đó thôi nhé 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
phamthanhbinh    3.123

có bác nào cao thủ nova và lisp giúp em với.. bác bình ơi. bác ketxu ơi...

Hề hề hề,

Bác Nam gọi có tớ trả lời.

Thực tình là mình đã đọc và cũng thực tình là không hiểu hết cái ý của bạn muốn.

Bạn đừng cười vì với chuyên môn của bạn mình là dân ngoại đạo. Và do đó trừ phi bạn giải thích rõ ràng cái bạn cần, bằng không thì mình có muốn giúp cũng chịu bạn ạ.

Về cái lisp của bác ThaiStreet, nếu bạn thấy đã dùng ngon thì chỉ cần bạn đọc kỹ nó và chỉnh sửa thêm thắt chút xíu thì nó sẽ thỏa mãn yêu cầu của bạn mà thôi.

Mình có biết tí chút về lisp chứ còn cái nova nô viếc thì mình điếc đặc. Do vậy bạn cằn nói rõ hơn cái yêu cầu chỉnh sửa của bạn là gì và cái lisp của bác Thaistreet đã giải quyết được đến đâu , bạn cần giải quyết thêm ở chỗ nào ??? nên có hình ảnh diễn giải kèm theo chứ mình chả hiểu đâu là cao đô thiết kế và đâu là khoảng cách thiết kế mà bạn nói đâu. Nhất là cái file của bạn lại dùng cái font chi chi đó mà mình không có nữa, nhìn vô text mà thấy toàn giun thôi bạn ạ....

Chúc bạn vui....

  • 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
chuongcivil    0

Chào cả nhà

Em rất khoái cái lisp Mplot của bác Hoành. ko biết bữa nay có phiên bản mới cho phép in ra nhieu bộ bản vẽ chưa :(

Neu chua co thi nho cac cao thu nang cap no len voi

Tu nhien khong danh duoc TV nua. cac bac thong cam

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×