Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

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


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#3461 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 09 May 2011 - 02:08 PM

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...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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3462 thanhblue

thanhblue

    biết pan

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

Đã gửi 09 May 2011 - 02:25 PM

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

#3463 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 09 May 2011 - 03:46 PM

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

#3464 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 09 May 2011 - 05:05 PM

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...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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3465 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 09 May 2011 - 10:54 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3466 thanhblue

thanhblue

    biết pan

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

Đã gửi 11 May 2011 - 07:31 AM

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

#3467 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 11 May 2011 - 12:31 PM

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,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3468 thanhblue

thanhblue

    biết pan

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

Đã gửi 11 May 2011 - 02:24 PM

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

#3469 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 11 May 2011 - 08:44 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3470 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 13 May 2011 - 08:59 AM

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

#3471 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 13 May 2011 - 09:22 AM

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


#3472 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 13 May 2011 - 10:04 AM

Cám ơn Bạn rất nhiều.
  • 0

#3473 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 13 May 2011 - 11:27 AM

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

#3474 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 13 May 2011 - 12:02 PM

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....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3475 chuongcivil

chuongcivil

    Chưa sử dụng CAD

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

Đã gửi 13 May 2011 - 04:22 PM

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

#3476 ngocnam.cad

ngocnam.cad

    biết vẽ ellipse

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

Đã gửi 17 May 2011 - 01:35 PM

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

vâng. cám ơn bác Bình và các bác nhiều. Em cũng đoán rằng các bác ko sử dụng về nova. hic.nhưng có lẽ em sẽ tự nghiên cứu vậy, mặc dù giờ mới đang học đuợc một ít về lisp .hihi. chứ em có giải thích thì chắc cũng khó có thể làm bác hiểu để giúp em đuợc .. em rất cám ơn bác vì đã hồi âm. chúc bác luôn vui vẻ và thành công...
  • 0

#3477 hanhc

hanhc

    Chưa sử dụng CAD

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

Đã gửi 18 May 2011 - 11:33 AM

Chào các bác!
Hôm nay em có 2 cái lisp nhờ các bác ạ, mong các bác giúp cho.
#Lisp 1: Thay đổi số phân đoạn của 1 polyline (chủ yếu là tăng lên). Thường thì em vẽ thêm 1 pline nữa sau đó dùng lệnh PE nối lại. Rất ư là lâu ạ.
#Lisp 2: Em có hình vẽ dưới đây. bài toán của em là, làm thế nào để 1 lệnh xoay hình 1 thành hình 2 được. (Híc)
My link
  • 0

#3478 790312

790312

    biết lệnh fillet

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

Đã gửi 18 May 2011 - 07:12 PM

Ngâm cứu nhé bạn :



(defun TAOLAYER(name color)
(if (not (Tblsearch "Layer" name))
(command "layer" "m" name "c" color "" "")
)
)
(defun c:Smake(/ oldos p1 p2 p3 line pline Hatch ten)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
;;;Taolayer
(TaoLayer "1" 2)
(TaoLayer "2" 8)
(TaoLayer "S13. HATCH" 1)
;;;Ve
(setq p1 (getpoint "\n Diem dau tien :")
p2 (polar p1 0 800)
p3 (polar p1 0 300)
p4 (list (- (car p3) 200) (+ (cadr p3) 385) 0.0)
)
(command "line" p1 p2 "")
(setq line (entlast))
(command "pline" p3 "@-200,225" "@400,0" "C")
(setq pline (entlast))
(command "bhatch" "p" "S" "S" pline "" "")
(setq Hatch (entlast))
(command "style" "VNI" "vhelvcn.ttf" "0" "1" "0" "n" "n")
(command "ATTDEF" "" "cos" "cos :" "%%p0.000" "S" "VNI" p4 "250" "0")
(setq att (entlast))

(command "copybase" p4 line pline att hatch "")
(command "pasteblock" p4)
(while (and (tblsearch "Block" (setq ten (getstring "\n Nhap ten Block/ Enter: Khong dat ten")))
(/= ten "")
)
(alert "\n Ten Block da co => dat ten khac")
)

(if line (entdel line))
(if pline (entdel pline))
(if att (entdel att))
(if hatch (entdel hatch))
(if (/= ten "") (command "rename" "B" (cdr(assoc 2 (entget(entlast)))) ten))

(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

Nhờ bác TUE_NV xem lại giùm e nếu e ghép 1 lisp khác sau lisp này thì lisp này không sử dụng được nó báo lỗi :too many arguments .Mong được sự giúp đỡ của bác.Thanks.
  • 0

#3479 thanhblue

thanhblue

    biết pan

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

Đã gửi 19 May 2011 - 08:26 AM

Chào bác. Tuần vừa rồi bị tai nạn giao thông nên em giờ mới lên diễn đàn và load lisp bác mới viết về dùng thử. Có thấy công việc đưọc nhanh hơn tí xiu nhưng vẫn còn mấy nhược điểm như sau:
- Khi " chọn line gốc" giả sữ đường line gốc đó là 2 đường liên tiếp ( Vì độ dốc đường này có thể thay đổi nên hai đường nối với nhau tại một điểm) thì khi chọn "line gốc " chỉ được một đưòng--> phải làm phần còn lại --> mất thêm mấy thao tac
- Chỉ dùng đưọc là line nên khi dùng em phải phá vỡ hết đối tượng và đổi thành layer "dùng được" thì nó mới nhận, mất công copy rồi dán lại vào bản gốc lần nữa--> tốn rất nhiều thời gian
Bác xem dùm em được hai vấn đề này nữa thì có lẽ lisp sẽ ok
  • 0

#3480 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 21 May 2011 - 02:09 PM

Chào bác. Tuần vừa rồi bị tai nạn giao thông nên em giờ mới lên diễn đàn và load lisp bác mới viết về dùng thử. Có thấy công việc đưọc nhanh hơn tí xiu nhưng vẫn còn mấy nhược điểm như sau:
- Khi " chọn line gốc" giả sữ đường line gốc đó là 2 đường liên tiếp ( Vì độ dốc đường này có thể thay đổi nên hai đường nối với nhau tại một điểm) thì khi chọn "line gốc " chỉ được một đưòng--> phải làm phần còn lại --> mất thêm mấy thao tac
- Chỉ dùng đưọc là line nên khi dùng em phải phá vỡ hết đối tượng và đổi thành layer "dùng được" thì nó mới nhận, mất công copy rồi dán lại vào bản gốc lần nữa--> tốn rất nhiều thời gian
Bác xem dùm em được hai vấn đề này nữa thì có lẽ lisp sẽ ok

Chào bạn thanhblue,
Những vấn đề bạn yêu cầu hoàn toàn có thể làm được nhưng nó cần một vài điều kiện như sau:
1/- Các bản vẽ của bạn phải có cấu trúc hoàn toàn giống nhau. Các lines, layers, polylines ... phải được sử dụng cho cùng một mục đích như nhau.
2/- Bạn phải cài bộ express tools.

Vậy bạn có đồng ý không????

Lisp đó đây, bạn hãy xài thử nhé:

;; 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: "))
(alert "\n Chon cac duong chuan")
(setq sslg (acet-ss-to-list (ssget (list (cons 0 "*LINE") (cons 8 "7")))))
;;;;;;;;lng (car (entsel "\n Hay chon line goc"))
(alert "\n Chon cac duong can xac dinh giao diem")
(setq ssln (ssget (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
sslst (acet-ss-to-list ssln)
)
;;;;;(While (/= pt nil)
(foreach lng sslg
(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
);;;foreach1
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------


Hy vọng bạn hài lòng.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.