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ị

Hề hề hề,

Bác Nam gọi có tớ trả lời.

Thực tình là mình đã đọc và cũng thực tình là không hiểu hết cái ý của bạn muốn.

Bạn đừng cười vì với chuyên môn của bạn mình là dân ngoại đạo. Và do đó trừ phi bạn giải thích rõ ràng cái bạn cần, bằng không thì mình có muốn giúp cũng chịu bạn ạ.

Về cái lisp của bác ThaiStreet, nếu bạn thấy đã dùng ngon thì chỉ cần bạn đọc kỹ nó và chỉnh sửa thêm thắt chút xíu thì nó sẽ thỏa mãn yêu cầu của bạn mà thôi.

Mình có biết tí chút về lisp chứ còn cái nova nô viếc thì mình điếc đặc. Do vậy bạn cằn nói rõ hơn cái yêu cầu chỉnh sửa của bạn là gì và cái lisp của bác Thaistreet đã giải quyết được đến đâu , bạn cần giải quyết thêm ở chỗ nào ??? nên có hình ảnh diễn giải kèm theo chứ mình chả hiểu đâu là cao đô thiết kế và đâu là khoảng cách thiết kế mà bạn nói đâu. Nhất là cái file của bạn lại dùng cái font chi chi đó mà mình không có nữa, nhìn vô text mà thấy toàn giun thôi bạn ạ....

Chúc bạn vui....

vâng. cám ơn bác Bình và các bác nhiều. Em cũng đoán rằng các bác ko sử dụng về nova. hic.nhưng có lẽ em sẽ tự nghiên cứu vậy, mặc dù giờ mới đang học đuợc một ít về lisp .hihi. chứ em có giải thích thì chắc cũng khó có thể làm bác hiểu để giúp em đuợc .. em rất cám ơn bác vì đã hồi âm. chúc bác luôn vui vẻ và thành công...

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


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

Chào các bác!

Hôm nay em có 2 cái lisp nhờ các bác ạ, mong các bác giúp cho.

#Lisp 1: Thay đổi số phân đoạn của 1 polyline (chủ yếu là tăng lên). Thường thì em vẽ thêm 1 pline nữa sau đó dùng lệnh PE nối lại. Rất ư là lâu ạ.

#Lisp 2: Em có hình vẽ dưới đây. bài toán của em là, làm thế nào để 1 lệnh xoay hình 1 thành hình 2 được. (Híc)

My link

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


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

Ngâm cứu nhé bạn :


(defun TAOLAYER(name color)
 (if (not (Tblsearch "Layer" name))
   (command "layer" "m" name "c" color "" "")
 )
)
(defun c:Smake(/ oldos p1 p2 p3 line pline Hatch ten)
 (command "undo" "be")
 (setq oldos (getvar "osmode"))
 (setvar "osmode" 0)
 (setvar "cmdecho" 0)
 ;;;Taolayer
 (TaoLayer "1" 2)
 (TaoLayer "2" 8)
 (TaoLayer "S13. HATCH" 1)
 ;;;Ve
 (setq p1 (getpoint "\n Diem dau tien :")
p2 (polar p1 0 800)
p3 (polar p1 0 300)
p4 (list (- (car p3) 200) (+ (cadr p3) 385) 0.0)
 )
 (command "line" p1 p2 "")
 (setq line (entlast))
 (command "pline" p3 "@-200,225" "@400,0" "C")
 (setq pline (entlast))
 (command "bhatch" "p" "S" "S" pline "" "")
 (setq Hatch (entlast))
 (command "style" "VNI" "vhelvcn.ttf" "0" "1" "0" "n" "n")
 (command "ATTDEF" "" "cos" "cos :" "%%p0.000" "S" "VNI" p4 "250" "0")
 (setq att (entlast))

(command "copybase" p4 line pline att hatch "")
(command "pasteblock" p4) 
(while (and (tblsearch "Block" (setq ten (getstring "\n Nhap ten Block/ Enter: Khong dat ten")))
	    (/= ten "")
	)
	(alert "\n Ten Block da co => dat ten khac")
)

(if line (entdel line))
(if pline (entdel pline))
(if att (entdel att))
(if hatch (entdel hatch))
(if (/= ten "") (command "rename" "B" (cdr(assoc 2 (entget(entlast)))) ten))

 (setvar "osmode" oldos)
 (command "undo" "e")
 (princ)
)

Nhờ bác TUE_NV xem lại giùm e nếu e ghép 1 lisp khác sau lisp này thì lisp này không sử dụng được nó báo lỗi :too many arguments .Mong được sự giúp đỡ của bác.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

Chào bác. Tuần vừa rồi bị tai nạn giao thông nên em giờ mới lên diễn đàn và load lisp bác mới viết về dùng thử. Có thấy công việc đưọc nhanh hơn tí xiu nhưng vẫn còn mấy nhược điểm như sau:

- Khi " chọn line gốc" giả sữ đường line gốc đó là 2 đường liên tiếp ( Vì độ dốc đường này có thể thay đổi nên hai đường nối với nhau tại một điểm) thì khi chọn "line gốc " chỉ được một đưòng--> phải làm phần còn lại --> mất thêm mấy thao tac

- Chỉ dùng đưọc là line nên khi dùng em phải phá vỡ hết đối tượng và đổi thành layer "dùng được" thì nó mới nhận, mất công copy rồi dán lại vào bản gốc lần nữa--> tốn rất nhiều thời gian

Bác xem dùm em được hai vấn đề này nữa thì có lẽ lisp sẽ ok

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. Tuần vừa rồi bị tai nạn giao thông nên em giờ mới lên diễn đàn và load lisp bác mới viết về dùng thử. Có thấy công việc đưọc nhanh hơn tí xiu nhưng vẫn còn mấy nhược điểm như sau:

- Khi " chọn line gốc" giả sữ đường line gốc đó là 2 đường liên tiếp ( Vì độ dốc đường này có thể thay đổi nên hai đường nối với nhau tại một điểm) thì khi chọn "line gốc " chỉ được một đưòng--> phải làm phần còn lại --> mất thêm mấy thao tac

- Chỉ dùng đưọc là line nên khi dùng em phải phá vỡ hết đối tượng và đổi thành layer "dùng được" thì nó mới nhận, mất công copy rồi dán lại vào bản gốc lần nữa--> tốn rất nhiều thời gian

Bác xem dùm em được hai vấn đề này nữa thì có lẽ lisp sẽ ok

Chào bạn thanhblue,

Những vấn đề bạn yêu cầu hoàn toàn có thể làm được nhưng nó cần một vài điều kiện như sau:

1/- Các bản vẽ của bạn phải có cấu trúc hoàn toàn giống nhau. Các lines, layers, polylines ... phải được sử dụng cho cùng một mục đích như nhau.

2/- Bạn phải cài bộ express tools.

 

Vậy bạn có đồng ý không????

 

Lisp đó đây, bạn hãy xài thử nhé:

;; free lisp from cadviet.com
(defun DXF (code elist)
(cdr (assoc code elist))
)

(princ "\nGo lenh \"CD\" ")
(defun c:CD ( / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 atlast oslast pt0 x0 y0 ed h0 lng ln ssln sslst )
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(command "UCS" "w")

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
;(setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/")) 
;ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(setq tx1 1 
        ty1 1
)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien <end of> : ") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 15359) 
;;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
(alert "\n Chon cac duong chuan")
(setq sslg (acet-ss-to-list (ssget (list (cons 0 "*LINE") (cons 8 "7")))))
;;;;;;;;lng (car (entsel "\n Hay chon line goc"))
(alert "\n Chon cac duong can xac dinh giao diem")
(setq ssln (ssget (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
       sslst (acet-ss-to-list ssln)
)
;;;;;(While (/= pt nil)
(foreach lng sslg
(foreach ln sslst
(setq pt (car (acet-geom-intersectwith lng ln 0)))
(if pt
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0) 
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
);pro
)
);foreach
);;;foreach1
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------

 

Hy vọng bạn hài lò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

Em xin nhờ các bác trên diễn dàn chỉnh lại lisp udt này thêm phần "chọn điểm ghi cao độ" với,em đang cần ghi lại diện tích để ban A kiểm tra cho tiện,nhưng cứ phải copy text trước rồi lại edit text hơi lâu.

Em cũng mày mò thử chỉnh mà khôngđưcợc,em xin cảm ơn ạh.

My link

(defun c:udt(/ ss tong ham tmp tt hstl oldim toe frome cur dt)
(prompt "\n Kich thuoc cua chuong trinh tinh theo don vi mm ")
(if (not hstlo) (setq hstlo 0.001))
(setq hstl (getreal (strcat "\n Nhap ti le chuyen doi don vi <" (rtos hstlo 2 3) "> :")))
(if (not hstl) (setq hstl hstlo) (setq hstlo hstl))
(if (not tpo) (setq tpo 2))
(setq tp (getint (strcat "\n Nhap So chu so thap phan <" (itoa tpo) "> :")))
(if (not tp) (setq tp tpo) (setq tpo tp))
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0) 
(prompt "\n Chon doi tuong de tinh dien tich hay Enter de tinh dien tich theo Pick diem ")
(setq
ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>"))) 
tong 0.0
ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
tmp (mapcar 'ham (ss2ent ss)) 
)

(if (not ss) (progn
(setq tong 0.0 ss (ssadd))
(while (setq p (getpoint "\n Pick vao vung tinh dien tich :"))
(setq frome (entlast))
(command ".boundary" p "")
(setq toe (entlast))

(setq cur frome)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq dt (getvar "area"))
(setq tong (+ tong dt))
)
(command "area" "A" "O" "L" "" "")
(setq dt (getvar "area"))
(setq tong (+ tong (* dt 2))) 
(sssetfirst ss ss)
)
(command "erase" ss "")
))


(setq tt (entget (car (entsel "\nChon text ket qua: ")))
tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
)
(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 tp)) (assoc 1 tt) tt))

(setvar "Dimzin" oldim)


(princ)
)
;
(defun ss2ent(ss / sodt index lstent)
(setq 
sodt (if ss (sslength ss) 0) 
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com)

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 xin nhờ các bác trên diễn dàn chỉnh lại lisp udt này thêm phần "chọn điểm ghi cao độ" với,em đang cần ghi lại diện tích để ban A kiểm tra cho tiện,nhưng cứ phải copy text trước rồi lại edit text hơi lâu.

Em cũng mày mò thử chỉnh mà khôngđưcợc,em xin cảm ơn ạh.

 

Hề hề hề,

Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???

Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới đượ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

Hề hề hề,

Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???

Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới được.

Chắc ý bạn đó là chọn diểm ghi diện tích đó bác

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


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

Chào bạn thanhblue,

Những vấn đề bạn yêu cầu hoàn toàn có thể làm được nhưng nó cần một vài điều kiện như sau:

1/- Các bản vẽ của bạn phải có cấu trúc hoàn toàn giống nhau. Các lines, layers, polylines ... phải được sử dụng cho cùng một mục đích như nhau.

2/- Bạn phải cài bộ express tools.

 

Vậy bạn có đồng ý không????

 

Lisp đó đây, bạn hãy xài thử nhé:

;; free lisp from cadviet.com
(defun DXF (code elist)
(cdr (assoc code elist))
)

(princ "\nGo lenh \"CD\" ")
(defun c:CD ( / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 atlast oslast pt0 x0 y0 ed h0 lng ln ssln sslst )
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(command "UCS" "w")

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
;(setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/")) 
;ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(setq tx1 1 
        ty1 1
)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien <end of> : ") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 15359) 
;;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
(alert "\n Chon cac duong chuan")
(setq sslg (acet-ss-to-list (ssget (list (cons 0 "*LINE") (cons 8 "7")))))
;;;;;;;;lng (car (entsel "\n Hay chon line goc"))
(alert "\n Chon cac duong can xac dinh giao diem")
(setq ssln (ssget (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
       sslst (acet-ss-to-list ssln)
)
;;;;;(While (/= pt nil)
(foreach lng sslg
(foreach ln sslst
(setq pt (car (acet-geom-intersectwith lng ln 0)))
(if pt
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0) 
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
);pro
)
);foreach
);;;foreach1
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------

 

Hy vọng bạn hài lòng.

Rất cảm ơn bác Bình đã giứp đỡ, em xài lisp này ok với bản vẽ của mình rồi nhưng tiếc cái là không xài được với những bản khác. Thank bác 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

Rất cảm ơn bác Bình đã giứp đỡ, em xài lisp này ok với bản vẽ của mình rồi nhưng tiếc cái là không xài được với những bản khác. Thank bác rất nhiều!!!

Hề hề hề,

Rất vui vì đã giúp được bạn tí ti trong công việc.

Nếu bạn chịu khó đọc và làm theo các hướng dẫn sau đây của mình, mình sẽ vui hơn nhiều.

1/- Mở cái lisp mình gửi và đọc kỹ nó.

2/- Hãy chú ý tới những vấn đề sau:

- Khi lisp yêu cầu "Chon cac duong chuan" bạn phải chọn các đường chuẩn mà bạn muốn ghi cao độ lên. Ở đây mình dùng bộ lọc (list (cons 0 "*LINE") (cons 8 "7")) là do trên file bạn gửi, các line hay polyline này đều nằm trên lớp "7". Bây giờ nếu bạn có file khác mà các line này không nằm trên lớp 7 thì bạn sẽ không chọn được nó. Do vậy bạn phải thay đổi chút xíu cái bộ lọc này cho phù hợp với cái bản vẽ bạn có. Giả tỷ các line chuẩn của bạn nằm trên lớp "chuan" và có màu là màu vàng mà không phải là bylayer, bạn có thể dùng bộ chọn sau: (list (cons 0 "*LINE") (cons 8 "chuan")(cons 62 2)).

- Khi lisp yêu cầu "Chon cac duong can xac dinh giao diem" bạn phải chọn các đường line hay polyline mà có giao điểm với các đường chuẩn và bạn muốn ghi lại cao độ của nó. Ở đây mình dùng bộ lọc là: (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")) Ấy là do trong file bạn gửi các dường này đều nằm trên một trong các lớp "XGRIDFG","XGRID","FG_Temp","XSTA". Do vậy nếu trên bản vẽ của bạn có các line mà bạn muốn xác định giao điểm không nằm trên một trong các lớp này thì bộ chọn của bạn sẽ không đầy đủ và lisp sẽ chạy sai. Bây giờ nếu bạn có bản vẽ mà các line này nằm trên các lớp "2", "3", "5" thì bộ chọn của bạn sẽ là (list (cons 0 "*LINE") (cons 8 "2,3,5"))

- Đoạn code sau:

(if (not (tblsearch "block" "LCD1"))

(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")

(command "erase" (entlast) "")))

được dùng để kiểm tra xem block LCD1 đã có trong bản vẽ hay chưa, nếu chưa có thì sẽ nhập block này từ trong file "D:\\Lisp CAD\\BVTN.dwg".

Giả sử bạn không dùng cái block này và bạn muốn xài một cái block có tên là "EM" có sẵn trong file "C:\\Program\\Acad\\Anh.dwg" thì bạn sẽ phải sửa đoạn code trên thành:

(if (not (tblsearch "block" "Em"))

(progn (command "insert" "C:\\Program\\Acad\\Anh.dwg" 0 "" "" "")

(command "erase" (entlast) "")))

 

Với các chú ý như trên bạn hoàn toàn có thể dùng cái lisp này cho mọi bản vẽ mà bạn có và với cùng mục đích ghi cao độ tại các giao điểm với trắc ngang của bạn.

Chúc bạn vui hơn,....

Hề hề hề

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 bác!

Hôm nay em có 2 cái lisp nhờ các bác ạ, mong các bác giúp cho.

#Lisp 1: Thay đổi số phân đoạn của 1 polyline (chủ yếu là tăng lên). Thường thì em vẽ thêm 1 pline nữa sau đó dùng lệnh PE nối lại. Rất ư là lâu ạ. -> cái này là nhanh rồi, vì dùng lisp bạn vẫn phải vẽ polyline thứ 2, lisp chỉ giúp bạn nối chúng lại thôi (ko nhanh hơn bao nhiêu so với ko dùng lisp)

#Lisp 2: Em có hình vẽ dưới đây. bài toán của em là, làm thế nào để 1 lệnh xoay hình 1 thành hình 2 được. (Híc) -> Nếu bạn dùng AutoCAD 2010 trở lên bạn nghiên cứu cái Constraint của nó nha, chắc giúp bạn dc đấy, ko cần dùng lisp đâu. Goodluck!

My link

Trả lời bạn trong phần quote

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

Hok bác nào giúp em ạ? :(

Hề hề hề,

Muốn giúp bạn lắm nhưng giúp cái chi được khi bản vẽ bạn không gửi lên, póst độc có cái hình JPG thì chả ai có thể hiểu nổi các đối tượng đang có của bạn là cái chi mà giúp.

Lần sau nếu bạn thực sự muốn giúp chớ không phải là đánh đố nhau thì bạn hãy post cái bản vẽ bạn có lên và cái bản vẽ kết quả bạn muốn có thì mọi người mới giúp được bạn ạ.

hề hề hề, vài lời góp ý, trúng hay trật bạn chớ giận nhé.

chúc bạn vui.

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

Hề hề hề,

Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???

Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới được.

dạ em nhầm ah,thêm phần "chọn điểm ghi diện tích" mới đúng.

Ai giúp em với ah.

Em xin cảm ơn!

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


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

E thấy trên diễn đàn đã có lisp biến block att này block att kia,nhưng nay trong bản vẽ của e có nhiều block att khác nhau,e muốn biến block này thành block kia nhưng vẫn giữ giá trị của block.E gửi file đính kèm.Nhờ các bác xem và giúp e.Chân thành cảm ơn trước.

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

E thấy trên diễn đàn đã có lisp biến block att này block att kia,nhưng nay trong bản vẽ của e có nhiều block att khác nhau,e muốn biến block này thành block kia nhưng vẫn giữ giá trị của block.E gửi file đính kèm.Nhờ các bác xem và giúp e.Chân thành cảm ơn trước.

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

Bạn sử dụng lệnh BLOCKREPLACE (trong phụ trợ Express)

-> Sử dụng lệnh Attsync để đồng bộ Block

  • 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 bác mặc dù đã đổi hết nhưng ý e là thí dụ như trong file đính kèm e muốn thuộc tính của block 1 thành thuộc tính của block 2 nhưng chữ BC vẫn giữ nguyên,chỉ thay đổi font chữ,chiều cao,bề rộng...cho giống block 1 thôi.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

Cảm ơn bác mặc dù đã đổi hết nhưng ý e là thí dụ như trong file đính kèm e muốn thuộc tính của block 1 thành thuộc tính của block 2 nhưng chữ BC vẫn giữ nguyên,chỉ thay đổi font chữ,chiều cao,bề rộng...cho giống block 1 thôi.Thanks.

Bạn sử dụng lệnh Battman được cơ mà

Này nhé : Dùng lệnh Battman xem Style, height, width của Block A

Sau đó Style, height, width vừa xem đó gán cho Block B

-> Nhấn nút Sync -> Nhấn OK

 

Sorry bạn, nếu nhiều Block có tên khác nhau nhiều thì có thể viết Lisp. Còn nếu ít thì có thể sử dụng cách trê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

Cảm ơn bác rất nhiều,làm kiểu này thì được với 1 vài block thì được còn mình thì cần đổi nhiều block khác tên thành 1 block.Mong bác bớt chút thời gian giúp giùm e 1 đoạn 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

Trả lời bạn trong phần quote

Cảm ơn anh nhiều nhé. Em cũng đang dùng cad 2010. Vậy em nghiên cứu xem thế nào, có gì không hiểu sẽ hỏi thêm ạ.

@Phanthanhbinh: Cảm ơn anh đã góp ý, lần đầu em post bài nên chưa kinh nghiệm, em cứ nghĩ file ảnh thì nhẹ hơn file cad nên up file ảnh 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

Cảm ơn bác rất nhiều,làm kiểu này thì được với 1 vài block thì được còn mình thì cần đổi nhiều block khác tên thành 1 block.Mong bác bớt chút thời gian giúp giùm e 1 đoạn lisp.

Không bác nào giúp được e sao?Mong được sự giúp đỡ của các bác.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

Mình đã có lần sài thử bộ ACV trên diễn đàn do bác Nguyen Hoanh biên tập.

Link: http://www.cadviet.c...l_CADViet_10/4/

Mình đã test và thấy rằng có rất nhiều lệnh hữu ích. Đặc biệt thích nhất là cái lệnh matchprop block trong bộ lisp ACV đó.

Tuy nhiên do quá trình dùng sử dụng cad có một số lệnh không phù hợp với thói quen lắm nên cũng không cài hoàn toàn cả bộ ACV. Tuy nhiên mình rất muốn tách riêng được đoạn lisp matchprop block đó để sử dụng thường xuyên. Có bác nào up dùm mình đoạn đó đc ko với. Cho mình xin cảm ơn trướ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

Link đã chết + mọi người không nhớ matchprop Block nó như thế nào ?

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

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ứ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??

Mình có lisp tác dụng tương tự bạn dùng thử xem:

-MAB: Chọn block mẫu, chọn các block cần thay (tùa lua block cũng được). Thay các block cần thay thành block mẫu. Giữ nguyên điểm chèn còn tỉ lệ và góc quay thì theo block mẫu.

-MABT: Chọn block mẫu, chọn các block cần thay (tùa lua block cũng được). Thay các block cần thay thành block mẫu. Giữ nguyên điểm chèn. tỉ lệ và góc quay.

 

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

(defun c:mab ()
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))

(setq ddd (entsel "\nChon Block mau"))
(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 mau"))
)



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

(setq diemvt1 (polar DIEMCHENMAU pi donvi))
(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))
(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))
(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))
           (grdraw diemvt1 diemvt2 3)
           (grdraw diemvt3 diemvt4 3)


(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
  (setq DTs (ssname XX L))
  (setq DTMs (entget DTs))
  (setq DIEMCHEN (cdr (assoc 10 DTMs)))
  (command "ERASE" DTs "") 
(setq luubatdiem (getvar "osmode"))
 (setvar "osmode" 0)
 (command ".copy" ddd "" DIEMCHENMAU DIEMCHEN)
(setvar "osmode"luubatdiem)
  (setq L (1+ L))
)

(command ".pan" DIEMCHENMAU DIEMCHENMAU)
(command "undo" "end")

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

;-------------
(defun c:mabt ()
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))

(setq ddd (entsel "\nChon Block mau"))
(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 mau"))
)

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

(setq diemvt1 (polar DIEMCHENMAU pi donvi))
(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))
(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))
(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))
           (grdraw diemvt1 diemvt2 3)
           (grdraw diemvt3 diemvt4 3)


(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
          (setq DTs (ssname XX L))
          (setq DTMs (entget DTs))
          (setq TENKHOIM TENKHOI)
          (setq DTMs (subst (cons 2 TENKHOIM) (assoc 2 DTMs) DTMs))
          (entmod DTMs)


  (setq L (1+ L))
)

(command ".pan" DIEMCHENMAU DIEMCHENMAU)
(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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×