Đế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

#3501 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 May 2011 - 02:53 PM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3502 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 27 May 2011 - 04:53 PM

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.c...drawing1_62.dwg
  • 0

#3503 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 May 2011 - 08:25 AM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3504 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 28 May 2011 - 09:32 AM

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

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

  • 2

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3505 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 28 May 2011 - 11:14 AM

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

#3506 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 30 May 2011 - 10:52 AM

(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

  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#3507 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 30 May 2011 - 10:59 AM

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

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3508 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 30 May 2011 - 11:05 AM

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!

Hình đã gửi
  • 1

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#3509 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 31 May 2011 - 04:30 PM

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

#3510 3d.decor

3d.decor

    biết vẽ arc

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

Đã gửi 31 May 2011 - 05:07 PM

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

#3511 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 31 May 2011 - 07:55 PM

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

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#3512 3d.decor

3d.decor

    biết vẽ arc

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

Đã gửi 01 June 2011 - 08:58 AM

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

#3513 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 01 June 2011 - 09:19 AM

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 Hình đã gửi
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!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#3514 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 01 June 2011 - 09:42 AM

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

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3515 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 01 June 2011 - 09:59 AM

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

  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3516 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 01 June 2011 - 10:06 AM

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

#3517 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 01 June 2011 - 10:24 AM

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

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

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3518 tuvanthietke.hcm

tuvanthietke.hcm

    biết lệnh array

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

Đã gửi 01 June 2011 - 10:25 AM

Hôm nay mạo muộn nhờ các bạn viết hộ lisp vẽ nhanh móng đơn và móng bằng không phải lisp của speedcad hay fastcad đâu nhé.

Chỉ là modul để vẽ móng thôi nha.

Thanks all
  • 0

#3519 nhocbabi

nhocbabi

    biết vẽ rectang

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

Đã gửi 01 June 2011 - 11:06 AM

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

#3520 3d.decor

3d.decor

    biết vẽ arc

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

Đã gửi 01 June 2011 - 11:22 AM

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

  • 0