Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

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

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

namdaica    0

Chào các bạn.Các bạn có thể cho minh xin list tinh diện tich bằng cách kich vào vùng cần chọn sau đó thay vào giá trị cần thay đổi không.

Ví dụ mình tính diện tích vùng cần chọn bị sai là 15m2 bây h mình dung list tính diện tích tính lại là 16m2 và mình muốn thay số 15m2 thành 16m2 được không các bạn.

Tương tự list tính tổng cộng các đoạn PLine và cộng thêm một giá trị bất kỳ sau đó cũng thay số cần tính vào số bị sai.

Mong các bạn giúp em.Thank all

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 viết dùm lisp cố định diện tích

 

vd có cái mb hình chữ L không hiểu có cái lisp nào cố định được diện tích pline bo ngoài mặt bằng, mà khi kéo 1 trong các điểm trên pline thì các điểm hay cạnh lân

 

cận tự động thay đổi mà vẫn giữ nguyên dt pline ban đầu. nếu chỉ định được cho phép thay đổi độ dài cạnh theo trục của nó thì tốt quá :D

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
phamngoctukts    708
nhờ các bác viết dùm lisp cố định diện tích

 

vd có cái mb hình chữ L không hiểu có cái lisp nào cố định được diện tích pline bo ngoài mặt bằng, mà khi kéo 1 trong các điểm trên pline thì các điểm hay cạnh lân

 

cận tự động thay đổi mà vẫn giữ nguyên dt pline ban đầu. nếu chỉ định được cho phép thay đổi độ dài cạnh theo trục của nó thì tốt quá :D

Híc ngày càng nhiều... yêu cầu oái oăm...

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

Nhờ các bạn viết cho mình cái lisp nay.

Yêu cầu:

- Tổng cộng các line,pline... lại vơi nhau

- Sau đó cộng thêm một giá trị bất kỳ vào tổng các đoạn thẳng đó

- Lấy kết quả đó Edit vào text đã có.

Mong các bạn giúp mình. Thank alll.

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
ketxu    2.652
Híc ngày càng nhiều... yêu cầu oái oăm...

Bác đã ngó qua cái yêu cầu cắt chân dim của dim đã oblique của e chưa ạ ^^

 

P/S : có hàm nào lấy tọa độ mouse hok các bác nhỉ? Nhìn cái status bar mà bực quá,k tài nào mần đượ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
phamngoctukts    708
Bác đã ngó qua cái yêu cầu cắt chân dim của dim đã oblique của e chưa ạ ^^

 

P/S : có hàm nào lấy tọa độ mouse hok các bác nhỉ? Nhìn cái status bar mà bực quá,k tài nào mần được ^^

Anh mới cài cad2011 trả biết cái Oblique nó ở chỗ nào để test thử nữa quê quá....Còn toạ độ mouse thì dùng grread như Bác gia_bach đã nó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
shitty    3

e là thành viên mới tham gia diễn đàn...e rất gà cad...e cung tham khao trên diễn đàn lisp về hatch : h e muốn làm thế nào ma hatch xong thi nó sẽ tự chuyển về layer ví dụ nhu "00-09hatch"...mong các cao thủ giúp e...

;;; =========================== HATCH =================================

HATCH

(defun c:H0 () (command "Bhatch" "P" "pattern" "solid"))

(defun c:Ht () (command "Bhatch" "P" "pattern" "ANSI31" "450" ""))

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
ketxu    2.652
e là thành viên mới tham gia diễn đàn...e rất gà cad...e cung tham khao trên diễn đàn lisp về hatch : h e muốn làm thế nào ma hatch xong thi nó sẽ tự chuyển về layer ví dụ nhu "00-09hatch"...mong các cao thủ giúp e...

;;; =========================== HATCH =================================

HATCH

(defun c:H0 () (command "Bhatch" "P" "pattern" "solid"))

(defun c:Ht () (command "Bhatch" "P" "pattern" "ANSI31" "450" ""))

Ý bạn là hatch bằng layer 00-09hatch, hatch xong trả về layer cũ hay hatch bằng layer hiện tại, hatch xong trả về layer 00-09hatch ??

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
ketxu    2.652
Nhờ các bạn viết cho mình cái lisp nay.

Yêu cầu:

- Tổng cộng các line,pline... lại vơi nhau

- Sau đó cộng thêm một giá trị bất kỳ vào tổng các đoạn thẳng đó

- Lấy kết quả đó Edit vào text đã có.

Mong các bạn giúp mình. Thank alll.

Của bạn đây :)

;; free lisp from cadviet.com @Bommak 
(defun add_mline ()
 (foreach e_record_sub	e_record
   (cond ((= 10 (car e_record_sub))
   (setq pt1	   (cdr e_record_sub)
	 mline_len 0.0
   )
  )
  ((= 11 (car e_record_sub))
   (setq pt2	   (cdr e_record_sub)
	 mline_len (+ mline_len (distance pt2 pt1))
	 pt1	   pt2
   )
  )
   )
 )
 (setq tot_len (+ tot_len mline_len))
 (ssdel e_name ss)
)
;;;;;;@ssg
(defun CheckObj(e MyType) (equal (cdr (assoc 0 (entget e))) MyType))
(defun WriteRes(kq / OK e data)
(setq OK nil)
(while (not OK)
(setq e (car (entsel "\tChon text ghi ket qua:")))
(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
(entmod (subst (cons 1 (rtos kq 2 2)) (assoc 1 (setq data (entget e))) data))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:tg (/ tot_len ss e_name e_record e_type)
 (setq tot_len 0.0)
 (setq ss (ssget))
 (if (null ss)
   (exit)
 )
 (while (> (sslength ss) 0)
   (setq e_name (ssname ss 0))
   (setq e_record (entget e_name))
   (setq e_type (cdr (assoc '0 e_record)))
   (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
   (command "lengthen" e_name "")
   (setq tot_len (+ tot_len (getvar "PERIMETER")))
   (ssdel e_name ss)
  )
  ((wcmatch e_type "MLINE") (add_mline))
  (e_type (ssdel e_name ss))
   )
 )
(setq tot_len (+ tot_len (getreal "\nGia tri cong them : ")))
 (writeres tot_len)
)

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
tiendaica    0
cám ơn bạn đã giúp đỡ mình nhưng lisp bạn bị lỗi hay sao đó ! mình đánh lệnh td nó thông báo ty le mình nhập 1000 nó báo lỗi! bạn xem lai giùm minh nhé

mình gửi hình lên bạn xem sao nhé!

http://www.cadviet.com/upfiles/3/untitled.gif

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
ketxu    2.652
mình gửi hình lên bạn xem sao nhé!

http://www.cadviet.com/upfiles/3/untitled.gif

"Bạn" ở đây là ai vậy bạn tiendaica ơi :)

Góp ý bạn 1 chút : mục này có rất nhiều người đọc, post bài luân phiên, bạn chỉ ngưng 1 ngày là bị trôi đi ngay.

Bài của bạn cách đây cả tuần rồi, tự nhiên bạn lên nói 1 câu thế thì những người khác không thể theo dõi được.Vậy hãy quote gốc gác hoặc chỉ rõ đích danh người bạn muốn nói đến hoặc dùng từ "Các bạn", bạn nhé :)

Theo hình bạn post thì code bị lỗi đoạn này :

(if (= (tblsearch "style" "textdh") nil)
(command "style"   "textdh"	 "vntime,vns" "0" "0.8" "10" "n" "n" "n" "")
 )
 (if (= (tblsearch "style" "text") nil)
(command "style" "text" "vntime,vns" "0" "1" "0" "n" "n" "n" "")

Do trong máy bạn hok có font vntime,vns ^^.Bạn xóa chữ đó đi và thay bằng loại font TCVN3 bạn vẫn dùng, có lẽ sẽ giải quyết đc vấn đề .Ví dụ

(if (= (tblsearch "style" "textdh") nil)
(command "style"   "textdh"	 ".vntime" "0" "0.8" "10" "n" "n" "n" "")
 )
 (if (= (tblsearch "style" "text") nil)
(command "style" "text" ".vntimeH" "0" "1" "0" "n" "n" "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
shitty    3
Ý bạn là hatch bằng layer 00-09hatch, hatch xong trả về layer cũ hay hatch bằng layer hiện tại, hatch xong trả về layer 00-09hatch ??

 

ý của em là khi mình đang vẽ bằng layer khác (vi' dụ là layer 00-01wall) ,,bình thường hatch xong thi sẽ phải chuyển từ layer 00-01wall về layer "00-09hatch"...nhưng h muốn hatch xong thi cái layer nó sẽ là layer 00-09hatch luôn...nếu được thì anh ketxu giup em thêm cái lisp là khi mình dùng lệnh dim (Như dimliagn hay dim ban kinh'..)thi đường dim cũng sẽ tự động nhảy về layer "08-dim(ví dụ thế). ..thanks u so much .!!!

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

Nhờ anh em sửa dùm em lisp này với, em download trên diễn đàn mình, hiện nay khi select two entities thì nếu trong vùng chọn có pline hay gì đó ngoài text thì báo lỗi << Error: bad DXF group: (1) >> giờ nhờ anh em sửa giúp sao cho vùng chọn có các đối tượng khác lisp cũng thực hiện được!Thank mọi người nhiều!

 

;SWAPTXT - Quickly swaps two text entities.

;

;Jeffery P Sanders

;

(defun C:SWT(/ ht eset enlist len)

(princ "\n ")(princ "\n ")

(princ "\nSelect Both Text Entities: ")

(setq eset(ssget))

(if (and (/= eset nil)(> (sslength eset) 1))

(progn

(setq en1(ssname eset 0))

(setq enlist1(entget en1))

(setq en2(ssname eset 1))

(setq enlist2(entget en2))

(princ "\n ") (princ "\n ")

(princ "\n...Please Wait....Exchanging Text...")

(setq txt1(cdr (assoc 1 enlist1)))

(setq txt2(cdr (assoc 1 enlist2)))

(setq enlist1 (subst

(cons 1 txt2)

(assoc 1 enlist1)

enlist1

)

)

(entmod enlist1)

(setq enlist2 (subst

(cons 1 txt1)

(assoc 1 enlist2)

enlist2

)

)

(entmod enlist2)

)

(princ "\nNothing Selected")

)

(princ "\n ....SWapTxt Complete.")(princ "\n ")

(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
phamngoctukts    708
Nhờ anh em sửa dùm em lisp này với, em download trên diễn đàn mình, hiện nay khi select two entities thì nếu trong vùng chọn có pline hay gì đó ngoài text thì báo lỗi << Error: bad DXF group: (1) >> giờ nhờ anh em sửa giúp sao cho vùng chọn có các đối tượng khác lisp cũng thực hiện được!Thank mọi người nhiều!

 

;SWAPTXT - Quickly swaps two text entities.

;

;Jeffery P Sanders

;

(defun C:SWT(/ ht eset enlist len)

(princ "\n ")(princ "\n ")

(princ "\nSelect Both Text Entities: ")

(setq eset(ssget))

(if (and (/= eset nil)(> (sslength eset) 1))

(progn

(setq en1(ssname eset 0))

(setq enlist1(entget en1))

(setq en2(ssname eset 1))

(setq enlist2(entget en2))

(princ "\n ") (princ "\n ")

(princ "\n...Please Wait....Exchanging Text...")

(setq txt1(cdr (assoc 1 enlist1)))

(setq txt2(cdr (assoc 1 enlist2)))

(setq enlist1 (subst

(cons 1 txt2)

(assoc 1 enlist1)

enlist1

)

)

(entmod enlist1)

(setq enlist2 (subst

(cons 1 txt1)

(assoc 1 enlist2)

enlist2

)

)

(entmod enlist2)

)

(princ "\nNothing Selected")

)

(princ "\n ....SWapTxt Complete.")(princ "\n ")

(princ)

)

bạn thay dòng này là oke

 

(setq eset(ssget)) -> (setq eset (ssget '((0 . "TEXT"))))

  • 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
ketxu    2.652
ý của em là khi mình đang vẽ bằng layer khác (vi' dụ là layer 00-01wall) ,,bình thường hatch xong thi sẽ phải chuyển từ layer 00-01wall về layer "00-09hatch"...nhưng h muốn hatch xong thi cái layer nó sẽ là layer 00-09hatch luôn...nếu được thì anh ketxu giup em thêm cái lisp là khi mình dùng lệnh dim (Như dimliagn hay dim ban kinh'..)thi đường dim cũng sẽ tự động nhảy về layer "08-dim(ví dụ thế). ..thanks u so much .!!!

Bình thường trước khi thao tác đã chuyển rồi bạn ạ.Cái này đã có trên 4room,chắc bạn chưa tìm hoặc tìm không thấy, mình post lại giúp bạn đây

Dim : mình đang đặt lệnh tắt là

d:dimliner

dc:dimcontinue

da:dimalign

qd:quick dim

dg :dimanguala

Layer : 08-dim

;frê líp from cadviet.com @ gia_bach
(defun c:d() (VeDim "d"))
(defun c:dc() (VeDim "dc"))
(defun c:da() (VeDim "da"))
(defun c:qd() (VeDim "qd"))
(defun c:dg() (Vedim "dg"))
(defun VeDim(input / ov vl)
(defun *error* (msg)
(if ov (mapcar 'setvar vl ov)); reset Sys Vars
(if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
(princ (strcat "\n** Error: " msg " **")))
(princ))

(setq vl '("clayer" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(setvar "cmdecho" 0) 
(if (tblsearch "layer" "08-dim")
(setvar "clayer" "08-dim")
(command "-layer" "M" "08-dim" "" ) )
(setvar "cmdecho" 1)
(cond
((= input "d")(command "_dimlinear"))
((= input "da")(command "_dimaligned"))
((= input "dc")(command "_dimcontinue"))
((= input "dg")(command "_dimangular"))
((= input "qd")(command "qdim"))
)
(while (= (getvar "CMDACTIVE") 1) (command pause))
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)
;;;;;;;
;;;;;;;

Hatch thì mình để là 00-09hatch, bạn cứ tự sửa theo ý bạn nhé

;;;;;;;Hatch lay gia tri mac dinh
;;;;;;;;;;;;;;;;sau do tra ve layer hien hanh
;free lisp from cadviet.com @ Tue_NV
(defun c:h(/ ov vl)
(setvar "hpname" "ansi31") 
  (setq vl '("clayer" "cmdecho"); Sys Var list
    ov (mapcar 'getvar vl)); Get Old values
  (setvar "cmdecho" 1) 
  (if (tblsearch "layer" "00-09hatch")
    (setvar "CLAYER" "00-09hatch")
    (command "-layer" "M" "00-09hatch" "" ) )
  (initdia)
  (command "hatch")
  (while (    (command pause)
  ) 
  (vl-cmdf "change" "L" "" "P" "LA" "00-09hatch" "")
  (mapcar 'setvar vl ov); reset Sys Vars
  (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
lehuwng    0

Thưa các bro là em đang làm 1 file quy hoạch quy mô 300ha, làm chi tiết 1/500 trong đó có 1 công việc khá là thủ công. Thứ 2 này em phải giao rồi mà giờ vẫn chưa có biện pháp nào giải quyết vấn đề này: Vát góc (chamfer) đường thẳng- đường cong, đường cong - đường cong (Có thể là line hay pline).

Nhờ các bro viết giùm cái lisp thực hiện được như lệnh chamfer nhưng có thể áp dụng cho đường cong đc ko ạ.

chân thành cảm ơn các bro đã đọc và quan tâm 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
ketxu    2.652

Bạn hãy post file dwg có diễn tả trước và sau khi dùng lisp xem sao?? Vì mình chưa hiểu chamfer cho đường cong là nó chamfer thế nào, với lại cũng chưa thấy đường cong nào là Line 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
duy782006    1.374

Mình nhờ mọi người viết giúp đoạn lisp sau:

-Hỏi chọn tập hợp text.

-Hỏi chọn các text đánh dấu. (các text này nằm trong tập hợp trên).

-Chuyễn toàn bộ tập hợp trên sang layer2, các text đánh dấu sang layer3.

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
Tue_NV    3.841
Mình nhờ mọi người viết giúp đoạn lisp sau:

-Hỏi chọn tập hợp text.

-Hỏi chọn các text đánh dấu. (các text này nằm trong tập hợp trên).

-Chuyễn toàn bộ tập hợp trên sang layer2, các text đánh dấu sang layer3.

Tue_NV nghĩ rằng anh Duy có thể tự xây dựng code này được

1. Chọn tập hợp text -> Dùng hàm ssget (Gọi là tập ss1) -> Chuyển tập ss1 sang layer2

2. Chọn các text đánh dấu -> Dùng hàm ssget để chọn (Gọi là tập ss2)

3. Convert ss2 thành List ename (Gọi là List L)

4. Sử dụng hàm ssmemb kiểm tra từng phần tử trong list L có thuộc ss1 hay không?

+ Nếu phần tử trong list L thuộc ss1 thì chuyển nó sang layer3.

  • 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
Tue_NV    3.841
Bình thường trước khi thao tác đã chuyển rồi bạn ạ.Cái này đã có trên 4room,chắc bạn chưa tìm hoặc tìm không thấy, mình post lại giúp bạn đây

Dim : mình đang đặt lệnh tắt là

 

Layer : 08-dim

;free lisp from cadviet.com @ ....(srr vi e quen tac gia, hinh nhu bac bach)
;CAC LENH VE DIMENSION, tra ve layer hien hanh

(defun c:d() (VeDim "d"))
(defun c:dc() (VeDim "dc"))
(defun c:da() (VeDim "da"))
(defun c:qd() (VeDim "qd"))
(defun c:dg() (Vedim "dg")
(defun VeDim(input / ov vl)
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)); reset Sys Vars
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))

 (setq vl '("clayer" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl))  ; Get Old values
 (setvar "cmdecho" 0) 
 (if (tblsearch "layer" "08-dim")
   (setvar "clayer" "08-dim")
   (command "-layer" "M" "08-dim" "" ) )
 (setvar "cmdecho" 1)
 (cond
   ((= input "d")(command "_dimlinear"))
   ((= input "da")(command "_dimaligned"))
   ((= input "dc")(command "_dimcontinue"))
   ((= input "dg")(command "_dimangular"))
  ((= input "qd")(command "qdim"))
   )
 (while (= (getvar "CMDACTIVE") 1) (command pause))
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (princ)
 )
;;;;;;;

Hatch thì mình để là 00-09hatch, bạn cứ tự sửa theo ý bạn nhé

;;;;;;;Hatch lay gia tri mac dinh
;;;;;;;;;;;;;;;;sau do tra ve layer hien hanh
;free lisp from cadviet.com @ ...(srr vi e quen tac gia)
(defun c:h(/ ov vl)
(setvar "hpname" "ansi31") 
  (setq vl '("clayer" "cmdecho"); Sys Var list
    ov (mapcar 'getvar vl)); Get Old values
  (setvar "cmdecho" 1) 
  (if (tblsearch "layer" "00-09hatch")
    (setvar "CLAYER" "00-09hatch")
    (command "-layer" "M" "00-09hatch" "" ) )
  (initdia)
  (command "hatch")
  (while (    (command pause)
  ) 
  (vl-cmdf "change" "L" "" "P" "LA" "00-09hatch" "")
  (mapcar 'setvar vl ov); reset Sys Vars
  (princ)
  )

Tác giả của Code đầu là của anh gia bach

Code thứ 2 là của Tue_NV

 

2 code trên có thể sử dụng Reactor để quản lý

Các bạn đọc thêm bài viết này nhé :

Ứng dụng REACTOR trong quản lý bản vẽ theo 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
ketxu    2.652
Tue_NV nghĩ rằng anh Duy có thể tự xây dựng code này được

1. Chọn tập hợp text -> Dùng hàm ssget (Gọi là tập ss1) -> Chuyển tập ss1 sang layer2

2. Chọn các text đánh dấu -> Dùng hàm ssget để chọn (Gọi là tập ss2)

3. Convert ss2 thành List ename (Gọi là List L)

4. Sử dụng hàm ssmemb kiểm tra từng phần tử trong list L có thuộc ss1 hay không?

+ Nếu phần tử trong list L thuộc ss1 thì chuyển nó sang layer3.

Ơ, em thấy bác Duy nói ngay từ đầu là chọn ss2 thuộc ss1 rồi đấy thây ạ ? Bước 3,4 có phải là để tổng quát trong trườg hợp ngơời dùng chọn ra cả ngoài k ạ ?

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
Tue_NV    3.841
Ơ, em thấy bác Duy nói ngay từ đầu là chọn ss2 thuộc ss1 rồi đấy thây ạ ? Bước 3,4 có phải là để tổng quát trong trườg hợp ngơời dùng chọn ra cả ngoài k ạ ?

đúng rồi. Để chắc chắn rằng các phần tử ename của ss2 luôn thuộc tập chọn ss1

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
gia_bach    1.442
Mình nhờ mọi người viết giúp đoạn lisp sau:

-Hỏi chọn tập hợp text.

-Hỏi chọn các text đánh dấu. (các text này nằm trong tập hợp trên).

-Chuyễn toàn bộ tập hợp trên sang layer2, các text đánh dấu sang layer3.

Tue_NV nghĩ rằng anh Duy có thể tự xây dựng code này được

1. Chọn tập hợp text -> Dùng hàm ssget (Gọi là tập ss1) -> Chuyển tập ss1 sang layer2

2. Chọn các text đánh dấu -> Dùng hàm ssget để chọn (Gọi là tập ss2)

3. Convert ss2 thành List ename (Gọi là List L)

4. Sử dụng hàm ssmemb kiểm tra từng phần tử trong list L có thuộc ss1 hay không?

+ Nếu phần tử trong list L thuộc ss1 thì chuyển nó sang layer3.

Mình hiểu ý của duy782006 là :

1-Hỏi chọn tập hợp text.

2-Hỏi chọn các text đánh dấu. (các text này nằm trong tập hợp trên).

3-Chuyễn các text đánh dấu sang layer3 và các ph/tử còn lại của buớc 1 sang layer2,

 

Gọi ss1 là tập hợp chọn ở buớc 1

Gọi ss2 là tập hợp chọn ở buớc 2

Duyệt qua các ent của ss2 :

- nếu ent thuộc ss1 (ssmemb ent ss1):

+ chuyển ent qua layer3

+ xóa ent này khỏi tập ss1 (ssdel ent ss1)

Sau đó chuyển các ph/tử của ss1 sang layer2 (ss1 hiện giờ đã xóa các p/tử thuộc ss2).

 

PS: thao tác của Tue_NV cũng cho cùng kết quả, nhưng có 1 vài đối tuợng bị "chuyển nhà" 2 lần.

Chỉnh sửa theo gia_bach
  • 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
shitty    3
Bình thường trước khi thao tác đã chuyển rồi bạn ạ.Cái này đã có trên 4room,chắc bạn chưa tìm hoặc tìm không thấy, mình post lại giúp bạn đây

Dim : mình đang đặt lệnh tắt là

 

Layer : 08-dim

;free lisp from cadviet.com @ ....(srr vi e quen tac gia, hinh nhu bac bach)
;CAC LENH VE DIMENSION, tra ve layer hien hanh

(defun c:d() (VeDim "d"))
(defun c:dc() (VeDim "dc"))
(defun c:da() (VeDim "da"))
(defun c:qd() (VeDim "qd"))
(defun c:dg() (Vedim "dg")
(defun VeDim(input / ov vl)
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov)); reset Sys Vars
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))

 (setq vl '("clayer" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl))  ; Get Old values
 (setvar "cmdecho" 0) 
 (if (tblsearch "layer" "08-dim")
   (setvar "clayer" "08-dim")
   (command "-layer" "M" "08-dim" "" ) )
 (setvar "cmdecho" 1)
 (cond
   ((= input "d")(command "_dimlinear"))
   ((= input "da")(command "_dimaligned"))
   ((= input "dc")(command "_dimcontinue"))
   ((= input "dg")(command "_dimangular"))
  ((= input "qd")(command "qdim"))
   )
 (while (= (getvar "CMDACTIVE") 1) (command pause))
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (princ)
 )
;;;;;;;

Hatch thì mình để là 00-09hatch, bạn cứ tự sửa theo ý bạn nhé

;;;;;;;Hatch lay gia tri mac dinh
;;;;;;;;;;;;;;;;sau do tra ve layer hien hanh
;free lisp from cadviet.com @ ...(srr vi e quen tac gia)
(defun c:h(/ ov vl)
(setvar "hpname" "ansi31") 
  (setq vl '("clayer" "cmdecho"); Sys Var list
    ov (mapcar 'getvar vl)); Get Old values
  (setvar "cmdecho" 1) 
  (if (tblsearch "layer" "00-09hatch")
    (setvar "CLAYER" "00-09hatch")
    (command "-layer" "M" "00-09hatch" "" ) )
  (initdia)
  (command "hatch")
  (while (< 0 (getvar "CMDACTIVE"))
    (command pause)
  ) 
  (vl-cmdf "change" "L" "" "P" "LA" "00-09hatch" "")
  (mapcar 'setvar vl ov); reset Sys Vars
  (princ)
  )

 

 

thanks bác ketxu nhiu ...nhưng e muốn dùng hatch qua lisp như sau:

;;; =========================== HATCH =================================

HATCH

(defun c:H0 () (command "Bhatch" "P" "pattern" "solid"))

(defun c:Ht () (command "Bhatch" "P" "pattern" "ANSI31" "300" ""))

(defun c:Hb () (command "Bhatch" "P" "pattern" "dang-01" "30" ""))

sau khi đánh lệnh hatch tường ht thì hatch sẽ tự động chuyển về layer 00-09hatch...mong bác sửa giùm e với ...Và cái lisp chuyển về layer dim hình như hok dùng dc bác ơi...e đánh lệnh d thi no chẳng hiện ra cái chi chi :).

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.

×