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ị

Bác N Hoanh có thể viết 1 lisp này dùm mình được ko? Cám ơn trước nhé.

Sau khi load Số liệu nhập từ notepad, qua Cad chọn điểm gốc rồi Vẽ biểu đồ SPT và in ra luôn số liệu nhập.

Độ sâu (SPT) SPT1 SPT2 SPT3, số liệu dùng để vẽ SPT (Đường Line) là N30 = SPT2 + SPT3 và độ sâu.

Tỷ lệ bản vẽ trong Cad là 1/250.

 

Ví dụ như:

Độ sâu (SPT) SPT1 SPT2 SPT3

2.5 2 3 4

5.5 5 6 7

8.5 7 6 8

Bạn upload 1 file CAD là kết quả của file text trên đi!

Tôi chưa hiểu kết quả cuối cùng bạn cần 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

Xin chaò các anh em !

Lâu rôì mơí có dịp để nhờ các cao thủ Auto Lips đây ,

1.Khi tôi vẽ hoặc chỉnh sưả bản vẽ cuả ngươì khác thi rất hay bị tình trạng CÁC ĐÔÍ TƯỢNG KHÔNG ĐỒNG PHẲNG, vâỵ anh em có thể cho tôi biết taị sao bị như thế , cách phòng chống hiện tượng đó và cách sưả các bản vẽ hhư thế ko ? (Tôi biết ở CAD có lệnh Flatten trong Express thì phaỉ .)

2.Anh em mình ai có lệnh nào tự động saveas bản vẽ trong 1 thơì gian định trước thì cho tôi xin luôn

Trước đay tôi có lệnh naỳ , cho nó autoload và nó tự động lưu theo định dạng Ten-ban-ve_ngay-gio nhưng mất tiêu rôì

Giúp tôi vơí 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
1.Khi tôi vẽ hoặc chỉnh sưả bản vẽ cuả ngươì khác thi rất hay bị tình trạng CÁC ĐÔÍ TƯỢNG KHÔNG ĐỒNG PHẲNG, vâỵ anh em có thể cho tôi biết taị sao bị như thế , cách phòng chống hiện tượng đó và cách sưả các bản vẽ hhư thế ko ? (Tôi biết ở CAD có lệnh Flatten trong Express thì phaỉ .)

 

Có cái này hôm trước thấy trên diễn đàn này nhưng bây giờ ko nhớ chổ để chỉ cho bác. Mạn phép tác giả tôi đưa lại lên cho bác dùng. Lệnh là VE0 (về không) nhớ là số 0 chứ không phải chử 0.

 

(defun 
           c:ve0 ()
(defun suadinhPl(thongtin / index doituong doituongmoi 
           toado)
(setq
doituong (assoc '38 thongtin) 
doituongmoi 
           (cons 38 0.)
)
(subst doituongmoi doituong 
           thongtin)
)
(defun suadinh (thongtin / index doituong 
           doituongmoi toado)
(setq thongtinmoi nil)
(foreach doituong 
           thongtin
(if (and (>= (car doituong) 10)
(<= (car 
           doituong) 36) 
)
(setq doituongmoi
(list (car 
           doituong)
(cadr doituong)
(caddr 
           doituong)
0.0
)
)
(setq doituongmoi 
           doituong)
)
(setq thongtinmoi (append thongtinmoi (list 
           doituongmoi)))
)
(setq thongtinmoi thongtinmoi)
)
(defun 
           tendoituong (ssdt /)
(cdr (assoc '0 (entget 
           ssdt)))
)
;;---------------------------------------------
(setq 
           tapdoituong (ssget)
sodt (sslength tapdoituong)
index 0
ta 
           (chr 8)
stxoa (strcat ta ta ta ta ta ta ta ta ta ta ta ta ta ta 
           ta ta ta ta ta ta)
stxuly "Xu ly duoc: "
ptcu 
           nil
)
(repeat sodt
(setq
ssdt (ssname tapdoituong 
           index)
pt (* (/ (* index 1.0) sodt) 100.0)
index (1+ 
           index)
)
(if (/= pt ptcu)
(progn
(princ (strcat stxoa 
           stxuly (rtos pt 2 0) "%"))
(setq ptcu pt)
)
) 
(if (or 
           (= (tendoituong ssdt) "SPLINE")
(= (tendoituong ssdt) "LINE") 

(= (tendoituong ssdt) "CIRCLE")
(= (tendoituong ssdt) 
           "ARC")
(= (tendoituong ssdt) "POLYLINE")
(= (tendoituong ssdt) 
           "ELLIPSE")
(= (tendoituong ssdt) "TEXT")
(= (tendoituong ssdt) 
           "DIMENSION")
(= (tendoituong ssdt) "ATTDEF")
(= (tendoituong 
           ssdt) "SOLID")
(= (tendoituong ssdt) "INSERT")
(= (tendoituong 
           ssdt) "ATTRIB")
(= (tendoituong ssdt) 
           "HATCH")
)
(progn
(setq thongtin (entget ssdt)
thongtin 
           (suadinh thongtin)
)
(entmod thongtin)
)
)
(if (= 
           (tendoituong ssdt) "LWPOLYLINE")
(progn
(setq thongtin (entget 
           ssdt)
thongtin (suadinhPL thongtin) 
)
(entmod 
           thongtin)
)
)
(princ)
)
)



 

Còn vì sao mà cao độ không bằng nhau thì thường do các bác địa hình. Bản vẽ của các bác ấy có cao độ theo địa hình. Rồi anh em mình nhiều lấn sao chép. bắt điểm nên dính tùm lum.

  • 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
1.Khi tôi vẽ hoặc chỉnh sưả bản vẽ cuả ngươì khác thi rất hay bị tình trạng CÁC ĐÔÍ TƯỢNG KHÔNG ĐỒNG PHẲNG, vâỵ anh em có thể cho tôi biết taị sao bị như thế , cách phòng chống hiện tượng đó và cách sưả các bản vẽ hhư thế ko ? (Tôi biết ở CAD có lệnh Flatten trong Express thì phaỉ .)

dùng CAD thì như thế này

Command: change

 

Select objects:

 

Command:

CHANGE

Select objects: 1 found

 

Select objects:

Properties/<Change point>: p

 

Change what property (Color/Elev/LAyer/LType/ltScale/Thickness) ? *Cancel*

 

Command: *Cancel*

 

Command: *Cancel*

 

Command: *Cancel*

 

Command: *Cancel*

 

Command: change

 

Select objects: Other corner: 2 found

 

Select objects:

Properties/<Change point>: p

 

Change what property (Color/Elev/LAyer/LType/ltScale/Thickness) ? el

 

New elevation <0.0000>: 0.0

 

Change what property (Color/Elev/LAyer/LType/ltScale/Thickness) ?

 

Nhưng chỉ chỉnh được cho các đối tượng có cao độ các điểm khác 0 nhưng bằng nhau thôi. (nghĩa là đối tượng đó nằm trên 1 mặt pẳng ngang ) nhưng thường thì cao độ các điểm trong đối tượng bị khác nhau nên không hiệu quả.

  • 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ảm ơn duy782006 nhé

Nhưng tôi ko lấy lisp của bạn đc Nếu có thể bạn up file .lsp lên hộ tôi nhé

Cảm ơn

Thế còn tự đông saveas thì sao nhỉ

Có ai giúp tôi vớ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
Cảm ơn duy782006 nhé

Nhưng tôi ko lấy lisp của bạn đc Nếu có thể bạn up file .lsp lên hộ tôi nhé

Cảm ơn

Thế còn tự đông saveas thì sao nhỉ

Có ai giúp tôi với

 

Xin nhắc lại đây không khải là líp của em mà là trên CADVIET em load về.

Lần sau bác chịu khó tìm trên diễn đàn có chưa rồi hãy hỏi.

Vấn đề lấy lisp trong bài vừa rồi cũng đã có hướng dẩn trên diển đàn.Em nói lại như thế này.

Bác chọn toàn bộ nội dung lisp trong bài vừa rồi. copy dán vào trong msword rồi từ đây mới copy dán vào trong notepad và lưu lại dưới đuôi *.lisp.

Cứ nhắc lại mấy cái đã nói thế này có khi BQT lại giận thì gay.

  • 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 có thể post yêu cầu về autolisp ở topic này.

 

anh hoanh ơi , em đang cần 1 lisp giống như lệnh matchprop nhưng ở dạng sau: khi chọn 1 đừơng line đã có độ dày (width) và khi chọn đừơng khác thì những đường đó sẽ có độ dày đúng như độ dày của đường đích ban đầu, trong khi đó lệnh ma không làm được như thế, anh có thể giúp em đượ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
anh hoanh ơi , em đang cần 1 lisp giống như lệnh matchprop nhưng ở dạng sau: khi chọn 1 đừơng line đã có độ dày (width) và khi chọn đừơng khác thì những đường đó sẽ có độ dày đúng như độ dày của đường đích ban đầu, trong khi đó lệnh ma không làm được như thế, anh có thể giúp em được không?

Xin nói lại 1 chút: line không bao giờ có width, chỉ có pline mới có width.

 

Lệnh MA của các ACAD đời mới đều matchprop được cả bề dày (tôi đang sử dụng ACAD2007).

Bạn nên cài ACAD đời mới nhất. Vì nếu tắt các chức năng về hiển thị màu mè, mờ ảo, nó vẫn nhẹ như ACAD2000, nhưng nhiều tính năng mới hơ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
anh hoanh ơi , em đang cần 1 lisp giống như lệnh matchprop nhưng ở dạng sau: khi chọn 1 đừơng line đã có độ dày (width) và khi chọn đừơng khác thì những đường đó sẽ có độ dày đúng như độ dày của đường đích ban đầu, trong khi đó lệnh ma không làm được như thế, anh có thể giúp em được không?

Bạn dùng thử cái này. Lệnh là CTN, không phân biệt đời Acad, hoạt động y chang MA, chỉ có tác dụng với Width và chỉ với Pline (như bác Hoành đã nói).

 

;;;-------------------------------------------------------------

(defun getthick (e) (cdr (assoc 43 (entget e))))

;;;-------------------------------------------------------------

(defun setthick (e th)

(setq

data (entget e)

old (assoc 43 data)

new (cons 43 th)

)

(entmod (subst new old data))

)

;;;-------------------------------------------------------------

(defun C:CTN()

(setq th (getthick (car (entsel "\nSelect source object:"))))

(while (setq e (car (entsel "\nSelect destination object:")))

(if e (setthick e th))

)

)

;;;-------------------------------------------------------------

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ên cài ACAD đời mới nhất. Vì nếu tắt các chức năng về hiển thị màu mè, mờ ảo, nó vẫn nhẹ như ACAD2000, nhưng nhiều tính năng mới hơn.

 

Cái này làm thế nào hả NH , có thể tạo thành 1 lisp rồi cho nó autoload ko ?

Nwếu đc bác cho xin nhé

Tôi cưỡi la già nhưng muốn phi như ngựa

Bác giúp tôi nhé

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
anh hoanh ơi , em đang cần 1 lisp giống như lệnh matchprop nhưng ở dạng sau: khi chọn 1 đừơng line đã có độ dày (width) và khi chọn đừơng khác thì những đường đó sẽ có độ dày đúng như độ dày của đường đích ban đầu, trong khi đó lệnh ma không làm được như thế, anh có thể giúp em được không?

Tôi có lisp này bạn xem co dùng dược không. dùng lệnh pw hay wp để thay đổi độ dày của đối tượng.

http://www.cadviet.com/upfiles/ChangeW.lsp

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 thanhlamct, tôi đã thử lisp của bác rùi nhưng có 1 vấn đề nảy sinh đó là : nếu chọn lại đường đó để thay 1 width khác thì lúc đó lisp mất tác dụng bác ạ (tức là chỉ có tác dụng 1 lần với đường đó thui), nhân tiện cám ơn bác Hoanh và ssg đã trả lời giúp tui.

  • 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

Jin muốn có một lisp với tính năng sau:

- Cho phép chọn một tập hợp điểm (points) bằng chuột.

- Chỉ định số bắt đầu.

- Lisp sẽ tự động đánh số thứ tự theo chiều tăng dần của X rồi đến Y, nghĩa là từ trái qua phải rồi từ dưới lên trên.

 

Mọi người giúp Jin 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
Jin muốn có một lisp với tính năng sau:

- Cho phép chọn một tập hợp điểm (points) bằng chuột.

- Chỉ định số bắt đầu.

- Lisp sẽ tự động đánh số thứ tự theo chiều tăng dần của X rồi đến Y, nghĩa là từ trái qua phải rồi từ dưới lên trên.

 

Mọi người giúp Jin với nhé!

 

Lệnh P2T:

 

(defun c:P2T (/ sst lstent pp p soht strht)
 (defun ss2ent	(ss / sodt index lstent)
   (setq
     sodt  (cond
      (ss (sslength ss))
      (t 0)
    )
     index 0
   )
   (repeat sodt
     (setq ent	   (ssname ss index)
    index  (1+ index)
    lstent (cons ent lstent)
     )
   )
   (reverse lstent)
 )
 (defun getp (ent)
   (cdr (assoc 10 (entget ent)))
 )
 (defun sosanh	(ent1 ent2 / p1 p2 x1 y1 x2 y2)
   (setq
     p1 (getp ent1)
     x1 (car p1)
     y1 (cadr p1)
     p2 (getp ent2)
     x2 (car p2)
     y2 (cadr p2)
   )
   (or	(	(and (= x1 x2) (    )
 )

 ;;------------- Main -------------------------------
 (princ "\nPoint to Text © 2007 CADViet.com")
 (setq
   sst	   (ssget '((0 . "POINT")))
   caochu (getdist "\nVao chieu cao text: ")
   soht   (1- (getint "\nVao so bat dau danh: "))
   lstent (vl-sort (ss2ent sst) 'sosanh)
 )
 (foreach pp lstent
   (setq
     soht  (1+ soht)
     strht (itoa soht)
     p	    (getp pp)
   )
   (entmake
     (list
(cons 0 "TEXT")
(cons 10 P)
(cons 40 caochu)
(cons 1 strht)
     )
   )
 )
 (princ)
)
(princ "\nSu dung lenh P2T bat dau")

  • 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
vấn đề nảy sinh đó là : nếu chọn lại đường đó để thay 1 width khác thì lúc đó lisp mất tác dụng bác ạ (tức là chỉ có tác dụng 1 lần với đường đó thui), nhân tiện cám ơn bác Hoanh và ssg đã trả lời giúp tui.

 

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

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

 

Chào bác Duy782006, cái lisp của bác đúng ý em rùi chỉ tiếc không chạy

báo lỗi như sau:

 

APPLOAD maw.lsp successfully loaded.

Command: ; error: malformed list on input

 

Mong bác xem lại cho em, em 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
Chào bác Duy782006, cái lisp của bác đúng ý em rùi chỉ tiếc không chạy

báo lỗi như sau:

 

APPLOAD maw.lsp successfully loaded.

Command: ; error: malformed list on input

 

Mong bác xem lại cho em, em cám ơn nhiều !

 

Chạy ngon mà, Xaydung xem lại đi!

 

Lỗi mà ACAD của Xaydung thông báo là do bạn bị thiếu (hoặc thừa) dấu ngoặc trong file lisp. Có thể bạn đã copy chưa chính xác đoạn code của Duy782006.

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

Cho mình xin cái lisp có tính năng:

- Khi vẽ tường thì cần vẽ tim tương rồi nhập vào giá trị tường (ví dụ 220) là nó tự động offset sang 2 bên (mỗi bên 110) rồi xoá luôn cái tim tường mà mình vẽ.

 

- Khi có 2 đường thẳng song song nhau, ta vẽ một đoạn vuông góc với 2 đường thẳng đó, rồi nhập giá trị (ví dụ 1200) là nó tự động offset sang 2 bên (mỗi bên 600) rồi trim luôn đoạn thẳng giữa 2 đường vừa được offset và xoá cái đoạn thẳng mà ta vẽ lúc đầu đi. (dùng để cắt lỗ cửa sổ).

 

- Khi có 2 đường thẳng song song nhau, ta vẽ một đoạn vuông góc với 2 đường thẳng đó, rồi nhập 2 giá trị (ví dụ : 110 và 800) là nó tự động offset đoạn thẳng ta vẽ lúc đầu thành hai đoạn thẳng có khoảng cách như sau: Đoạn đầu tiên cách đoạn ta vẽ 110, đoạn thứ 2 cách đoạn ta vẽ là 110+800, rồi nó tự trim đoạn thẳng ở giữa 2 đoạn vừa được offset rồi xoá đoạn ta vẽ đi. (chiều offset do ta lựa chọn)

 

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

Jin vẽ mặt bằng kết cấu, các tầng giống nhau nên copy lên rồi sửa text theo tầng rất mệt. Jin muốn có một lisp để edit một text với yêu cầu:

- Chọn text

- Nhập số tầng

 

Chẳng hạn: có sẵn một text là D2-16 (22x50)

Thì số 2 ở đây là tầng 2, bây giờ Jin muốn một lisp cho phép chọn text trên, nhập tên tầng là 3, thì text mới sẽ thành: D3-16(22x50), nhập tầng là 13 thì text sẽ thành: D13-16(22x50)

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
Cho mình xin cái lisp có tính năng:

- Khi vẽ tường thì cần vẽ tim tương rồi nhập vào giá trị tường (ví dụ 220) là nó tự động offset sang 2 bên (mỗi bên 110) rồi xoá luôn cái tim tường mà mình vẽ.

 

- Khi có 2 đường thẳng song song nhau, ta vẽ một đoạn vuông góc với 2 đường thẳng đó, rồi nhập giá trị (ví dụ 1200) là nó tự động offset sang 2 bên (mỗi bên 600) rồi trim luôn đoạn thẳng giữa 2 đường vừa được offset và xoá cái đoạn thẳng mà ta vẽ lúc đầu đi. (dùng để cắt lỗ cửa sổ).

 

- Khi có 2 đường thẳng song song nhau, ta vẽ một đoạn vuông góc với 2 đường thẳng đó, rồi nhập 2 giá trị (ví dụ : 110 và 800) là nó tự động offset đoạn thẳng ta vẽ lúc đầu thành hai đoạn thẳng có khoảng cách như sau: Đoạn đầu tiên cách đoạn ta vẽ 110, đoạn thứ 2 cách đoạn ta vẽ là 110+800, rồi nó tự trim đoạn thẳng ở giữa 2 đoạn vừa được offset rồi xoá đoạn ta vẽ đi. (chiều offset do ta lựa chọn)

 

Cảm ơn các bạn nhiều!

 

Có 3 lệnh dưới đây đáp ứng được 3 yêu cầu của bạn:

1. lệnh CVT: vẽ tường cân từ một line hoặc pline. Đầu vào: đối tượng (poly)line, chiều dày tường.

2. lệnh CVTL: vẽ tường lệch từ một line hoặc pline và bề dày. Đầu vào: đối tượng (poly)line, phía offset, khoảng cách offset, chiều dày tường.

3. lệnh CVTRIM: cắt bỏ đoạn line giao nhau giữa 2 tường. Đầu vào: 4 đường, chia làm 2 cặp. Mỗi cặp thể hiện một tường.

Như vậy, lệnh CVTL tuy có khác so với yêu cầu thứ 2 của bạn, nhưng nó điển hình hơn. Khi bạn muốn làm như yêu cầu thứ 2 của bạn, bạn kết hợp lệnh CVTL và lệnh CVTRIM là được.

 

(defun luuos ()
 (setq
   HOANH_OSMODE   (getvar "OSMODE")
   HOANH_AUTOSNAP (getvar "AUTOSNAP")
 )
)
(defun traos ()
 (if HOANH_OSMODE
   (setvar "OSMODE" HOANH_OSMODE)
 )
 (if HOANH_AUTOSNAP
   (setvar "AUTOSNAP" HOANH_AUTOSNAP)
 )
)
(defun sudung (ham ss / sodt index entdt soapp)
 (setq	sodt  (cond
	(ss (sslength ss))
	(t 0)
      )
soapp 0
index 0
 )
 (repeat sodt
   (setq entdt	(ssname ss index)
  index	(1+ index)
   )
   (if	(ham entdt)
     (setq soapp (1+ soapp))
   )
 )
 soapp
)
(defun GiaoDT (ent1 ent2)
 (setq	ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
 )
 (setq	g (vlax-variant-value
    (vla-IntersectWith ob1 ob2 acExtendNone)
  )
 )
 (if (/= (vlax-safearray-get-u-bound g 1) -1)
   (setq g (vlax-safearray->list g))
   (setq g nil)
 )
 (if g
   (progn
     (setq kq nil
    sd (fix (/ (length g) 3))
     )
     (repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
      g	 (cdddr g)
)
     )
     kq
   )
   nil
 )
)
(defun c:CVT ()
 (defun getfp (ent)
   (cdr (assoc 10 (entget ent)))
 )
 (defun getlp (ent / tt)
   (setq tt (entget ent))
   (if	(= "LINE" (cdr (assoc 0 tt)))
     (cdr (assoc 11 tt))
     (cdr (assoc 10 (cdr (member (assoc 10 tt) tt))))
   )
 )
 (defun offone	(ent)
   (setq p1  (getfp ent)
  p2  (getlp ent)
  pg1 (polar p1 (+ (angle p2 p1) (/ pi 2.0)) 100.0)
  pg2 (polar p1 (- (angle p2 p1) (/ pi 2.0)) 100.0)
   )
   (command ".offset" dist ent pg1 "")
   (command ".offset" dist ent pg2 "")
   (command ".erase" ent "")
 )
 (princ "\nOffset Line thanh tuong can © CADViet.com")
 (princ "\nVao doi tuong can offset (Pline hoac Line)")
 (setq	ss   (ssget '((-4 . "		      (0 . "LINE")
	      (0 . "LWPOLYLINE")
	      (-4 . "OR>")
	     )
     )
dist (/ (getdist "\nVao khoang cach: ") 2.0)
 )
 (sudung offone ss)
 (princ)
)
(defun c:CVTRIM	()
 (princ "\nCat 2 doan tuong giao nhau © CADViet.com")
 (princ "\nChon 2 duong dau tien: ")
 (setq	ssa   (ssget)
enta1 (ssname ssa 0)
enta2 (ssname ssa 1)
 )  
 (princ "\nChon 2 duong tiep theo: ")
 (setq	ssb   (ssget)
entb1 (ssname ssb 0)
entb2 (ssname ssb 1)
 )
 (setq	ga1b1 (GiaoDT enta1 entb1)
ga1b2 (GiaoDT enta1 entb2)
ga2b1 (GiaoDT enta2 entb1)
ga2b2 (GiaoDT enta2 entb2)
 )
 (if (and (= (length ga1b1) 1)
   (= (length ga1b2) 1)
   (= (length ga2b1) 1)
   (= (length ga2b2) 1)
     )
   (progn
     (setq ga1b1 (car ga1b1)
    ga1b2 (car ga1b2)
    ga2b1 (car ga2b1)
    ga2b2 (car ga2b2)
     )
     (luuos)
     (setvar "osmode" 0)
     (command ".break" enta1 ga1b1 ga1b2)
     (command ".break" enta2 ga2b1 ga2b2)
     (command ".break" entb1 ga1b1 ga2b1)
     (command ".break" entb2 ga1b2 ga2b2)
     (traos)
   )
   (princ "\nCac duong ban chon khong dung!")
 )
 (princ)
)
(defun c:CVTL ()
 (princ "\nOffset (Poly)Line thanh tuong lech © CADViet.com")
 (setq
   sel	(entsel "\nChon doi tuong can offset: ")
   ent	(car sel)
   pg	(cadr sel)
   p	(getpoint "\nPhia de offset: ")
   gt1	(getdist pg "\nNhap khoang cach offset: ")
   gt2	(getdist "\nNhap be day tuong: ")
   gt2	(+ gt2 gt1)
 )
 (luuos)
 (setvar "osmode" 0)
 (command ".offset" gt1 sel p "")
 (command ".offset" gt2 sel p "")
 (command ".erase" sel "")
 (traos)
 (princ)
)
(vl-load-com)
(princ "\nLisp xu ly tuong © CADViet.com")
(princ)

  • 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
Jin vẽ mặt bằng kết cấu, các tầng giống nhau nên copy lên rồi sửa text theo tầng rất mệt. Jin muốn có một lisp để edit một text với yêu cầu:

- Chọn text

- Nhập số tầng

 

Chẳng hạn: có sẵn một text là D2-16 (22x50)

Thì số 2 ở đây là tầng 2, bây giờ Jin muốn một lisp cho phép chọn text trên, nhập tên tầng là 3, thì text mới sẽ thành: D3-16(22x50), nhập tầng là 13 thì text sẽ thành: D13-16(22x50)

 

Bạn dùng lệnh find trong cad, sẽ làm được việc bạn yêu cầu :s_dead:

Khi muốn chuyển toàn bộ D2 thành D.. thì bạn chọn lệnh Find, sau đó nhập D2 vào dòng bên trên D... vào dòng dưới, rồi chọn vùng của bản vẽ muốn chuyển. Sau đó ấn Repleace All. Thế là Ok :ph34r:

 

@NguyenHoanh mình đã sử dụng được cái lisp bạn viết. 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×