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

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

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

Tức là có thể quét một số lượng block A để nó biến thành block B mà điểm insert của B thay vào trùng điểm insert của A cũ. nhưng không thay toàn bộ các block A trong bản vẽ. Giống như lệnh replace block trong thanh công cụ express. Link mình tự up nè: http://www.mediafire.com/?7vbjaoc1hagquao

Các bác bro xem có giúp đc mình ko với??

Nghe bạn tả thì bạn dùng tạm cái này.

(defun c:mb1(/ en)
(if  
(and (setq en (car (entsel "\n Block goc :")))(=(cdadr (entget en)) "INSERT"))
(progn 
(setq blk (acet-dxf 2 (entget en)))
(prompt "\nChon cac block bi thay the :")
(foreach e  (mapcar 'entget (acet-ss-to-list (ssget '((0 . "INSERT")))))		
	(entmod (subst (cons 2 blk) (assoc 2 e) e))
)
)(prompt "Ban chon sai roi, thuc hien lai lenh nhe ^^")
))

P/S : của bác Duy kỹ hơn

  • 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

Nhờ các bác làm lisp hộ em.

Công việc cần làm như sau ạ:

- Đã có các đối tượng là các blog, hiện đang rời rạc

- Thực hiện lệnh lisp

- Chọn các đối tượng cần kết nối bằng đường polyline

Sau khi cung cấp các thông tin như:

+ khoảng cách từ đường polyline đến đối tượng

+ Góc tạo giữa đường polyline và đối tượng...

Mình sẽ được kết quả là các đối tượng sẽ được liên kết bằng đường polyline

Link đây ạ:

http://www.cadviet.com/upfiles/3/drawing1_62.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

Nhờ các bác làm lisp hộ em.

Công việc cần làm như sau ạ:

- Đã có các đối tượng là các blog, hiện đang rời rạc

- Thực hiện lệnh lisp

- Chọn các đối tượng cần kết nối bằng đường polyline

Sau khi cung cấp các thông tin như:

+ khoảng cách từ đường polyline đến đối tượng

+ Góc tạo giữa đường polyline và đối tượng...

Mình sẽ được kết quả là các đối tượng sẽ được liên kết bằng đường polyline

Link đây ạ:

http://www.cadviet.com/upfiles/3/drawing1_62.dwg

Không thực hiện được, vì mình thấy hình minh họa và lời diễn đạt của bạn không hợp nhau. Mặc dù hiểu ý, tuy nhiên yêu cầu lại quá tổng quát so với minh họa (?).

- Liên kết : theo hình bạn trình bày là gắn block vào đỉnh Pline, nhưng đỉnh như thế nào ? Theo các thứ tự 1,4,7,10,13 như hình hay toàn bộ các đỉ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

Nhờ các bác làm lisp hộ em.

Công việc cần làm như sau ạ:

- Đã có các đối tượng là các blog, hiện đang rời rạc

- Thực hiện lệnh lisp

- Chọn các đối tượng cần kết nối bằng đường polyline

Sau khi cung cấp các thông tin như:

+ khoảng cách từ đường polyline đến đối tượng

+ Góc tạo giữa đường polyline và đối tượng...

Mình sẽ được kết quả là các đối tượng sẽ được liên kết bằng đường polyline

Link đây ạ:

http://www.cadviet.com/upfiles/3/drawing1_62.dwg

Tổng quát 1 cách nông dân thì làm như sau:

-Lệnh PLB.:

+Hỏi góc xiên. Nếu thích vẽ xuống dưới thì nhập giá trị âm nhé

+Hỏi độ dài cạnh xiên.

+Chọn Block xuất phát.

+Chọn block tiếp theo... tiếp theo... tiếp theo...

Lisp sẽ vẽ pline đi qua điểm chèn của các block theo thứ tự chọn. Với mổi cặp 2 block phân đoạn pline sẽ xuất phát từ điểm chèn, xiên so với đường nối 2 block góc hỏi bên trên, dài hỏi bên trên, đi tiếp song song đường nối 2 block , xiên ngược lại góc hỏi bên trên, dài hỏi bên trên và đến điểm chèn block thứ hai.

 

(defun c:plb (/ dt la)
(command "undo" "be")

(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)

(setq gocxien (GETREAL "\nNhap gia tri goc xien:"))
(setq dodoi (GETREAL "\nNhap do dai canh xien:"))


(setq ddd (entsel "\nChon Block xuat phat"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block xuat phat"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU2 (cdr (assoc 10 DTM)))

(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU1 (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU2 DIEMCHENMAU1))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU2 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU1 gocxienvo dodoi))

(command "pline" DIEMCHENMAU2 dtg1 dtg2 DIEMCHENMAU1 "")
(setq La (entlast))


(while


(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU1 DIEMCHENMAU))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU1 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU gocxienvo dodoi))

(command "pline" DIEMCHENMAU1 dtg1 dtg2 DIEMCHENMAU "")
(setq DIEMCHENMAU1 DIEMCHENMAU)
(command "pedit" "m" "L" La "" "j" "0" "")
(setq La (entlast))
);

(setvar "osmode"luubatdiem)

(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 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

Tổng quát 1 cách nông dân thì làm như sau:

-Lệnh PLB.:

+Hỏi góc xiên. Nếu thích vẽ xuống dưới thì nhập giá trị âm nhé

+Hỏi độ dài cạnh xiên.

+Chọn Block xuất phát.

+Chọn block tiếp theo... tiếp theo... tiếp theo...

Lisp sẽ vẽ pline đi qua điểm chèn của các block theo thứ tự chọn. Với mổi cặp 2 block phân đoạn pline sẽ xuất phát từ điểm chèn, xiên so với đường nối 2 block góc hỏi bên trên, dài hỏi bên trên, đi tiếp song song đường nối 2 block , xiên ngược lại góc hỏi bên trên, dài hỏi bên trên và đến điểm chèn block thứ hai.

 

(defun c:plb (/ dt la)
(command "undo" "be")

(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)

(setq gocxien (GETREAL "\nNhap gia tri goc xien:"))
(setq dodoi (GETREAL "\nNhap do dai canh xien:"))


(setq ddd (entsel "\nChon Block xuat phat"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block xuat phat"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU2 (cdr (assoc 10 DTM)))

(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU1 (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU2 DIEMCHENMAU1))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU2 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU1 gocxienvo dodoi))

(command "pline" DIEMCHENMAU2 dtg1 dtg2 DIEMCHENMAU1 "")
(setq La (entlast))


(while


(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU1 DIEMCHENMAU))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU1 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU gocxienvo dodoi))

(command "pline" DIEMCHENMAU1 dtg1 dtg2 DIEMCHENMAU "")
(setq DIEMCHENMAU1 DIEMCHENMAU)
(command "pedit" "m" "L" La "" "j" "0" "")
(setq La (entlast))
);

(setvar "osmode"luubatdiem)

(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Tuyệt vời, đúng yêu cầu của em rồi bác ạ. Cảm ơn bác rất rất 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

(Tình hình là em cũng rất thích cái lisp của bác Duy, em chỉ không thích bác dùng chữ "nông dân".)

Tình hình là các điểm của đường Polyline (lệnh tắt là PL) chỉ vẽ được trên cùng mặt phẳng. Em muốn vẽ được đường PL mà các điểm của nó không đồng phẳng bằng lisp có được không???

Nếu được nhờ các bác viết giúp em cái lisp, em xin cảm ơn và có hậu tạ!

Thí dụ: vẽ đường PL đi qua 4 điểm không đồng phẳng (OZ khác nhau), trên 4 cạch đứng của khối hộp chữ nhật

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ình hình là em cũng rất thích cái lisp của bác Duy, em chỉ không thích bác dùng chữ nông dân.)

Tình hình là các điểm của đường Polyline (lệnh tắt là PL) chỉ vẽ được trên cùng mặt phẳng. Em muốn vẽ được đường PL mà các điểm của nó không đồng phẳng bằng lisp có được không???

Nếu được nhờ các bác viết giúp em cái lisp, em xin cảm ơn và có hậu tạ!

Thí dụ: vẽ đường PL đi qua 4 điểm không đồng phẳng (OZ khác nhau), trên 4 cạch đứng của khối hộp chữ nhật

Dùng lệnh: _3dpoly ;là vẽ được pl có đỉnh ko đồng phẳng.

  • 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

Dùng lệnh: _3dpoly ;là vẽ được pl có đỉnh ko đồng phẳng.

Hay quá thế mà em không để ý! Em không nhấn thank thêm được nữa, đành mắc lỗi Spam, mong mọi người thông cảm! Em cảm ơn bác Duy rất nhiều!

 

xanh222.jpg

  • 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ổng quát 1 cách nông dân thì làm như sau:

-Lệnh PLB.:

+Hỏi góc xiên. Nếu thích vẽ xuống dưới thì nhập giá trị âm nhé

+Hỏi độ dài cạnh xiên.

+Chọn Block xuất phát.

+Chọn block tiếp theo... tiếp theo... tiếp theo...

Lisp sẽ vẽ pline đi qua điểm chèn của các block theo thứ tự chọn. Với mổi cặp 2 block phân đoạn pline sẽ xuất phát từ điểm chèn, xiên so với đường nối 2 block góc hỏi bên trên, dài hỏi bên trên, đi tiếp song song đường nối 2 block , xiên ngược lại góc hỏi bên trên, dài hỏi bên trên và đến điểm chèn block thứ hai.

 

(defun c:plb (/ dt la)
(command "undo" "be")

(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)

(setq gocxien (GETREAL "\nNhap gia tri goc xien:"))
(setq dodoi (GETREAL "\nNhap do dai canh xien:"))


(setq ddd (entsel "\nChon Block xuat phat"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block xuat phat"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU2 (cdr (assoc 10 DTM)))

(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU1 (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU2 DIEMCHENMAU1))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU2 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU1 gocxienvo dodoi))

(command "pline" DIEMCHENMAU2 dtg1 dtg2 DIEMCHENMAU1 "")
(setq La (entlast))


(while


(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU1 DIEMCHENMAU))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU1 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU gocxienvo dodoi))

(command "pline" DIEMCHENMAU1 dtg1 dtg2 DIEMCHENMAU "")
(setq DIEMCHENMAU1 DIEMCHENMAU)
(command "pedit" "m" "L" La "" "j" "0" "")
(setq La (entlast))
);

(setvar "osmode"luubatdiem)

(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Bác Duy ơi, tình hình là lisp này đã ứng dụng rất tốt vào công việc của em. Nhưng hiện nay em đang phát sinh thêm một nhu cầu nữa. Nhờ bác nghiên cứu xem có thể giúp em được không nhé. Nhu cầu của em là: sau khi đã chọn được các block kết nối với nhau bằng đường polyline thì đến block cuối cùng sẽ hiển thị thêm một thông số nữa(có thể là bằng text hoặc mtext) đó là số block đã chọn nhân với một hệ số bất kỳ mà mình đưa ra cùng với kết quả.

Lấy ví dụ: Số block mình đã chọn là 20 block, hệ số mà mình chọn là 30W thì phần text sẽ xuất hiện thêm ở block của cùng sẽ là 20x30W=600W (Điểm đặt phần text này do mình tự chọn ạ)

Không biết yêu cầu của em có tham lam quá không. Dù sao cũng vẫn muốn nhờ bác giúp đỡ. Em cảm ơn bác trước nhiều lần ạ! :P

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


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

các pro giúp em cái

tuy autocad có lệnh LAYMRG

nhung em cần một lisp

chọn một số đuờng line mỗi line là một layer ( quét một cái chon hết )

chuyển các layer được chon đó về layer hiện thời hoặc chon tiếp một đường line chuyển thành layer line đó

chứ chon từng phát một hơi lâu voi file hang tram layer

em định ẩn những layer ko chuyển, quét một phát chuyẻn hết cho nhanh

rất mong các pro giúp đỡ

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


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

các pro giúp em cái

tuy autocad có lệnh LAYMRG

nhung em cần một lisp

chọn một số đuờng line mỗi line là một layer ( quét một cái chon hết )

chuyển các layer được chon đó về layer hiện thời hoặc chon tiếp một đường line chuyển thành layer line đó

chứ chon từng phát một hơi lâu voi file hang tram layer

em định ẩn những layer ko chuyển, quét một phát chuyẻn hết cho nhanh

rất mong các pro giúp đỡ

 

1. đánh lệnh : AI_MOLC -> pick 1 line để làm layer của đối tượng đó thành Current

2. đánh lệnh LAYCUR quét các đối tượng để chuyển những đối tượng đó vào Current layer

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. đánh lệnh : AI_MOLC -> pick 1 line để làm layer của đối tượng đó thành Current

2. đánh lệnh LAYCUR quét các đối tượng để chuyển những đối tượng đó vào Current layer

thank you pro

y em là cần chuyển một số layer sang mot layer mẫu

chứ bản vẽ to mà zoom lại quét thì giật và tồn tại một số layer không mong muốn

vd:trong block thì không thể quét hết đuợc

mong các pro giúp một lisp

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

thank you pro

y em là cần chuyển một số layer sang mot layer mẫu -> LAYMRG đã làm dc, chọn nhiều layer bằng option [NAME]

chứ bản vẽ to mà zoom lại quét thì giật và tồn tại một số layer không mong muốn -> ở trên bạn muốn quét chọn hết, bây giờ lại bảo giật dry.gif

vd:trong block thì không thể quét hết đuợc -> merged layer giải quyết dc

mong các pro giúp một lisp

bạn xem chữ màu đỏ nha!

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


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

các pro giúp em cái

tuy autocad có lệnh LAYMRG

nhung em cần một lisp

chọn một số đuờng line mỗi line là một layer ( quét một cái chon hết )

chuyển các layer được chon đó về layer hiện thời hoặc chon tiếp một đường line chuyển thành layer line đó

chứ chon từng phát một hơi lâu voi file hang tram layer

em định ẩn những layer ko chuyển, quét một phát chuyẻn hết cho nhanh

rất mong các pro giúp đỡ

Của bạn đây :

(defun c:clay(/ clay lstLay lstCmd)
(command "undo" "be")
(setq lstLay '() clay (getvar "clayer"))
(foreach ent (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget)))))
(setq lstLay (cons (vlax-get-property ent 'Layer) lstLay))
)
(defun st-list-remove-dup (lst)(if lst (cons (car lst) (st-list-remove-dup (vl-remove (car lst) (cdr lst))))))
(setq lstLay (st-list-remove-dup lstLay))
(setq lstCmd (strcat "-laymrg\r" 
				(apply 'strcat (mapcar '(lambda(x) (strcat  "N\r" x "\r")) lstLay))
				"\r"
				"N\r"
				clay
				"\rY\r"
				))
(vla-sendcommand (vla-get-activedocument(vlax-get-acad-object)) lstCmd)
(command "undo" "en")
)

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 Duy ơi, tình hình là lisp này đã ứng dụng rất tốt vào công việc của em. Nhưng hiện nay em đang phát sinh thêm một nhu cầu nữa. Nhờ bác nghiên cứu xem có thể giúp em được không nhé. Nhu cầu của em là: sau khi đã chọn được các block kết nối với nhau bằng đường polyline thì đến block cuối cùng sẽ hiển thị thêm một thông số nữa(có thể là bằng text hoặc mtext) đó là số block đã chọn nhân với một hệ số bất kỳ mà mình đưa ra cùng với kết quả.

Lấy ví dụ: Số block mình đã chọn là 20 block, hệ số mà mình chọn là 30W thì phần text sẽ xuất hiện thêm ở block của cùng sẽ là 20x30W=600W (Điểm đặt phần text này do mình tự chọn ạ)

Không biết yêu cầu của em có tham lam quá không. Dù sao cũng vẫn muốn nhờ bác giúp đỡ. Em cảm ơn bác trước nhiều lần ạ! :P

Đang bận việc nên mình viết thô thôi nhé:

-Cập nhật lại lisp.

-Tên lệnh như cũ.

+Hỏi nhập hệ số (nhập phần số thôi ko nhập phần chữ bác khác rãnh thì chỉnh giúp đoạn lọc lấy số).

+Hỏi nhập đơn vị (nhập cái chử W như của bạn hoặc chữ gì cũng được)

+Hỏi nhập độ lớn text kết quả.

+Hỏi chỉ điểm viết kết quả.

*Thực chất thì nên tối ưu và lưu các giá trị cho lần sau nhưng bạn dùng tạm đi chờ mình rãnh hoặc bác khác chỉnh nhé.

 

(defun c:plb (/ dt la)
(command "undo" "be")

(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)

(setq gocxien (GETREAL "\nNhap gia tri goc xien:"))
(setq dodoi (GETREAL "\nNhap do dai canh xien:"))


(setq ddd (entsel "\nChon Block xuat phat"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block xuat phat"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU2 (cdr (assoc 10 DTM)))
(setq solan 1)

(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU1 (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU2 DIEMCHENMAU1))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU2 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU1 gocxienvo dodoi))

(command "pline" DIEMCHENMAU2 dtg1 dtg2 DIEMCHENMAU1 "")
(setq La (entlast))
(setq solan 2)

(while


(setq ddd (entsel "\nChon Block tiep theo"))
(while
(or
  (null ddd)
  (/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block tiep theo"))
)

  (setq DT (car ddd))
  (setq DTM (entget DT))
  (setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq gocxiengoc (angle DIEMCHENMAU1 DIEMCHENMAU))
(setq gocxiendoi (* (/ gocxien 180) pi))
(setq gocxienra (+ gocxiengoc gocxiendoi))
(setq gocxienvo (+ gocxiengoc (- pi gocxiendoi)))
    (setq dtg1 (polar DIEMCHENMAU1 gocxienra dodoi))
    (setq dtg2 (polar DIEMCHENMAU gocxienvo dodoi))

(command "pline" DIEMCHENMAU1 dtg1 dtg2 DIEMCHENMAU "")
(setq DIEMCHENMAU1 DIEMCHENMAU)
(command "pedit" "m" "L" La "" "j" "0" "")
(setq La (entlast))
(setq solan (+ solan 1))
);

(setvar "osmode"luubatdiem)
(doanvietketqua)
(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun doanvietketqua ()
(command "undo" "be")
(command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)

(setq hesonhan (GETREAL "\nNhap he so bang so:"))
(setq donvinhan (getstring 5"\nDon vi bang chu : "))
(setq docaochu (getstring "\nDo lon text ket qua : "))
(setq ketquanhan (* solan hesonhan))
(setq ketquaviet (strcat (rtos solan 2 0) "x" (rtos hesonhan 2 0) donvinhan "=" (rtos ketquanhan 2 0) donvinhan))
(setq PT (getpoint "\nChon diem muon viet ket qua :"))
(command "text" "j" "r" PT docaochu "0" ketquaviet "")
(setvar "osmode"luubatdiem)
(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (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

Bác Duy ơi, tình hình là lisp này đã ứng dụng rất tốt vào công việc của em. Nhưng hiện nay em đang phát sinh thêm một nhu cầu nữa. Nhờ bác nghiên cứu xem có thể giúp em được không nhé. Nhu cầu của em là: sau khi đã chọn được các block kết nối với nhau bằng đường polyline thì đến block cuối cùng sẽ hiển thị thêm một thông số nữa(có thể là bằng text hoặc mtext) đó là số block đã chọn nhân với một hệ số bất kỳ mà mình đưa ra cùng với kết quả.

Lấy ví dụ: Số block mình đã chọn là 20 block, hệ số mà mình chọn là 30W thì phần text sẽ xuất hiện thêm ở block của cùng sẽ là 20x30W=600W (Điểm đặt phần text này do mình tự chọn ạ)

Không biết yêu cầu của em có tham lam quá không. Dù sao cũng vẫn muốn nhờ bác giúp đỡ. Em cảm ơn bác trước nhiều lần ạ! :P

Bác Duy ơi, thật ngại quá khi cứ làm phiền bác thế này. Không biết bác đã nghiên cứu phần câu hỏi trên của em chưa. Nếu chưa thì bác bỏ qua cho em nhé, cho khỏi mất thời gian. Vì em thấy nó không cần thiết phải làm thế. Nếu có thể thì bác giúp em một lisp để thực hiện công việc như thế này ạ: Sau khi mình chọn một số các đối tượng là block nhất định thì nó sẽ hiển thị thông số chính là kết quả của số block nhân với một hệ số mà mình chọn.

Em lấy vị dụ, trong một vùng mình bao các đối tượng, có thể có các block khác nhau (block B1, block B2...)nhưng mình chỉ cần lọc ra các block B1 thôi. Nếu có 10 block B1 và hệ số mà mình chọn là 30W, thì kết quả sẽ là 300W (Điểm đặt của text này cũng do mình tự chọn ạ)

Nhờ bác giúp em nhé!

(Không biết em diễn đạt thế có thoát ý không :P )

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 Duy ơi, thật ngại quá khi cứ làm phiền bác thế này. Không biết bác đã nghiên cứu phần câu hỏi trên của em chưa. Nếu chưa thì bác bỏ qua cho em nhé, cho khỏi mất thời gian. Vì em thấy nó không cần thiết phải làm thế. Nếu có thể thì bác giúp em một lisp để thực hiện công việc như thế này ạ: Sau khi mình chọn một số các đối tượng là block nhất định thì nó sẽ hiển thị thông số chính là kết quả của số block nhân với một hệ số mà mình chọn.

Em lấy vị dụ, trong một vùng mình bao các đối tượng, có thể có các block khác nhau (block B1, block B2...)nhưng mình chỉ cần lọc ra các block B1 thôi. Nếu có 10 block B1 và hệ số mà mình chọn là 30W, thì kết quả sẽ là 300W (Điểm đặt của text này cũng do mình tự chọn ạ)

Nhờ bác giúp em nhé!

(Không biết em diễn đạt thế có thoát ý không :P )

Eo, bạn nghỉ kỹ trước khi ra đề nhé <_< .

-Tên lệnh DNB (Đếm và Nhân Block).

-Chọn block mẫu cần đếm ( để lisp lấy tên).

-Chọn vùng cần đếm (lọc các lock có tên như block mẫu trong vùng chọn)

+Hỏi nhập hệ số (nhập phần số thôi ko nhập phần chữ bác khác rãnh thì chỉnh giúp đoạn lọc lấy số).

+Hỏi nhập đơn vị (nhập cái chử W như của bạn hoặc chữ gì cũng được)

+Hỏi nhập độ lớn text kết quả.

+Hỏi chỉ điểm viết kết quả.

*Thực chất thì nên tối ưu và lưu các giá trị cho lần sau nhưng bạn dùng tạm đi chờ mình rãnh hoặc bác khác chỉnh nhé.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 (Defun c:dnb ( )  
(command "undo" "be")
(command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n") 
(prompt "\nChon BLOCK mau.")
 (setq DT (car (entsel)))
 (setq DT (entget DT))
 (setq STNAME (cdr (assoc 2 DT)))
 (setq TLNAME (cdr (assoc 50 DT)))
  (Princ "\nHay chon vung can tinh:")
(setq SS (ssget  (list (cons 0 "insert")
                         (cons 2 STNAME)
                             (cons 50 TLNAME)

                   )
        ) 
)
 (if (Null ss)
 (princ "\nKhong tim thay doi tuong nao")
)
  (IF (/= NIL SS) (PROGN
(setq Sl (SSLength SS))
(setq hesonhan (GETREAL "\nNhap he so bang so:"))
(setq donvinhan (getstring 5"\nDon vi bang chu : "))
(setq docaochu (getstring "\nDo lon text ket qua : "))
(setq ketquanhan (* Sl hesonhan))
(setq PT (getpoint "\nChon diem muon viet ket qua :"))
(setq ketquaviet (strcat (rtos Sl 2 0) "x" (rtos hesonhan 2 0) donvinhan "=" (rtos ketquanhan 2 0) donvinhan))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
 (command "text" "j" "r" PT docaochu "0" ketquaviet "")
(setvar "osmode"luubatdiem)
)
)

(command "undo" "end")
(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

Eo, bạn nghỉ kỹ trước khi ra đề nhé <_< .

-Tên lệnh DNB (Đếm và Nhân Block).

-Chọn block mẫu cần đếm ( để lisp lấy tên).

-Chọn vùng cần đếm (lọc các lock có tên như block mẫu trong vùng chọn)

+Hỏi nhập hệ số (nhập phần số thôi ko nhập phần chữ bác khác rãnh thì chỉnh giúp đoạn lọc lấy số).

+Hỏi nhập đơn vị (nhập cái chử W như của bạn hoặc chữ gì cũng được)

+Hỏi nhập độ lớn text kết quả.

+Hỏi chỉ điểm viết kết quả.

*Thực chất thì nên tối ưu và lưu các giá trị cho lần sau nhưng bạn dùng tạm đi chờ mình rãnh hoặc bác khác chỉnh nhé.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 (Defun c:dnb ( )  
(command "undo" "be")
(command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n") 
(prompt "\nChon BLOCK mau.")
 (setq DT (car (entsel)))
 (setq DT (entget DT))
 (setq STNAME (cdr (assoc 2 DT)))
 (setq TLNAME (cdr (assoc 50 DT)))
  (Princ "\nHay chon vung can tinh:")
(setq SS (ssget  (list (cons 0 "insert")
                         (cons 2 STNAME)
                             (cons 50 TLNAME)

                   )
        ) 
)
 (if (Null ss)
 (princ "\nKhong tim thay doi tuong nao")
)
  (IF (/= NIL SS) (PROGN
(setq Sl (SSLength SS))
(setq hesonhan (GETREAL "\nNhap he so bang so:"))
(setq donvinhan (getstring 5"\nDon vi bang chu : "))
(setq docaochu (getstring "\nDo lon text ket qua : "))
(setq ketquanhan (* Sl hesonhan))
(setq PT (getpoint "\nChon diem muon viet ket qua :"))
(setq ketquaviet (strcat (rtos Sl 2 0) "x" (rtos hesonhan 2 0) donvinhan "=" (rtos ketquanhan 2 0) donvinhan))
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
 (command "text" "j" "r" PT docaochu "0" ketquaviet "")
(setvar "osmode"luubatdiem)
)
)

(command "undo" "end")
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Hì hì, em biết lỗi của em rồi mà. Bác bỏ quá cho em nhé, không sau em lại sợ không dám lên hỏi nữa :P

Em đã ứng dụng thử lisp bác viết hộ em rồi ạ. Rất tuyệt!

Một lần nữa xin cảm ơn bác nha :)

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

em có cái lisp của bác gia bạch thì phải

dung move rất relax mong bác nào rảnh viết thêm em cái lisp copy

em rất cám ơn

em tự sủa mà không ra trình độ còi quá

rất cám ơn bác ketxu về lisp chuyển layer em dùng rất ổn

 

(Defun C:mo (/ os xx diem1 diem2 gocve daive daichia diem3 diem4 diem5 diem6 diem7 l m dt)
(setq os (getvar "OSMODE"))
(Princ "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng: ")
(command ".undo" "be")
(setq XX (ssget))
(setq diem1 (getpoint "\n\U+0110i\U+1EC3m chu\U+1EA9n: "))
(setq diem2 (getpoint diem1 "\n\U+0110ích \U+0111\U+1EBFn: "))
(setq gocve(angle diem1 diem2))
(setq daive (distance diem1 diem2))
(setq daichia (/ daive 6))
(setq diem3 (polar diem1 gocve daichia))
(setq diem4 (polar diem3 gocve daichia))
(setq diem5 (polar diem4 gocve daichia))
(setq diem6 (polar diem5 gocve daichia))
(setq diem7 (polar diem6 gocve daichia))
(setvar "osmode" 0)
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".move" dt "" diem1 diem3)
(command ".delay" 20)
(command ".move" "previous" "" diem3 diem4)
(command ".delay" 20)
(command ".move" "previous" "" diem4 diem5)
(command ".delay" 20)
(command ".move" "previous" "" diem5 diem6)
(command ".delay" 20)
(command ".move" "previous" "" diem6 diem7)
(command ".delay" 20)
(command ".move" "previous" "" diem7 diem2)
(command ".delay" 20)
(setq L (1+ L))
)
(command ".undo" "e")
(setvar "osmode" os)
(Princ)
(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

em có cái lisp của bác gia bạch thì phải

dung move rất relax mong bác nào rảnh viết thêm em cái lisp copy

em rất cám ơn

em tự sủa mà không ra trình độ còi quá

rất cám ơn bác kietxu về lisp chuyển layer em dùng rất ổn

 

Defun C:mo (/ os xx diem1 diem2 gocve daive daichia diem3 diem4 diem5 diem6 diem7 l m dt)
(setq os (getvar "OSMODE"))
(Princ "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng: ")
(command ".undo" "be")
(setq XX (ssget))
(setq diem1 (getpoint "\n\U+0110i\U+1EC3m chu\U+1EA9n: "))
(setq diem2 (getpoint diem1 "\n\U+0110ích \U+0111\U+1EBFn: "))
(setq gocve(angle diem1 diem2))
(setq daive (distance diem1 diem2))
(setq daichia (/ daive 6))
(setq diem3 (polar diem1 gocve daichia))
(setq diem4 (polar diem3 gocve daichia))
(setq diem5 (polar diem4 gocve daichia))
(setq diem6 (polar diem5 gocve daichia))
(setq diem7 (polar diem6 gocve daichia))
(setvar "osmode" 0)
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".move" dt "" diem1 diem3)
(command ".delay" 20)
(command ".move" "previous" "" diem3 diem4)
(command ".delay" 20)
(command ".move" "previous" "" diem4 diem5)
(command ".delay" 20)
(command ".move" "previous" "" diem5 diem6)
(command ".delay" 20)
(command ".move" "previous" "" diem6 diem7)
(command ".delay" 20)
(command ".move" "previous" "" diem7 diem2)
(command ".delay" 20)
(setq L (1+ L))
)
(command ".undo" "e")
(setvar "osmode" os)
(Princ)
(Princ)
)

1. Bạn nhớ cho đoạn mã vào trong thẻ Code

2. Thanks thì bạn hãy nhấn Nút + màu xanh

3. Lisp bạn post không phải của bác gia_bach.

Bác Duy đang onl ở topic, có lẽ bác ấy sẽ sửa giúp bạn

4. Nick của mình là KETXU, không có Kiet

Thân!

  • 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. Bạn nhớ cho đoạn mã vào trong thẻ Code

2. Thanks thì bạn hãy nhấn Nút + màu xanh

3. Lisp bạn post không phải của bác gia_bach.

Bác Duy đang onl ở topic, có lẽ bác ấy sẽ sửa giúp bạn

4. Nick của mình là KETXU, không có Kiet

Thân!

Mình nhớ lúc xưa mình viết cái giống giống này cho vui (chứ nó ko có tăng mà còn giảm hiệu quả làm việc nửa). Cái này là của bác khác viết chứ không phải mình, nhưng bác ketxu tin tưởng mình cũng ra tay phát:

(Defun C:co (/ os xx diem1 diem2 gocve daive daichia diem3 diem4 diem5 diem6 diem7 l m dt)
(setq os (getvar "OSMODE"))
(Princ "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng: ")
(command ".undo" "be")
(setq XX (ssget))
(setq diem1 (getpoint "\n\U+0110i\U+1EC3m chu\U+1EA9n: "))
(setq diem2 (getpoint diem1 "\n\U+0110ích \U+0111\U+1EBFn: "))
(setq gocve(angle diem1 diem2))
(setq daive (distance diem1 diem2))
(setq daichia (/ daive 6))
(setq diem3 (polar diem1 gocve daichia))
(setq diem4 (polar diem3 gocve daichia))
(setq diem5 (polar diem4 gocve daichia))
(setq diem6 (polar diem5 gocve daichia))
(setq diem7 (polar diem6 gocve daichia))
(setvar "osmode" 0)
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".move" dt "" diem1 diem3)
(command ".delay" 20)
(command ".copy" dt "" diem3 diem1)
(command ".delay" 20)
(command ".move" "previous" "" diem3 diem4)
(command ".delay" 20)
(command ".move" "previous" "" diem4 diem5)
(command ".delay" 20)
(command ".move" "previous" "" diem5 diem6)
(command ".delay" 20)
(command ".move" "previous" "" diem6 diem7)
(command ".delay" 20)
(command ".move" "previous" "" diem7 diem2)
(command ".delay" 20)
(setq L (1+ L))
)
(command ".undo" "e")
(setvar "osmode" os)
(Princ)
(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

CHÀO CÁC ANH TRÊN DIỄN ĐÀN.

Em có cái lisp này dùng để nội suy cao độ hố ga thoát nước.(dùng trong nova sau khi đa tk đuờng đỏ)

khi dùng lệnh "DMTN" thì nó hỏi nhập chiều rộng mặt đường, chiều rộng vỉa hè, chiều cao bó vỉa nhưng lại mặc định là độ dốc mặt đường là 2%, còn độ dốc vỉa hè là -1%.

ý em là muốn nhờ các anh sửa dùm em 1 chút sao cho lisp thành lisp mở.tức là có thể nhập độ dốc mặt đường, độ dốc vỉa hè ( như với chiều rộng).để nó có thể ứng dụng cho mọi truờng hợp, chứ không phải là chỉ có 1 trường hợp như trên

em không biết đính kèm file nên up lên mediafire.

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

mong các anh giúp đõ

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

Mình nhớ lúc xưa mình viết cái giống giống này cho vui (chứ nó ko có tăng mà còn giảm hiệu quả làm việc nửa). Cái này là của bác khác viết chứ không phải mình, nhưng bác ketxu tin tưởng mình cũng ra tay phát:

(Defun C:co (/ os xx diem1 diem2 gocve daive daichia diem3 diem4 diem5 diem6 diem7 l m dt)
(setq os (getvar "OSMODE"))
(Princ "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng: ")
(command ".undo" "be")
(setq XX (ssget))
(setq diem1 (getpoint "\n\U+0110i\U+1EC3m chu\U+1EA9n: "))
(setq diem2 (getpoint diem1 "\n\U+0110ích \U+0111\U+1EBFn: "))
(setq gocve(angle diem1 diem2))
(setq daive (distance diem1 diem2))
(setq daichia (/ daive 6))
(setq diem3 (polar diem1 gocve daichia))
(setq diem4 (polar diem3 gocve daichia))
(setq diem5 (polar diem4 gocve daichia))
(setq diem6 (polar diem5 gocve daichia))
(setq diem7 (polar diem6 gocve daichia))
(setvar "osmode" 0)
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".move" dt "" diem1 diem3)
(command ".delay" 20)
(command ".copy" dt "" diem3 diem1)
(command ".delay" 20)
(command ".move" "previous" "" diem3 diem4)
(command ".delay" 20)
(command ".move" "previous" "" diem4 diem5)
(command ".delay" 20)
(command ".move" "previous" "" diem5 diem6)
(command ".delay" 20)
(command ".move" "previous" "" diem6 diem7)
(command ".delay" 20)
(command ".move" "previous" "" diem7 diem2)
(command ".delay" 20)
(setq L (1+ L))
)
(command ".undo" "e")
(setvar "osmode" os)
(Princ)
(Princ)
)

cảm ơn pro PHẠM QUỐC DUY và pro ketxu lisp dùng rất ổn

thực ra mình dùng để thư giãn lúc rổi thôi

còn lệnh copy và move vẫn la m và cc

xin loi pro ketxu về gọi sai nick

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


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

Các bác giúp em viết lisp làm công việc này thế.

 

Em gửi files kèm theo ạ.

 

http://www.yousendit.com/download/dkJvc2ZEQzczeUkwTVE9PQ

 

Các bác giúp em ạ, cái này em vẽ bằng macro ở trong ASD, nhừng cần list cad để chỉnh sửa cho nhanh

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.

×