toiyeuvietnam
-
Số lượng nội dung
76 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi toiyeuvietnam
-
-
nhờ các anh giúp em làm thế nào để nhập tọa độ 1 điểm có x,y trên cad 2007 với ạ.
cad 2004 thì em nhập bằng cách gõ Line nhập tọa độ x...., y.... là được,
nhưng cad 2007 thì nhập xong x khi đánh dấu (,) để nhập y thì nó hiểu là enter (kết thúc lệnh). làm thế nào để khắc phục nhập giống như cad 2004 nhỉ?
-
bạn thử dùng cái này có được không:
(DEFUN C:DT1(/ A) (SETQ A (GETPOINT "CHON DIEM : ")) (COMMAND "BOUNDARY" A "") (COMMAND "AREA" "O" (SSGET "L")) (COMMAND "ERASE" (SSGET "L") "") (command "-style" "text" "Times New Roman" 2.5 "1" "0" "n" "n") ;;;;Muon sua Text to hay nho 2.5 ... (command "-layer" "m" "Text""c" "White" "" "") (setq e_lst (entget (tblobjname "style" (getvar 'textstyle)))) (entmod (subst (cons 50 0.261799) (setq old (assoc 50 e_lst)) e_lst)) (command "text" "j" "tl" A "" (strcat "DT: " (rtos (/ (* (GETVAR "AREA") 10) 10) 2 2) " m²")) (entmod (subst old (assoc 50 e_lst) e_lst)) (PRINC "\nDIEN TICH LA : ")(PRINC (/ (* (GETVAR "AREA") 10) 10))(PRINC" m²")(prompt "\nDA TINH XONG DIEN TICH!")(princ))
Nhờ các bác coi giúp em lỗi em sửa dòng (COMMAND "BOUNDARY" A "") thành (COMMAND "BOUNDARY" "A" "I" "N" "" "" PAUSE "" ) để nó bỏ qua không boundary đối tượng là Mtext và Dim, nhưng nó lại phải pick 2 lần mới ra diện tích, em muốn pick chuột 1 cái vào ô cần tính diện tích là hiện diện tích luôn mà không biết lỗi chỗ nào, cảm ơn các bác
-
(command "-boundary" "A" "I" "N" "" "" pause)
em đã cố gắng tìm nhiều cách nhưng vẫn chưa được. em cũng không hiểu em nói sai cái gì mà bị trừ điểm đỏ như trên thế!
-
nhờ các anh giúp thêm hàm nào đó để có thể tắt tạm thời cái "inland detection" trong tùy chọn khi tạo Boundary lúc tính diện tích để không tạo đường bao cho đối tượng Mtext và Dim với a
- 1
-
nhờ các bác coi và giúp khắc phục lỗi này với ạ
- 1
-
Bạn có thể tham khảo hai lệnh sau : lệnh DT1 dừng lại cho bạn xem đường bao, lệnh DT2 không dừng lại.
Đây là lệnh tạo đường bao theo cơ chế của AutoCAD. Các đối tượng tạo đường bao phải nằm trọn trong màn hình và tương đối đơn giản.
Đối với hình phức tạp hay nằm ngoài màn hình như tuyến thủy hệ, giao thông chằng chịt, lệnh này không tốt lắm.
;Ham tinh dien tich bang lenh bpoly
(defun tinhdtich( p / name)
(setq name (entlast))
(command "Bpoly" p "\\");
(if (null (equal name (entlast)))
(progn
(command "area" "O" "l")
(command "_.erase" "l" "")
(getvar "area")
)
(PROGN
(alert "Khong khep")
NIL
)
)
)
(defun C:DT1()
(SETQ P (GETPOINT "\nPICK"))
(IF P (TINHDTICH P))
)
(defun C:DT2( / old)
(setq old (getvar "osmode"))
(bpoly (getpoint "\nPick"))
(setvar "osmode" old)
(command "_area" "o" "l")
(entdel (entlast))
(rtos (getvar "area") 2 1)
)
- Nhờ các bác sửa giúp em cho đường bao khu vực cần tính diện tích có màu xanh.
- sửa lỗi để không tạo đường bao quanh với đối tượng là Mtext và Dim (vì nó cứ để lại đường bao sau khi tính xong và lại phải xóa đi mất công quá)
-
lisp này muốn dùng cho cả line thì làm thế nào các anh nhỉ?
-
oh, tuyệt vời quá anh Ket ạ mặc dù có 1 vài số thứ tự chưa được vào tâm nhưng như vậy cùng là tốt rồi. cảm ơn anh rất nhiều!
-
Nhờ các bác viết giúp em cái lisp đánh số thứ tự từ trái qua phải hoặc từ phải qua trái vào giữa đối tượng Closed Poline như hình vẽ minh họa và file đính kèm dưới đây:
http://www.cadviet.com/upfiles/3/89068_ban_ve.dwg
-
Load lisp bang lenh
trong AutoLisp
Oh, vậy là bó tay nhỉ
-
Load lisp bang lenh
trong AutoLisp
còn nếu là file .fas thì làm thế nào anh tot nhỉ?
-
Load lisp bang lenh
trong AutoLisp
các bác ơi, cho em hỏi chút là load thì dùng (Load "C:\\Load \\tong.lsp") vậy unload lisp trên bản vẽ đang làm thì dùng hàm gì ạ?
-
các anh ơi, nhò các anh giúp sủa doạn đoạn code Layoff dưới đây, dể pick đối tượng Layer nào thì đối tượng đó tắt ngay mà không phải Enter sau khi chon đối tượng giống như Freeze đấy!
;;; ============================ Layer OFF =================================
(DEFUN LAYOFF (/ SSET SSL ENT LAY I MODE)
(setvar "cmdecho" 0)
(prompt "\nTuan Giap hay chon doi tuong tren layer(s) muon OFF: ")
(SETQ SSET (SSGET))
(IF (/= NIL SSET) (PROGN (SETQ SSL (SSLENGTH SSET)) (SETQ LAY "") (SETQ I 0) (SETQ MODE 0)
(WHILE (< I SSL) (SETQ ENT (ENTGET (SSNAME SSET I)))
(IF (= (CDR (ASSOC '8 ENT)) (GETVAR "CLAYER")) (SETQ MODE 1) )
(SETQ LAY (STRCAT LAY "," (CDR (ASSOC '8 ENT)) )) (SETQ I (+ I 1)))
(COMMAND "LAYER" "OFF" LAY "")
(IF (= MODE 1) (COMMAND ""))))
(setq Loff6 Loff5) (setq Loff5 Loff4) (setq Loff4 Loff3) (setq Loff3 Loff2) (setq Loff2 Loff1) (setq Loff1 LAY)
(princ (strcat "\n Layer : " LAY " da OFF.")) (setvar "cmdecho" 1) (princ))(defun c:LAYOFF () (layoff))
(defun c:LO () (layoff)) -
oh, cảm ơn Tot77 nhiều nhé, làm rất ổn!
-
Bạn dùng cái này. Sau khi copy xong nếu bạn dùng lệnh khác mà có select objects thì có thể đánh chữ "P" để lấy các đối tượng cuối cùng.
(defun c:cpy(/ ss pt hg os el en) (prompt "\nChon cac doi tuong de copy:") (setq ss (ssget) pt (getpoint "\nDiem goc:") hg (getangle pt "\nTheo huong:") os (getvar 'osmode)) (setvar 'osmode 0) (while (setq kc (getreal "\nKhoang cach:")) (setq el (entlast)) (command "copy" ss "" pt (polar pt hg kc)) (setq ss (ssadd)) (while (setq en (entnext el)) (ssadd en ss) (setq el en)) ) (command "select" ss "") (setvar 'osmode os) (princ) )
Tot77 ơi, cái này bạn có thể thêm chức năng lưu biến khoảng cách được không? cảm ỏn nhiều
-
Đây nè, cho các bác bộ mã nguồn luôn
Về nghiên cứu thêm nhé
(defun c:batter () (setvar "CMDECHO" 0) (setq osmode (getvar "osmode")) (setvar "osmode" 0) (setvar "unitmode" 0) (setvar "dimzin" 0) (setvar "blipmode" 0) (setvar "aunits" 0) (setvar "angbase" (/ pi 2)) (setvar "angdir" 1) (if (not lint) (setq lint 10.0) ) (setq int (getdist (strcat "\nInterval <" (rtos lint 2 3) ">: "))) (if int (setq lint int) (setq int lint) ) (command "line" (list 0.0 0.0) (list 0.0 0.0001) "") (if (tblsearch "block" "tadtick") (command "block" "tadtick" "y" (list 0.0 0.0) (entlast) "") (command "block" "tadtick" (list 0.0 0.0) (entlast) "") ) (while (setq refent (entsel "\nSelect reference line: ")) (command "undo" "group") (redraw (car refent) 3) (initget 1 "Cut Fill") (setq reply (getkword "\n[C]ut or [F]ill batter: ")) (setq s (ssget)) (command "measure" refent "b" "tadtick" "y" int) (setq p (ssget "p") cn 0 ) (if s (progn (while (< cn (sslength p))(setq en (entget (ssname p cn))p0 (cdr (assoc 10 en))pt1 p0pt2 nilb (cdr (assoc 50 en)))(entdel (ssname p cn))(setq p1 (polar p0 (+ (/ pi 2) b ) 0.0001)) (command "line" p0 p1 "") (command "extend" s "" (list (entlast) p1) "") (setq xent (entget (entlast))) (setq xdist (distance (cdr (assoc 10 xent)) (cdr (assoc 11 xent))) ) (if (not (equal xdist 0.0001 0.0001)) (setq pt2 (cdr (assoc 11 xent))) (progn (command "extend" s "" (list (entlast) p0) "") (setq xent (entget (entlast))) (setq xdist (distance (cdr (assoc 10 xent)) (cdr (assoc 11 xent)) ) ) (if (not (equal xdist 0.0001 0.0001)) (setq pt2 (cdr (assoc 10 xent))) ) ) ) (entdel (entlast)) (if pt2 (if (= reply "Fill") (if (= (rem cn 2) 0) (command "line" pt1 pt2 "") (command "line" pt1 (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2)) "" ) ) (if (= (rem cn 2) 0) (command "line" pt2 pt1 "") (command "line" pt2 (polar pt2 (angle pt2 pt1) (/ (distance pt2 pt1) 2)) "" ) ) ) ) (setq cn (1+ cn)) ) ) ) (command "undo" "en") ) (setvar "blipmode" 1) (setvar "osmode" osmode) (princ))
==========================================
Nhờ các bác giúp em sửa cái lisp này với:
Yêu cầu:
- gõ BATTER
- chọn đối tượng cần vẽ Taluy (có thể chọn nhiều đối tượng vẽ Taluy 1 lúc)
- pick phía cần dải Taluy
- chọn đối tượng chân Taluy
- xong!
-
cảm ơn anh tainguyen79 rất nhiều! bây giờ đỡ phải vẽ Pline và vẽ lại tâm nữa rồi. à có thể sửa được để chỉ cần chọn 2 mép bên đường (bằng đường Pline) là vẽ luôn cho mình tim không nhỉ?
-
em ké 1 tí nhí vì chủ đề gần giống vậy!
các anh ơi cho em hỏi tí là có lisp nào có thể vẽ đường tim đường giựa trên cơ sở ta chọn 2 mép đường (có thể là Line hoặc Pline) của 2 bên đường, để xác định tâm giữa và vẽ tim đường luôn không nhỉ?
-
cảm ơn anh ketxu, đã giải quyết được vấn đề này bằng 1 cách thật đơn giản
-
Anh ơi cho cái đoạn này vào chỗ nào được anh nhỉ?
(setvar 'CELTSCALE)
-
cảm ơn anh Ket, gõ lệnh đó như vậy đúng là ổn rồi. em gộp cái CELTSCALE vào trong cái DUONG thì nó báo lỗi ; error: no function definition: C:CELTSCALE (không có định nghĩa chức năng: C: CELTSCALE). em gộp như vậy sai chỗ nào ảnh nhỉ?
(defun C:LDD() (c:CELTSCALE ) (c:DUONG) ) (defun c:DUONG (/ *error* old_lay) (defun *error* (msg) (setvar "clayer" old_lay) (princ)) (setq old_lay (getvar "clayer")) (command "_.layer" "_m" "DUONG DI" "_c" "1" "" "L" "Hidden" "" "LW" "0.3" "" "")
(setvar "osmode" (+ 1 2 8 32 128))
(command "_.LINE") (princ))
-
cảm ơn 2 anh quan va anh ha, có lẽ ngoài phương pháp MA ra thì không còn phương pháp nào thay đổi cho riêng nét đó nữa rồi
-
có lẽ vấn đề này rất khó giải quyết, mong các anh cao thủ có cách nào đó giúp em với! vấn đề này em nghĩ sẽ giúp ích được cho rất nhiều người đấy!
-
Thực ra là em cũng chỉ sửa chữa trên những thứ có sẵn để phù hợp với công việc của mình, nếu tạo được như vậy thì sau này không cần quan tâm đến layer đã có hay chưa và không cần phải quét đối tượng đưa về layer nữa mà chỉ cần dùng lệnh là vẽ luôn.
thực ra em vẫn đang dùng cái code dưới đây để chuyển, trong đó nó có khoảng cách nét do mình đặt, nhưng mà mình phải MA.
(DEFUN C:DG10(/ cnt enam ent pnt s1 tot v1 val) (setvar "CMDECHO" 0.000) (prompt "\nCHON CAC DUONG MUON CHUYEN: ") (COMMAND "-LAYER" "m" "DUONG" "color" 1 "" "")(PRINC) (SETQ A (SSGET)) (COMMAND "CHPROP" A PAUSE "c" "RED" "LA" "DUONG" "lt" "Hidden" "s" "5" "")(princ) )
còn cái dưới đây dùng 2 lệnh RD và DG1 là ổn rồi, chỉ có điều khoảng cách hở của nét Hidden trong DG1 (Đường) mình không làm được (có cách nào để có thể thêm khoảng cách không ạ?). mong anh và các chuyên gia giúp em với, cảm ơn các anh rất nhiều!
(defun c:DG1 (/ *error* old_lay) (defun *error* (msg) (setvar "clayer" old_lay) (princ)) (setq old_lay (getvar "clayer")) (command "_.layer" "_m" "DUONG DI" "_c" "1" "" "L" "Hidden" "S" "5" "LW" "0.3" "" "") ;;;"S" "5" không dùng được? (setvar "osmode" (+ 1 2 8 32 128)) (command "_.LINE") (princ)) ------------------------ (defun c:RD (/ *error* old_lay) (defun *error* (msg) (setvar "clayer" old_lay) (princ)) (setq old_lay (getvar "clayer")) (command "_.layer" "_m" "RANH DAT" "_c" "5" "" "L" "" "" "LW" "0.5" "" "") (setvar "osmode" (+ 1 2 8 32 128)) (command "_.LINE") (princ))
Hỏi Cách Nhập Tọa Độ X,y Trên Cad 2007
trong Sử dụng AutoCAD
Đã đăng · Trả lời báo cáo
dùng point rồi nhập như thế nào vậy bạn?