Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

-Mình viết đọan code này hok biết sai ở đâu và dùng hàm gì để lấy được chữ trong hộp DCL. Xin giúp đỡ và sửa dùm.

NB : dialog{

label = "Thu";

:popup_list{

label = "Chon";

list = "Atama \nNegarami";

value = 0;

edit_width = 30;

key = "btn";

}

ok_cancel;

}

Đây là đọan lisp:

(defun SaveVars()

(setq LE(get_tile "btn"))

)

(defun c:tu()

(setq dcl_id (load_dialog "tmp.dcl"))

(new_dialog "NB" dcl_id)

(action_tile "cancel" "(done_dialog)")

(action_tile "accept" "(saveVars)(done_dialog)")

(start_dialog)

(unload_dialog dcl_id)

(setq PT1(getpoint "\n Chon diem thu 1:")

PT2(getpoint PT1"\n Chon diem thu 2:")

)

(command "leader" PT1 PT2 "A" LE "")

(princ)

)

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 viết đọan code này hok biết sai ở đâu và dùng hàm gì để lấy được chữ trong hộp DCL. Xin giúp đỡ và sửa dùm.

NB : dialog{

label = "Thu";

:popup_list{

label = "Chon";

list = "Atama \nNegarami";

value = 0;

edit_width = 30;

key = "btn";

}

ok_cancel;

}

Đây là đọan lisp:

(defun SaveVars()

(setq LE(get_tile "btn"))

)

(defun c:tu()

(setq dcl_id (load_dialog "tmp.dcl"))

(new_dialog "NB" dcl_id)

(action_tile "cancel" "(done_dialog)")

(action_tile "accept" "(saveVars)(done_dialog)")

(start_dialog)

(unload_dialog dcl_id)

(setq PT1(getpoint "\n Chon diem thu 1:")

PT2(getpoint PT1"\n Chon diem thu 2:")

)

(command "leader" PT1 PT2 "A" LE "")

(princ)

)

Chào bạn Minhtu2004,

Mình đã trả lời bài viết của bạn trong topic hỏi về líp rồi. Bạn nên rút kinh nghiệm, không nên pót cùng một câu hỏi, cùng một nội dung trên nhiều topic thế này. Đây là một quy định của diễn đàn, rất mong bạn lưu ý và tôn trọng quy định này, tránh làm phiền mọi người trên diễn đàn bạn nhé.

Cám ơn bạn.

  • Vote tăng 2

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
đúng là nó có hiện thật nhưng mà vẫn có dòng toạ độ bên cạnh bạn ạ.thank nhiều nha

Bạn kích chuột phải vào thanh coords của cad ( Vùng màu xám bên tay phải chữ Model) -> Hiện lên me nu xổ lên -> Bỏ dấu tick Cursor coordinate Value (F6) là được

  • Vote tăng 3

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ôi có cái này lệnh là MAW tác dụng với PL ;line ;ARC chỉ cần chọn pl có độ rộng làm chuẩn sau đó chọn các đối tượng khác.

 


(DEFUN C:MAW(/ SSET NET SSL M)
(prompt "\nChon PLINE mau.")
 (setq DTD (car (entsel)))
 (setq DT (entget DTD))
 (setq NDT (cdr (assoc 40 DT)))
  (Princ "\nHay chon cac doi tuong muon chinh :")
  (Setq sset (Ssget))

 (if (Null sset)
 (princ "\nKhong chon duoc doi tuong nao")
)

  (IF (/= NIL SSET) (PROGN
  (SETQ SSL (SSLENGTH SSET))
  (INITGET 4)
  ;(SETQ NDT (GETREAL "\nNhap do rong : "))
  (IF (/= NIL NDT)
   (WHILE (> SSL 0)
     (SETQ M (SSNAME SSET (SETQ SSL (- SSL 1)) ))
     (IF (= (CDR (ASSOC '0 (ENTGET M))) "LINE") 
         (COMMAND "PEDIT" M "Y" "W" NDT "") 
     ) 

     (IF (= (CDR (ASSOC '0 (ENTGET M))) "LWPOLYLINE") 
         (COMMAND "PEDIT" M "W" NDT "") 
     ) 

    (IF (= (CDR (ASSOC '0 (ENTGET M))) "ARC") 
         (COMMAND "PEDIT" M "Y" "W" NDT "") 
     ) 


   ) 
  )))
  (PRINC)
) 

Bác cho em hỏi báo lỗi "; error: bad character read (octal): 0" là do đâu, cám ơn bác!!!

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 cho em hỏi báo lỗi "; error: bad character read (octal): 0" là do đâu, cám ơn bác!!!

Là lỗi do đọc file lisp của bạn bị lỗi. Bạn xoá file lisp đó đi. Copy lại code này để làm 1 file lisp mới xem sao :(

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ần 1 lisp nối các đoạn thẳng, đoạn cong lại với nhau, mong mọi người giúp đỡ.

Cái này nói nhiều trên diễn đàn rồi. Bạn có thể tìm thêm. Riêng Spline thì hơi đặc biệt nên bạn phải biến nó thành pline trước đã .

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ần 1 lisp nối các đoạn thẳng, đoạn cong lại với nhau, mong mọi người giúp đỡ.

nối các line, arc, lwpolyline không chạm nhau, bằng tính năng mới của lệnh pline

http://www.cadviet.com/forum/index.php?showtopic=507

 

 

làm sao để chuyển đổi đường Spline thành Pline

http://www.cadviet.com/forum/index.php?showtopic=5056

 

Nối đường spline

http://www.cadviet.com/forum/index.php?showtopic=10242

  • Vote tăng 2

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

Trước tiên em vô cùng cảm ơn anh hoành đã mở topic này. Nhờ nó mà em và mọi người đã có nhiều lisp hay giúp công việc được thực hiện nhanh hơn. Em có vấn đề cần như sau :

Trong đây có lisp copy thông minh tuy nhiên em muốn hỏi làm sao để thay thế bước nhảy của việc copy vì đôi khi em không muốn 1->2->3 VD em muốn bước 1->1.2->1.4... thì phải thay đổi như thế nào anh có thể giúp em sửa đổi để có thể chọn bước nhảy trước khi copy không? Em xin cảm ơ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
Trước tiên em vô cùng cảm ơn anh hoành đã mở topic này. Nhờ nó mà em và mọi người đã có nhiều lisp hay giúp công việc được thực hiện nhanh hơn. Em có vấn đề cần như sau :

Trong đây có lisp copy thông minh tuy nhiên em muốn hỏi làm sao để thay thế bước nhảy của việc copy vì đôi khi em không muốn 1->2->3 VD em muốn bước 1->1.2->1.4... thì phải thay đổi như thế nào anh có thể giúp em sửa đổi để có thể chọn bước nhảy trước khi copy không? Em xin cảm ơn!!

Bạn sử dụng đoạn Code mà Tue_NV mới viết nhé. Hy vọng bạn hài lòng :

(Defun c:copytang()
(setq oldim (getvar "dimzin"))
(setvar "dimzin" 0)
(setq ss (car(entsel "\n Ban chon Text so :")))
 (setq tp (getint "\n so chu so thap phan :"))
 (if (not soo) (setq soo 0.25))
 (setq socopy (getreal (strcat "\n Nhap so can copy : :")))
 (if (not socopy) (setq socopy soo) (setq soo socopy))
(setq po (getpoint "\n Diem dau copy :"))
(setq po2 (getpoint po "\n Diem cuoi copy :"))
(command "copy" ss "" po po2)
(setq ss (entlast))
(setq po po2)
(while po 
(setq ent (entget ss))
(setq solay (distof (cdr(assoc 1 ent)) 2))
(setq soup (rtos (+ solay socopy) 2 tp))
(setq ent (subst (cons 1 soup) (assoc 1 ent) ent))
(entmod ent)
(setq po2 (getpoint po "\n Diem cuoi copy/ Enter ket thuc lenh:"))
(command "copy" ss "" po po2)
(setq po po2)
(setq ss (entlast))
)

(setvar "dimzin" oldim)
(princ)
)

:mellow:

  • Vote tăng 2

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

chào cả nhà Cadviet, hôm nay lại xin mạn phép nhờ vả các bạn : chả là thế này dạo này mình phải vẽ tim của các con sông trên cad, các con sông này rất là ngoằn ngèo và chiều rộng lòng sông mỗi chỗ một khác (việc ofset là vô dụng), việc tìm tim của nó là rất thủ công và mệt mỏi, mình hi vọng các bạn cho mình 1 lisp (hoặc cách nào đó) có thể tự động tìm tim của sông. biết rằng sông đã được nối thành 1 Pline duy nhất

mình gửi file mẫu đi kèm : (đã chuyển về Cad 2004)

 

http://www.mediafire.com/file/hklj0znm5kz/1.dwg

 

cảm ơn các bạn :mellow:

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

- Xin chào đầu tuần.

- Mình mới viềt 1 đọan líp để hỗ trợ công việc, nhưng không được theo ý. Nhờ chỉnh lại dùm.

BT : dialog {

label = "Hop Thoai Chu thich";

: popup_list{

list = "\n Atama"

"\n Negarami";

key = "leader";

label = "Chon cau chu thich:";

edit_width = 30;

}

ok_cancel;

}

 

(defun c:BT()

(setq dcl_id (load_dialog "BT.dcl"))

(if (not (new_dialog "BT" dcl_id)) (exit))

(action_tile "leader" "(setq Choncauchuthich $value)")

(cond

((= Choncauchuthich "0")(set_tile "text" " Atama"))

((= Choncauchuthich "1")(action_tile "leader" "(set_tile \"text\" \" Negarami\")"))

)

(start_dialog)

(unload_dialog dcl_id)

(action_tile "cancel" "(exit_dialog)")

(action_tile "accept" "(done_dialog)")

(setq PT1 (getpoint "\n Chon diem thu nhat:")

PT2 (getpoint PT1"\n Chon diem thu hai:")

)

(cond

((= Choncauchuthich "0")(setq LE " Atama"))

((= Choncauchuthich "1")(setq LE " Negarami"))

)

(command

"dimstyle" "R" "TYUKI" ""

"leader" PT1 PT2 "A" LE "")

(princ)

)

Vấn đề ở đây là nó chỉ có lấy 1 chữ nào mà mình thực hiện trước thôi.

VD:-Lúc đầu mình chọn chữ Atama thì mấy lần thực hiện lệnh sau vẫn lấy chữ Atama mặc dù đã chọn chữ Negarami. Nhờ mọi người sửa dùm. Cám ơ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
-Bạn gỏ MODEMACRO enter xong gỏ nội dung muốn hiển thị vào là ok.

-Dùng lisp: bạn lưu dòng này vào file lisp cho nó loa tự động.

(setvar "MODEMACRO" "nội dung")

 

Bạn Duy cho mình hỏi tý!

1. Khi gỏ lệnh MODEMACRO xong OK thì hiển thị, nhưng khi thoát vả khởi động lại thì không còn

2. Mình muốn khi khởi động thì hiện ngày, tháng, năm, mình đã chép đoạn lisp vào support/acad doc.lsp nhưng vẫn không được.

Code: (Setvar "modemacro" "[$(edtime,$(getvar,date,time),DDD-DD/MO/YYYY-H:MM AM/PM)]")

Hãy giúp mình với. Cảm ơn bạ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
Bạn Duy cho mình hỏi tý!

1. Khi gỏ lệnh MODEMACRO xong OK thì hiển thị, nhưng khi thoát vả khởi động lại thì không còn

2. Mình muốn khi khởi động thì hiện ngày, tháng, năm, mình đã chép đoạn lisp vào support/acad doc.lsp nhưng vẫn không được.

Code: (Setvar "modemacro" "[$(edtime,$(getvar,date,time),DDD-DD/MO/YYYY-H:MM AM/PM)]")

Hãy giúp mình với. Cảm ơn bạn nhiều!

Bạn mở Notepad lên -> Paste đoạn Code này vào. Lưu vào trong support của CAD với tên ví dụ là ngay.lsp

Vào CAD : gõ

Command : (load "ngay.lsp")

Vậy là OK

chào cả nhà Cadviet, hôm nay lại xin mạn phép nhờ vả các bạn : chả là thế này dạo này mình phải vẽ tim của các con sông trên cad, các con sông này rất là ngoằn ngèo và chiều rộng lòng sông mỗi chỗ một khác (việc ofset là vô dụng), việc tìm tim của nó là rất thủ công và mệt mỏi, mình hi vọng các bạn cho mình 1 lisp (hoặc cách nào đó) có thể tự động tìm tim của sông. biết rằng sông đã được nối thành 1 Pline duy nhất

mình gửi file mẫu đi kèm : (đã chuyển về Cad 2004)

 

http://www.mediafire.com/file/hklj0znm5kz/1.dwg

 

cảm ơn các bạn :mellow:

Bạn cho mình hỏi cái đường tim mình có vòng lại bằng màu đỏ trong file thì vẽ như thế nào vậy bạn ?

http://www.cadviet.com/upfiles/1_12.dwg

  • 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
Bạn cho mình hỏi cái đường tim mình có vòng lại bằng màu đỏ trong file thì vẽ như thế nào vậy bạn ?

http://www.cadviet.com/upfiles/1_12.dwg

 

thanks bạn nhiều

 

những đoạn mẩu như vậy bỏ qua cậu ạ, coi như nó vẫn nối thẳng thành 1 đường những cái mẫu tương tự bỏ qua hết cậu ạ (nếu mà vẽ cả tim cho cái ấy cũng đc cậu ah) cái nào dễ hơn cho cậu thì cậu làm :mellow:

 

còn đoạn ngã 3 thì tim tương ứng cũng là ngã 3 như trong file này cậu a :mellow:

 

http://www.mediafire.com/file/zizznlemdmy/1_12.dwg

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

thanks bạn nhiều

 

những đoạn mẩu như vậy bỏ qua cậu ạ, coi như nó vẫn nối thẳng thành 1 đường những cái mẫu tương tự bỏ qua hết cậu ạ (nếu mà vẽ cả tim cho cái ấy cũng đc cậu ah) cái nào dễ hơn cho cậu thì cậu làm mellow.gif

 

còn đoạn ngã 3 thì tim tương ứng cũng là ngã 3 như trong file này cậu a cheers.gif

 

http://www.mediafire.com/file/zizznlemdmy/1_12.dwg

Tue_NV viết xong đoạn Code này. Thực hiện đoạn Code cho file kèm theo ( 2 hình vẽ bên tay phải)

http://www.cadviet.com/upfiles/1_13.dwg

(defun c:timsong()
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)

(setq pl1 (car(entsel "\n Chon duong Polyline tu nhat :")))
(setq pl2 (car(entsel "\n Chon duong Polyline tu hai :")) i 1)
(setq pr1 (vlax-curve-getEndParam pl1))
(setq diem1 (vlax-curve-getPointAtParam pl1 0))
(setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
(setq dtbinh (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))

(while (<= i pr1)
(setq diem1 (vlax-curve-getPointAtParam pl1 i))
(setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
(setq dtbinh1 (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(setq frome (entlast));; chon doi tuong cuoi cung
(command "Pline" dtbinh dtbinh1 "")
(command "Pedit" "m" frome "L" "" "j" "10" "")

(setq dtbinh dtbinh1)
(setq i (1+ i))
)


(Command "undo" "end")
(setvar "osmode" oldos)
(princ)
)

Có những đoạn ngoằn nghèo có lúc không được, bạn phải chỉnh tay lại thôi. 

Chào bạn

  • Vote tăng 2

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
chào cả nhà Cadviet, hôm nay lại xin mạn phép nhờ vả các bạn : chả là thế này dạo này mình phải vẽ tim của các con sông trên cad, các con sông này rất là ngoằn ngèo và chiều rộng lòng sông mỗi chỗ một khác (việc ofset là vô dụng), việc tìm tim của nó là rất thủ công và mệt mỏi, mình hi vọng các bạn cho mình 1 lisp (hoặc cách nào đó) có thể tự động tìm tim của sông. biết rằng sông đã được nối thành 1 Pline duy nhất

mình gửi file mẫu đi kèm : (đã chuyển về Cad 2004)

 

http://www.mediafire.com/file/hklj0znm5kz/1.dwg

 

cảm ơn các bạn :mellow:

Chào bạn nguyenkhoadung98,

Mình đã xem file của bạn và thấy có một số ý kiến như sau:

1/- Để vẽ tim sông bạn không nên nối tất cả hai bờ sông thành một pline như vậy. Điều này sẽ khó khăn hơn cho việc xác định các điểm trên đường tim.

2/- Nều mỗi bờ sông là một pline riêng biệt, bạn có thể lấy đường tim theo cách như sau được không?

- chọn một bờ sông, chia bờ sông đó thành các điểm chia với khoảng cách chia đủ nhỏ. Cái này đã có lisp của bác Hoành rồi thì phải.

- tạo một vòng lặp qua mỗi điểm chia, dựng đường pháp tuyến tại điểm chia với pline cắt pline bờ sông thứ hai tại một điểm. Xác định trung điểm của đoạn thẳng nối điểm chia với điểm cắt vừa tìm được. ta có một điểm trên đường tim.

- Nối các điểm trên đường tim bằng pline.

3/- Với các sông có nhiều nhánh thì nên cắt các pline thành các đoạn tương ứng với các nhánh và làm như trên với mỗi nhánh để có đường tim từng nhánh. cuối cùng nối lại thành đường tim chung.

 

Thực ra mình cũng hiểu là như vậy chưa hẳn đã đúng là đường tim do pháp tuyến của pline thứ nhất chưa chắc là pháp tuyến của pline thứ hai tại điểm cắt. Nhưng có lẽ giải pháp này cũng có thể chấp nhận với sai số cho phép phải không bạn.

 

Do hiện tại mình khá bận nên chưa thể ngồi viết lisp cho bạn được, bạn hãy thử làm rồi post lên mọi người sẽ góp ý hoàn thiện giúp bạn bạn nhé.

Chúc thành cô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
Thứ nhất là Tue_NV không thích gọi bằng cậu, và lời nói của bạn khi nói thì không hay cho lắm. Bạn nhờ người khác mà lại nói như thế à? :mellow:

Dù sao thì Tue_NV cũng viết xong đoạn Code này. Thực hiện đoạn Code cho file kèm theo ( 2 hình vẽ bên tay phải)

http://www.cadviet.com/upfiles/1_13.dwg

(defun c:timsong()
 (command "undo" "be")
 (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)

 (setq pl1 (car(entsel "\n Chon duong Polyline tu nhat :")))
 (setq pl2 (car(entsel "\n Chon duong Polyline tu hai :")) i 1)
 (setq pr1 (vlax-curve-getEndParam pl1))
 (setq diem1 (vlax-curve-getPointAtParam pl1 0))
 (setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
 (setq dtbinh (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))

(while (  (setq diem1 (vlax-curve-getPointAtParam pl1 i))
 (setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
 (setq dtbinh1 (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
  (setq frome (entlast));; chon doi tuong cuoi cung
 (command "Pline" dtbinh dtbinh1 "")
 (command "Pedit" "m" frome "L" "" "j" "10" "")

 (setq dtbinh dtbinh1)
 (setq i (1+ i))
 )


 (Command "undo" "end")
 (setvar "osmode" oldos)
 (princ)
 )

Có những đoạn ngoằn nghèo có lúc không được, bạn phải chỉnh tay lại thôi. Vì có những lúc con người hiểu thế mà máy không hiểu thế. Bạn hiểu ý tôi chứ?

Chào bạn

Bác Tue_NV ơi,

Bản vẽ của bạn nguyenkhoadung98 chỉ có một pline duy nhất cho cả hai bên bờ sông mà bác. Vậy thì cái chọn pline thứ nhất và chọn pline thứ hai của bác ra sao ạ.

Theo lisp bác viết thì bác mặc định khoảng cách giữa các điểm chia là 1. Nên chăng bác cho người dùng tùy ý nhập khoảng cách này sẽ thuận lợi hơn vì có thể các bản vẽ có các tỷ lệ khác nhau, nếu cứ giữ một giá tri như vậy thì ở bản vẽ có tỉ lệ nhỏ sẽ dễ mất chính xác bác ạ.

Bác sử dụng hàm (vlax-curve-getClosestPointTo pl2 diem1) rất hay, mình cứ lăn tăn về cách chọn cái điểm này bác ạ. Mình định dùng điểm cắt của pháp tuyến với pline thứ nhất tại điểm chia với pline thứ hai thì có sai nhiều lắm không hả bác ? Bác cho mình biết ý kiến với nha.

Thank bác nhiều 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
Bạn mở Notepad lên -> Paste đoạn Code này vào. Lưu vào trong support của CAD với tên ví dụ là ngay.lsp

Vào CAD : gõ

Command : (load "ngay.lsp")

Vậy là OK

 

Bạn cho mình hỏi cái đường tim mình có vòng lại bằng màu đỏ trong file thì vẽ như thế nào vậy bạn ?

http://www.cadviet.com/upfiles/1_12.dwg

Cảm ơn bạn Tue_NV, nhưng mình muốn khi khởi động Cad thì lisp tự load lên luôn, không cần gõ lệnh. Nhờ 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
Cảm ơn bạn Tue_NV, nhưng mình muốn khi khởi động Cad thì lisp tự load lên luôn, không cần gõ lệnh. Nhờ bạn giúp mình.

Code đây bạn :

(defun S::STARTUP ()
(Setvar "modemacro" "[$(edtime,$(getvar,date,time),DDD-DD/MO/YYYY-H:MM AM/PM)]")
(princ)
)

Bạn chép đoạn code này và lưu dưới 1 file Lisp .lsp. Cách để load file Lisp tự động chắc bạn đã biết :

Bạn gõ lệnh AP/ rồi bấm vào hình chiếc cặp, sau đó nút add và chọn tới lisp mà bạn muốn add.

Tiếp đó chọn file .lsp -> Load -> close

untitled_6.bmp

Như vậy , Tue_NV đã giúp bạn : khi khởi động Cad thì lisp tự load lên luôn, không cần gõ lệnh rồi nhé.

Chúc thành công.

  • 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
Code đây bạn :

(defun S::STARTUP ()
(Setvar "modemacro" "[$(edtime,$(getvar,date,time),DDD-DD/MO/YYYY-H:MM AM/PM)]")
(princ)
)

Bạn chép đoạn code này và lưu dưới 1 file Lisp .lsp. Cách để load file Lisp tự động chắc bạn đã biết :

Bạn gõ lệnh AP/ rồi bấm vào hình chiếc cặp, sau đó nút add và chọn tới lisp mà bạn muốn add.

Tiếp đó chọn file .lsp -> Load -> close

untitled_6.bmp

Như vậy , Tue_NV đã giúp bạn : khi khởi động Cad thì lisp tự load lên luôn, không cần gõ lệnh rồi nhé.

Chúc thành công.

Cảm ơn Tue_NV. Mình đã làm được rồi. Có gì nhờ bạn giúp đỡ nha. Cảm ơn bạn 1lần nữa.

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
thanks bạn nhiều

 

những đoạn mẩu như vậy bỏ qua cậu ạ, coi như nó vẫn nối thẳng thành 1 đường những cái mẫu tương tự bỏ qua hết cậu ạ (nếu mà vẽ cả tim cho cái ấy cũng đc cậu ah) cái nào dễ hơn cho cậu thì cậu làm :mellow:

 

còn đoạn ngã 3 thì tim tương ứng cũng là ngã 3 như trong file này cậu a :mellow:

 

http://www.mediafire.com/file/zizznlemdmy/1_12.dwg

 

Thứ nhất là Tue_NV không thích gọi bằng cậu, và lời nói của bạn khi nói thì không hay cho lắm. Bạn nhờ người khác mà lại nói như thế à? :cheers: :cheers:

 

2/- Nều mỗi bờ sông là một pline riêng biệt, bạn có thể lấy đường tim theo cách như sau được không?

- tạo một vòng lặp qua mỗi điểm chia, dựng đường pháp tuyến tại điểm chia với pline cắt pline bờ sông thứ hai tại một điểm. Xác định trung điểm của đoạn thẳng nối điểm chia với điểm cắt vừa tìm được. ta có một điểm trên đường tim.

- Nối các điểm trên đường tim bằng pline.

3/- Với các sông có nhiều nhánh thì nên cắt các pline thành các đoạn tương ứng với các nhánh và làm như trên với mỗi nhánh để có đường tim từng nhánh. cuối cùng nối lại thành đường tim chung.

 

Thực ra mình cũng hiểu là như vậy chưa hẳn đã đúng là đường tim do pháp tuyến của pline thứ nhất chưa chắc là pháp tuyến của pline thứ hai tại điểm cắt. Nhưng có lẽ giải pháp này cũng có thể chấp nhận với sai số cho phép phải không bạn.

 

Chúc thành công.

Cái ý thứ 2 có thể không dựng được.

qua mỗi điểm chia, dựng đường pháp tuyến tại điểm chia với pline cắt pline bờ sông thứ hai tại một điểm : Không thể, có thể có một điểm, hoặc có thể có 2 điểm. Vậy bác định lấy điểm nào? Và cái ý dòng màu đỏ là ý đúng đấy.

Cái ý thứ 3 thì Tue_NV hoàn toàn đồng ý với Bác PhamThanhBinh nên cắt các pline thành các đoạn tương ứng với các nhánh và làm như trên với mỗi nhánh để có đường tim từng nhánh. cuối cùng nối lại thành đường tim chung.

Trong hình vẽ của Tue_NV đã chia cắt thành 2 Pline dọc theo bờ sông và Tue_NV đã cắt thành 3 nhánh sông (mỗi nhánh gồm 2 Pline dọc theo bờ sông) 3 nhánh đó giao nhau tại ngã 3 của con sông

File Tue_NV đã cắt đây :

http://www.cadviet.com/upfiles/1_13.dwg

Theo lisp bác viết thì bác mặc định khoảng cách giữa các điểm chia là 1. Nên chăng bác cho người dùng tùy ý nhập khoảng cách này sẽ thuận lợi hơn vì có thể các bản vẽ có các tỷ lệ khác nhau, nếu cứ giữ một giá tri như vậy thì ở bản vẽ có tỉ lệ nhỏ sẽ dễ mất chính xác bác ạ.

Cái này có lẽ không cần thiết. Vì dù có vẽ ở tỉ lệ nhỏ hay tỉ lệ lớn thì cái đường vẽ nối các trung điểm được dựng từ Pline1 và Pline 2. Pline1 và Pline 2 sdựng được => Đường vẽ nối các trung điểm sẽ dựng được cho dù vẽ ở tỉ lệ nhỏ hay tỉ lệ lớn. Bạn hiểu ý mình ở đây không?

Nhưng để đảm bảo chính xác hơn thì Tue_NV sẽ lấy số điểm chia là 2 trên 1 phân đoạn (segment).

File Lisp này đã được Tue_NV chỉnh sửa lại chút ít. Chạy cùng với file này http://www.cadviet.com/upfiles/1_13.dwg

(defun c:timsong()
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)

(setq pl1 (car(entsel "\n Chon duong Polyline tu nhat :")))
(setq pl2 (car(entsel "\n Chon duong Polyline tu hai :")) i 0.5)
(setq pr1 (vlax-curve-getEndParam pl1))
(setq diem1 (vlax-curve-getPointAtParam pl1 0))
(setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
(setq dtbinh (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(setq dtbinh1 (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(command "Pline" dtbinh dtbinh1 "")
(command "zoom" "e")
(while ((setq diem1 (vlax-curve-getPointAtParam pl1 i))
(setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
(setq dtbinh dtbinh1)
(setq dtbinh1 (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(setq frome (entlast));; chon doi tuong cuoi cung
(command "Pline" dtbinh dtbinh1 "")
(command "Pedit" "m" frome "L" "" "j" "10" "")

(setq dtbinh dtbinh1)
(setq i (+ i 0.5))
)
(command "zoom" "p")
(Command "undo" "end")
(setvar "osmode" oldos)
(princ)
)

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 muốn nhờ các bạn viết giúp mình một đoạn lisp nội dung là:

mình có 1pline, cần so sánh các điểm nút của pline đó với một móc so sánh và ghi các cao độ

mình xin diễn giải đoạn lisp thực hiện như sau:

- chọn mốc so sánh

- nhập giá trị mốc so sánh

- chọn vị trí ghi text cao độ

- chọn pline (có các nút lấy cao độ so sánh)

mình cũng đã thử làm nhưng ko làm được. Mong các bạn giúp đỡ! Xin cảm ơ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
Thứ nhất là Tue_NV không thích gọi bằng cậu, và lời nói của bạn khi nói thì không hay cho lắm. Bạn nhờ người khác mà lại nói như thế à? :mellow:

Dù sao thì Tue_NV cũng viết xong đoạn Code này. Thực hiện đoạn Code cho file kèm theo ( 2 hình vẽ bên tay phải)

http://www.cadviet.com/upfiles/1_13.dwg

(defun c:timsong()
 (command "undo" "be")
 (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)

 (setq pl1 (car(entsel "\n Chon duong Polyline tu nhat :")))
 (setq pl2 (car(entsel "\n Chon duong Polyline tu hai :")) i 1)
 (setq pr1 (vlax-curve-getEndParam pl1))
 (setq diem1 (vlax-curve-getPointAtParam pl1 0))
 (setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
 (setq dtbinh (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))

(while (<= i pr1)
 (setq diem1 (vlax-curve-getPointAtParam pl1 i))
 (setq diem2 (vlax-curve-getClosestPointTo pl2 diem1))
 (setq dtbinh1 (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
  (setq frome (entlast));; chon doi tuong cuoi cung
 (command "Pline" dtbinh dtbinh1 "")
 (command "Pedit" "m" frome "L" "" "j" "10" "")

 (setq dtbinh dtbinh1)
 (setq i (1+ i))
 )


 (Command "undo" "end")
 (setvar "osmode" oldos)
 (princ)
 )

Có những đoạn ngoằn nghèo có lúc không được, bạn phải chỉnh tay lại thôi. Vì có những lúc con người hiểu thế mà máy không hiểu thế. Bạn hiểu ý tôi chứ?

Chào bạn

 

thành thật xin lỗi bạn TUE_NV, mình kô có ý j đâu, ý mình muốn nói cái đó kô quan trong lắm nên bạn cứ làm thế nào tiện cho bạn nhất ý mà ( lần sau phải tuyệt đối tránh từ "dễ" kô các bạn hiểu nhầm ) thật là ngại wa, thành thật xin lỗi và cảm ơn bạn nhiều. Sorry Sorry :mellow:

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.

×