Tue_NV
-
Số lượng nội dung
4260 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
288
Bài đăng được đăng bởi Tue_NV
-
-
em có ý kiến này nha : các bác vào tools>costomize>edit program parameter xong rồi các bác thêm lệnh DIMLFAC(lệnh DF) xong rồi các bác save lại ,xong rồi tắt cad rồi mở lại .vậy là ok bác mở bản vẽ ra rồi nhập lệnh DF va xem dưới dòng nhập lệnh sẽ thấy tỉ lệ bản vẽ mà các bác đang được xem :leluoi:Bạn nói không đúng rồi. Lệnh DimLfac chỉ cho biết tỉ lệ hiện hành của dimension sẽ vẽ chứ không cho biết được tỉ lệ vẽ trên kích thước thật của một đối tượng là bao nhiêu?
-
Bạn vui lòng bổ sung hai hàm : M_lay và M_lay_c .Thanks.
Xin lỗi, hai hàm đó đay anh gia bách ạ.
;;; Tao Layer khong co mau: (defun M_Lay(layr_name / tbl t1 t2 key) (setq tbl(tblnext "LAYER" 1)) (while tbl (setq t1(strcase layr_name) t2 (cdr(car(cdr tbl))) ) (if (equal t1 t2) (setq key 1)) (setq tbl(tblnext "LAYER")) ) (if(/= key 1) (progn (setq tbl NIL ) (command "_.LAYER" "N" layr_name "" ) (princ (strcat "\nLayer "layr_name".... was created.")) ) ) (setq layr_name NIL) (princ) ) ;;; Tao Layer co mau: (defun M_Lay_c(layr_name color / tbl t1 t2 key) (setvar "Cmdecho" 0) (setq tbl(tblnext "LAYER" 1)) (while tbl (setq t1(strcase layr_name) t2 (cdr(car(cdr tbl))) ) (if (equal t1 t2) (setq key 1)) (setq tbl(tblnext "LAYER")) ) (if(/= key 1) (progn (setq tbl NIL ) (command "_.LAYER" "N" layr_name "C" color layr_name "" ) (princ (strcat "\nLayer "layr_name".... was created.")) ) ) (setq layr_name NIL) (princ) ) ;;; Command Active: ;;; Chuyen toan bo Dim sang Layer "_Dim": (defun C:CDL (/ dim_app) (setvar "Cmdecho" 0) (setq dim_app(ssget "X" '((0 . "DIMENSION")) )) (if dim_app (progn (M_lay "_Dim");Tao Layer Dim neu chua co (command "_.Chprop" dim_app "" "LA" "_Dim" "") ) (prompt "\nHien tai, khong co Dim.") ) (princ) ) ;;; Chuyen toan bo cac doi tuong ve Layer tuong ung voi mau: (defun C:COL (/ op_ccl sl_op op_find cl_find en_find) (setvar "Cmdecho" 0) (setq op_ccl(ssget "X")) (if op_ccl (progn (setq sl_op (sslength op_ccl) next_op 0) (while ( (setq op_find(ssname op_ccl next_op) en_find(entget op_find) cl_find(cdr(assoc 62 en_find)) ) (if (and (numberp cl_find) ( (progn (M_lay_c (itoa cl_find) cl_find) (command "_.Chprop" op_find "" "LA" (itoa cl_find) "C" "Bylayer" "") ) ) (setq next_op(+ next_op 1) cl_find NIL en_find NIL) ) (setq next_op NIL cl_find NIL) ) ) (princ) ) ;;; Chuyen toan bo Text -> Text Layer: (defun C:CTL (/ Text_app) (setvar "Cmdecho" 0) (setq Text_app(ssget "X" '((0 . "*Text")) )) (if Text_app (progn (M_lay_c "_Text" "4");Tao Layer _Text neu chua co (command "_.Chprop" Text_app "" "LA" "_Text" "C" "Bylayer" "") ) (prompt "\nHien tai, khong co Texts.") ) (princ) ) ;;; Chuyen toan bo Blocks ve Layer _Blocks (defun C:CBLL (/ blk_app) (setvar "Cmdecho" 0) (setq blk_app(ssget "X" '((0 . "INSERT")) )) (if blk_app (progn (M_lay "_Blocks");Tao Layer _Blocks neu chua co (command "_.Chprop" blk_app "" "LA" "_Blocks" "") ) (prompt "\nKhong co Blocks nao duoc Insert.") ) (princ) ) ;;; Chuyen toan bo Hatch ve Layer _Hatch (defun C:CHL (/ hat_app) (setvar "Cmdecho" 0) (setq hat_app(ssget "X" '((0 . "Hatch")) )) (if hat_app (progn (M_lay "_Hatch");Tao Layer _Hatch neu chua co (command "_.Chprop" hat_app "" "LA" "_Hatch" "") ) (prompt "\nKhong co vat lieu Hatch.") ) (princ) )
Tiện thể, xin hỏi anh giabach có hàm nào mà khi pick vào dimension thì trả về được một giá trị chính là giá trị số text ghi trên dimension đó hay không?
Cám ơn anh.
Chúc anh thật nhiều sức khỏe.
-
em đang vẽ thử một bản vẽ thiết kế có tỉ lệ 1:100 .em dùng lệnh dim để đo khoảng cách một đoạn thẳng có chiều dài là 650 thì khi vẽ chọn chiều dài là bao nhiêuBạn cần phân biệt tỉ lệ thật của bản vẽ với tỉ lệ khi in ra giấy.
Khi bạn vẽ thì vẫn vẽ bình thường. Nếu bạn vẽ line có chiều dài 650 thì cứ vẽ đúng theo chiều dài ấy. Đơn giản phải không?
Vấn đề tỉ lệ 1:100 là ở khổ giấy bạn in ra.
Trong bản vẽ, thì vẽ với tỉ lệ thật khi in ra với tỉ lệ 1:100 thì bạn phải khai khổ giấy
Ví dụ A4(có khổ giấy thật là 297mmx210mm) thì trong bản vẽ bạn phải vẽ khung A4 (29700mmx21000mm) (nhân 100 lần)
Khổ giấy nhân lên 100 lần tức là nếu vẽ với tỉ lệ thật thì hình vẽ thu nhỏ lại 100 lần (1/100) đúng không bạn. Vì thế bạn cứ vẽ bình thường không có vấn đề gì cả.
Còn nếu bạn vẽ đối twợng với tỉ lệ 1:50 thì bạn vẫn vẽ bình thường sau đó scale lên 2 lần (100:50=2)
Tương tự với các đối tượng vẽ với các tỉ lệ khác nhau còn lại.
Mình nói thế bạn có hiểu không?
Có gì thắc mắc hỏi nhé.
-
Gửi bác Hoành:Bác có thể viết lisp cho em với yêu cầu sau được không?
Nội dung là có thể ghi được cao độ cụ thể các điểm trên mặt cắt dọc.
Ví dụ cao độ tim đường là 15m, cao độ chân taluy la 12.5m, khi vẽ theo tỉ lệ 1:1 thì khoảng cách 2 vị trí này là 2500mm.
Ý em muốn là khi píc chuột vào vị trí tim đường thì sẽ xuất hiện luôn cao độ của nó là 15 (được hiển thị dưới dạng 1 bock ghi cao độ )
Và tương tự khi pic vào chân mái taluy thì cũng hiển thị cao độ la 12.5m.
Cảm ơn bác nhiều
Code đây sẽ làm được điều bạn cần :
;-------------------------------------------------------- (defun gc_err (s) (if (/= s "Function cancelled") (princ (strcat "\nError: " s)) ) (setvar "Osmode" old_osmode) (setq *error* old_err) (princ) ) ;;; Main Function: (defun C:Mgco (/ block_in cot_base dim_scl dim_txt old_base_ data_base cot_in text_h text_clr text_point next_p ghi_base old_ortho cao_do old_ortho c_base n_base c_unit moc_st lim_out) (setq old_osmode(getvar "Osmode") old_ortho(getvar "Orthomode")) (setvar "Osmode" (+ 1 8 512)); End Node Near (setvar "Orthomode" 0) (setvar "Cmdecho" 0) (setq old_error *error* *error* gc_err) (prompt "\nNhap: \"T\" neu xac dinh cot theo moc tuong doi.") (command "_.Ucs" "W") (initget 9 "T");(+ 1 8) (setq c_base(getpoint "\n-> Diem goc xac dinh cot /T/: ") block_in "C:\\Tue\\cot.dwg" next_p 0 c_unit 0 dim_txt(getvar "Dimtxt") dim_scl(getvar "Dimscale")) (if(= c_base "T") (progn (initget 8) (setq c_base NIL c_unit NIL c_base(getpoint "\n-> Diem goc xac dinh cot tuong doi: ")) (initget 8) (if c_base (setq c_unit(getdist "\n->> Nhap cao do moc tuong doi : ")) ) (if(= c_unit NIL)(setq c_unit 0.000)) ) (setq c_unit 0.0) ) (if(= dim_scl 0.0) (setq dim_scl dim_txt dim_txt NIL) (setq dim_scl (* dim_scl dim_txt) dim_txt NIL)) (setq dim_scl (* dim_scl 2.0)) (if(not(findfile block_in)) (progn(alert (strcat "\n Thieu file: \""block_in"\" ! "))(setq next_p NIL c_base NIL))) (if (and c_base c_unit) (while next_p (if(= next_p 0);ghi cot moc (progn (if(/= c_unit 0)(setq moc_st c_unit c_unit 0)(setq moc_st 0.0)) (initget "Y N") (setq ghi_base(getkword "\n->> Ghi cot vao diem goc ?/Y/: ")) (if(or(= ghi_base "Y")(/= ghi_base NIL)) (pro_cot c_base moc_st);Ghi cot vao vi tri moc ) (setq ghi_base NIL) ) ) (setvar "Osmode" 1);(+ 1 8 128)) End Node Per (initget 8) (if (setq n_point(getpoint "\n->> Diem ghi cot tiep theo: " c_base)) (progn ;Pack for Out-size Limits: (if( (progn (if( (cond (( (setq lim_out -1.0) ) ((> (cadr c_base)(cadr n_point)) (setq lim_out -1.0) ) ((= (cadr c_base)(cadr n_point)) (setq lim_out 1.0) ) ) ) (if(>= (cadr n_point) 0) (setq lim_out 1) ) ) );if c_base (if(> (cadr c_base) 0) (setq lim_out 1) ) ;End Pack (setq cao_do(* lim_out (- (abs(cadr n_point)) (abs(cadr c_base))) ) next_p (+ next_p 1)) (pro_cot n_point (+ cao_do c_unit)) ) (setq next_p NIL cao_do NIL c_base NIL n_point NIL) );if );while );if c_base (setq cot_in NIL text_point NIL text_h NIL text_clr NIL dim_scl NIL cao_do NIL moc_st NIL c_unit NIL) (setvar "Osmode" old_osmode) (setvar "Orthomode" old_ortho) (setq *error* old_err) (princ) ) ;;; (defun pro_cot (cot_base old_base) (if (and cot_base (findfile block_in)) (progn (if(not old_base) (setq old_base 0.000 old_base_ "0.000") (progn (if( (progn (if(>= (abs old_base) 1000) (setq old_base_(strcat "-" (rtos (/ old_base -1000.000) 2 3))) (progn (if(/= (substr (rtos (/ old_base 1000.000) 2 3) 1 3) "-0.") (setq old_base_(strcat "-0" (rtos (/ old_base -1000.000) 2 3))) (setq old_base_(strcat "-" (rtos (/ old_base -1000.000) 2 3))) ) ) ) ) (progn (if(>= old_base 1000) (setq old_base_(strcat "+" (rtos (/ old_base 1000.000) 2 3))) (progn (if(/= (substr (rtos (/ old_base 1000.000) 2 3) 1 2) "0.") (setq old_base_(strcat "+0" (rtos (/ old_base 1000.000) 2 3))) (setq old_base_(strcat "+" (rtos (/ old_base 1000.000) 2 3))) ) ) ) ) ) (if(= old_base 0)(setq old_base 0.000 old_base_ "0.000")) );progn );if (prompt "\nCot cao do tinh bang \"Milimet\" !") (initget 8) (setq data_base(getint(strcat "\n->> Cot cao do :"))) (if(not data_base) (setq data_base old_base) (setq old_base data_base) );if (if data_base (progn (if(> data_base 0) (if(>= data_base 1000) (setq cot_in(strcat "+" (rtos (/ data_base 1000.000) 2 3))) (progn (if(/= (substr (rtos (/ data_base 1000.000) 2 3) 1 2) "0.") (setq cot_in(strcat "+0" (rtos (/ data_base 1000.000) 2 3))) (setq cot_in(strcat "+" (rtos (/ data_base 1000.000) 2 3))) ) ) ) (if(; (setq cot_in(strcat "-0" (rtos (/ data_base -1000.000) 2 3))) (progn (if(/= (substr (rtos (/ data_base 1000.000) 2 3) 1 3) "-0.") (setq cot_in(strcat "-0" (rtos (/ data_base -1000.000) 2 3))) (setq cot_in(strcat "-" (rtos (/ data_base -1000.000) 2 3))) ) ) (setq cot_in(strcat "-" (rtos (/ data_base -1000.000) 2 3))) ) ) (if(= data_base 0)(setq cot_in "%%p0.000")) (if (and cot_in cot_base dim_scl (findfile block_in)) (progn (setvar "Osmode" 0); Non Osmode (command "_.Insert" block_in cot_base dim_scl "" "0") (setq text_point(list (+ (car cot_base) (* 0.2 dim_scl)) (+ (cadr cot_base)(* 0.6 dim_scl)) ) text_h (* 0.4 dim_scl) text_clr 4) (setq old_text_st(getvar "TextStyle")) (MT_style "SYMBOL_TEXT" "Arial.ttf" "0.7") (command "_.Text" text_point text_h "0.0" cot_in "_.Chprop" "L" "" "C" text_clr "") (setvar "TextStyle" old_text_st) (setq old_text_st NIL text_point NIL text_h NIL text_clr NIL) ) ) );progn );if old_base );progn cot_base );if cot_base (setvar "Osmode" old_osmode) (setq *error* old_err) (princ) ) ;;; Find and Make TextStyle: Symbol_Text (defun MT_style(textst_name f_name wide_fit / tbl t1 t2 key) (setq tbl(tblnext "STYLE" 1) key NIL) (while tbl (setq t1 textst_name t2 (cdr(car(cdr tbl))) ) (if (equal t1 t2) (setq key 1)) (setq tbl(tblnext "STYLE")) ) (if(/= key 1) (progn (setq tbl NIL ) (command "_.STYLE" textst_name f_name "" wide_fit "" "" "") (princ (strcat "\nText Style: " textst_name " was created !")) ) (setvar "TextStyle" textst_name) ) (setq textst_name NIL f_name NIL wide_fit NIL key NIL) (princ) ) ;;; Copy cot cao do: (defun Ccot (/ op_cot op_pro_c moc_cot np_cot op_p op_text text_pro stt_c npc str_text cot_ins cot_new div_in num_text) (setvar "Cmdecho" 0) (setq old_osmode(getvar "Osmode") old_ortho(getvar "Orthomode")) (setvar "Orthomode" 1) (setq old_error *error* *error* gc_err lim_out NIL) (setq op_cot(ssget) stt_c NIL npc NIL op_text NIL) (if (and op_cot (> (sslength op_cot) 1)) (progn (setvar "Osmode" (+ 1 8 512)); End Node Near (initget 8) (setq moc_cot(getpoint "\n-> Diem moc copy: ") npc 1) (if moc_cot (progn (while npc (setvar "Osmode" (+ 128 512));Per Ner (initget 8) (if(setq np_cot(getpoint "\n->> Diem dat cot tiep theo: " moc_cot)) (progn (pack_out_lm moc_cot np_cot) ; (setq lim_out 1) (setq op_p NIL str_text NIL text_pro NIL op_text NIL op_pro_c NIL stt_c 0 cot_new NIL div_in NIL cot_ins NIL) (while (> (sslength op_cot) stt_c) (setq op_pro_c(ssname op_cot stt_c)) (setvar "Osmode" 0) (command "_.Copy" op_pro_c "" moc_cot np_cot) (setq op_cot_c(entlast)) (setq op_p op_cot_c op_text(cdr(assoc 0 (setq text_pro(entget op_p)))) ) (if (and(= op_text "TEXT") (= "SYMBOL_TEXT" (cdr(assoc 7 (entget op_p)))) ) (progn (setq str_text(assoc 1 text_pro)) (if (or (= (substr (cdr str_text) 1 1) "+") (= (substr (cdr str_text) 1 1) "-")(= (substr (cdr str_text) 1 3) "%%p")) (progn (if (or(= (substr (cdr str_text) 1 1) "+") (= (substr (cdr str_text) 1 1) "-")) (setq num_t 2)(setq num_t 4)) ; (setq div_in (- (abs(cadr np_cot)) (abs(cadr moc_cot))) (setq div_in (- (cadr np_cot) (cadr moc_cot)) num_text(atof (substr (cdr str_text) num_t)) num_t NIL cot_new(+ num_text (/ div_in 1000.000))) (if cot_new (progn (if(= div_in 0)(setq cot_ins "%%p0.000")) (if(and( (if(>= (abs cot_new) 1) (setq cot_ins(strcat "-" (rtos (* cot_new -1) 2 3))) (progn (if(/= (substr (rtos cot_new 2 3) 1 3) "-0.") (setq cot_ins(strcat "-0"(rtos (* cot_new -1) 2 3))) (setq cot_ins(strcat "-"(rtos (* cot_new -1) 2 3))) ) ) ) (if(>= cot_new 1) (setq cot_ins(strcat "+" (rtos cot_new 2 3))) (progn (if(/= (substr (rtos cot_new 2 3) 1 2) "0.") (setq cot_ins(strcat "+0"(rtos cot_new 2 3))) (setq cot_ins(strcat "+"(rtos cot_new 2 3))) ) ) ) ) (if(= cot_new 0)(setq cot_ins "%%p0.000")) (setq text_pro(subst (cons '1 cot_ins) str_text text_pro)) (entmod text_pro) );progn );if cot_new ) );if str_text ) );if op_text (setq stt_c (+ 1 stt_c)) );while ) (setq npc NIL) );if np_cot );While npc ) );if moc_cot ) );if op_cot (setq *error* old_err) (setvar "Osmode" old_osmode) (princ) ) ;;;Pack for Out-size Limits: (defun pack_out_lm (c_base_p n_point_p) (if(and c_base_p n_point_c) (progn (if( (progn (if( (cond (( (setq lim_out 1.0) ) ((> (cadr c_base_p)(cadr n_point_p)) (setq lim_out 1.0) ) ((= (cadr c_base_p)(cadr n_point_p)) (setq lim_out -1.0) ) ) ) (if(>= (cadr n_point_p) 0) (setq lim_out -1) ) ) );if c_base_p (if(> (cadr c_base_p) 0) (setq lim_out -1) ) ) ) ) ;End Pack ;;; (defun C:Ccot () (setq old_error *error* *error* gc_err) (ccot) (setq *error* old_err) (princ)) ;;; Load OK ;;;(princ "\nMCOT.lsp Loading... OK")
Cách thức hoạt động của đoạn code trên :
Bạn giải nén file tue.zip (Có chứa file ghicot.lsp và file cot.dwg) vào trong ổ đĩa C:\tue mà mình sẽ upload dưới đây
Sau đó vào CAD ->gõ option ->File -> Bạn chọn Support file Search path -> Add vào đường dẫn C:\tue ->OK.
Nếu bạn không làm những bước trên thì chương trình sẽ không chạy.
Bạn appload file ghicot.lsp lên và bắt đầu sử dụng :
Đơn vị ghi cot là đơn vị mm
Ở đây có thêm lệnh Ccot là lệnh copy cao độ từ cao độ có sẵn. Bạn ngâm cứu nhé. hay lắm
Mình sẽ làm ví dụ trong file của bạn
Command: mgco
Nhap: "T" neu xac dinh cot theo moc tuong doi.
-> Diem goc xac dinh cot /T/: _from Base point: (Pick vào điểm gốc xác định tọa độ tương đối)
: @0,-368550 (đây là tọa độ điểm gốc 0,0 được xác định theo chế độ bắt điểm from từ điểm gốc xác định tọa độ tương đối) ->> Ghi cot vao diem goc ?/Y/
: n Cot cao do tinh bang "Milimet" !
->> Cot cao do : Enter
->> Diem ghi cot tiep theo: Pick vào điểm ghi cot
Cot cao do tinh bang "Milimet" !
->> Cot cao do :
->> Diem ghi cot tiep theo: Pick vào điểm ghi cot
Cot cao do tinh bang "Milimet" !
->> Cot cao do :
->> Diem ghi cot tiep theo: Pick vào điểm ghi cot
Cot cao do tinh bang "Milimet" !
->> Cot cao do :
->> Diem ghi cot tiep theo: Pick vào điểm ghi cot
Cot cao do tinh bang "Milimet" !
->> Cot cao do :
----Còn nữa
File Tue.zip đây bạn : TueZip
File ví dụ mình sửa đây bạn : Coc_12Zip
Nhớ thanks đấy nhé.
À quên : Ứng dụng file líp ghi cot bạn có thể ghi tọa độ của sợi cáp trong phần bê tông ứng lực trước bằng cách thay cái file cot.dwg có chứa đối tượng block thành một file cot.dwg có chứa đối tượng là một point(đối tượng điểm)
Chúc vui. :leluoi:
-
Ô hay, nhỡ mà phím "P" trên cái bàn pjím của bác ý bị hỏng thì sao?Nhỡ phím "P" trên bàn phím bị hỏng thì bạn có thể sử dụng cách của mình :
Trường hợp bạn không có bánh xe giữa thì bạn có thể tạo phím để thực hiện lệnh Pan như sau :Chọn Tool ->Customize->Keyboard ->Trong nhãn View menu, Thiết lập phím tắt cho Panrealtime
Hoặc bạn có thể thay đổi phím P của lệnh Pan bằng một phím khác trong file acad.pgp
-
Bổ sung thêm một chút: Ấn và giữ bánh xe giữa chuột!Hỏi thêm một chút: Nếu chuột không có bánh xe giữa thì sao? (Tất nhiên không dùng lệnh Pan) :leluoi:
Trường hợp bạn không có bánh xe giữa thì bạn có thể tạo phím để thực hiện lệnh Pan như sau :
Chọn Tool ->Customize->Keyboard ->Trong nhãn View menu, Thiết lập phím tắt cho Panrealtime
-
- Cách đầu tiên thì em đã biết.- Cách thứ hai có vẻ không đúng ý em. Ở trên hình vẽ trên, chỉ cần kích chuột trái vào đường dốc ấy (em đã kích rồi-có hai cái mũi tên, vì em chỉ chụp nửa hình. Đúng ra là có 3 mũi tên, hai sang hai phía, một hướng lên trên)
Vậy em muốn hỏi là làm sao để vẽ được đường như vậy, hình như nó không fải là đường xline.
upload file đi bạn.
-
chào các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạĐầu tiên, có thể bạn sử dụng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text) theo bạn Nataca. Hoặc có thể bạn không dùng cũng được. sau này bạn move ra một chút
. Và bạn sử dụng đoạn Code của mình để thực hiện ý muốn của mình.
Dưới đây là Code :
;;;;;; (defun C:SCC () (prompt "Ban chon doi tuong text :") (princ "\nSelect object :") (setq obj (ssget)) (setq c1 (getdist "Cho khoang cach 2 text dau :")) (terpri) (setq c2 (getdist "Cho khoang cach 2 text cuoi :")) (terpri) (setq base (getpoint "Diem giua 2 text :")) (terpri) (setq TL (/ C2 C1)) (command "scale" obj "" base TL) (tt) ) ;;; -------------------------------------------------------------------------- ;;; Thay doi chieu cao TEXT: (DEFUN TT (/ G A B C D E F) (SETVAR "CMDECHO" 0) (INITGET 1 "S H ") (SETQ G (STRCASE (SUBSTR (getkword "Height/: ")1 1))) (COND ((OR (= G "S") (= G " ")) (SETQ A (SSGET "p")) (SETQ B (SSLENGTH A)) (INITGET 7) (SETQ C (GETDIST "\nKich thuoc TEXT moi: ")) (WHILE (> B 0) (SETQ B (1- B)) (SETQ D (SSNAME A B)) (SETQ D (ENTGET D)) (IF (= "TEXT" (CDR (ASSOC 0 D))) (PROGN (SETQ E (ASSOC 40 D)) (SETQ F (CONS 40 C)) (ENTMOD (SETQ D (SUBST F E D))))) ) (SETQ A NIL) ) ((= G "H") (INITGET 7) (SETQ A (GETDIST "\Chieu cao loai Texts can thay doi: ")) (SETQ B (FIX (* 100 A))) (INITGET 7) (SETQ C (GETDIST "\Thay doi chieu cao thanh: ")) (SETQ D (ENTNEXT)) (SETQ E (CONS 40 C)) (WHILE D (PRINC "-> ") (SETQ F (ASSOC 0 (ENTGET D))) (IF (= "TEXT" (CDR F)) (PROGN (SETQ F (ASSOC 40 (ENTGET D))) (SETQ G (FIX (* 100 (CDR F)))) (IF (= B G) (ENTMOD (SUBST E F (ENTGET D))) ) ) ) (SETQ D (ENTNEXT D)) ) ) ) (PRINC) ) ;;; ---------------------------------------------------------------------------
Để mình giải thích .
Đoạn code trên dựa trên lệnh scale với điểm chèn là trung điểm của đường thẳng nối 2 text.
Và tỉ lệ của lệnh Scale trên bằng khoảng cách 2 text đầu (chữ to) chia cho khoảng cách 2 text cuoi (là khoảng cách do mình chọn lúc cuối cùng)
Mục đích là để thu hẹp khoảng cách của 2 text. Sau đó sử dụng hàm tt để thay đổi chiều cao của 2 text đó :
Ở dòng lệnh :
Height/Select:
Nếu bạn chọn S thì : chương trình bảo bạn nhập kích thước text mới
Nếu bạn chọn H thì : chương trình bảo bạn chọn Chieu cao loai Texts can thay doi và chiều cao text thay doi chieu cao thanh:
Trong trường hợp này bạn nên chọn S
Còn bạn muốn thực hiện lệnh là multiple
thì bạn hãy gõ
Command : multiple
Enter command name to repeat: scc
....
Bạn có thể thiết lập lệnh tắt multiple trong file acad.pgp
Nhớ thanks ủng hộ nhé.
Chúc vui :leluoi:
-
uh, cám ơn anh nhé, em chưa xem thử lại. cứ cám ơn anh trước cái đãnhiều khi công việc cần phải có lòng đam mê thi mới thành công được, nhưng em mới chỉ có lòng đam mê không thôi, chưa đủ, vì khả năng của mình còn kém qua
thankssss
Về khả năng thì bạn phải bắt đầu từ những bước cơ bản mới được.
Một căn nhà được xây dựng phải bắt đầu từ việc xây phần móng trước tiên.
Nhưng nếu bạn không bắt tay vào làm thì sự đam mê hoá ra vô nghĩa.
Chúc bạn làm được những điều đam mê của bạn.
-
My menu
trong Sử dụng AutoCAD
Tiện đây em hỏi các bác chút!http://www.cadviet.com/upfiles/aaaa.jpg
Autocad2007 bị mất hết thanh công cụ lấy ra bằng cách nào vậy bác
Bạn chọn Tool ->Customize ->Toolbar -> Trong nhãn Toolbar bạn chọn các thanh công cụn cần lấy.
-
bạn ơi cho hỏi phím tắt là gì nếu không giới thiệu gì?Bạn gõ lệnh Lt (tức là lệnh linetype) ở dòng command đó. Sau đó chọn nét hàn cần vẽ ->Curent ->OK. Tức là bạn chọn nét hiện hành là đường hàn để vẽ.
-
xin chào mọi người! minh có bản vẽ cad do người bạn gửi cho. mình đang dùng cad 2004 mình mở ra thì thấy chữ không đọc được. mình cũng mang mở thử máy khác nhưng cũng không được.Xin mọi người giúp đỡ minh nhe! thank you trước nhé[/size]
Mình mở file của bạn ra và vẫn thấy bình thường. Chắc chắn rằng máy của bạn không có font chữ Romans1.shx. Mình sẽ gửi cho bạn file font chữ này và một số font chữ .shx khác để bạn cài vào máy và có thể mở được file của mình mà không bị lỗi font chữ. File đó đây: http://www.cadviet.com/upfiles/Fonts.zip
Cách cài Fonts chữ đó như sau :
Bạn giải nén vào một thư mục. Ví dụ : D:\fonts
Vào ACAD. Bạn gõ lệnh option -> chọn file ->Support file Search Path -> chọn Add -> Xác định đường dẫn D:\fonts ->Chọn Apply ->OK. Sau đó đóng ACAD lại. Khởi động lại, mở file đó lên là được.
Chúc bạn thành công nhé. :leluoi:
-
My menu
trong Sử dụng AutoCAD
Mình có một file Mymenu.mnu, muốn tự động chèn các menu tự tạo vào menubar mà không cần dùng lệnh Tools\Customize\menus...Nhờ các bạn chỉ cách.Thanks
Bạn gõ lệnh menuload
-
Cho em hỏi làm cách nào để chỉnh sửa nhanh kích thước ở một bản vẽ mẫu thành bản vẽ mới với kích thước của mình?Ví dụ với cùng mặt bằng giống nhau,chỉ khác nhau ở kích thước các ô sàn và kích thước các thanh thép,làm thế nào để chỉnh lại theo ý mình nhanh chóng mà không phải chỉnh sửa từng đoạn,từng ô?Rất mong được các huynh giúp đỡ!
Bạn hãy upload 1 file ví dụ lên diễn đàn được không?
-
Thanks bác đã làm đc rồi, liệu Dim hoặc Text có thể làm theo cách tương tự đc khôngĐây là líp mình sưu tầm được
;;; Command Active: ;;; Chuyen toan bo Dim sang Layer "_Dim": (defun C:CDLA (/ dim_app) (setvar "Cmdecho" 0) (setq dim_app(ssget "X" '((0 . "DIMENSION")) )) (if dim_app (progn (M_lay "_Dim");Tao Layer Dim neu chua co (command "_.Chprop" dim_app "" "LA" "Dim" "") ) (prompt "\nHien tai, khong co Dim.") ) (princ) ) ;;; Chuyen toan bo cac doi tuong ve Layer tuong ung voi mau: (defun C:COLA (/ op_ccl sl_op op_find cl_find en_find) (setvar "Cmdecho" 0) (setq op_ccl(ssget "X")) (if op_ccl (progn (setq sl_op (sslength op_ccl) next_op 0) (while ( (setq op_find(ssname op_ccl next_op) en_find(entget op_find) cl_find(cdr(assoc 62 en_find)) ) (if (and (numberp cl_find) ( (progn (M_lay_c (itoa cl_find) cl_find) (command "_.Chprop" op_find "" "LA" (itoa cl_find) "C" "Bylayer" "") ) ) (setq next_op(+ next_op 1) cl_find NIL en_find NIL) ) (setq next_op NIL cl_find NIL) ) ) (princ) ) ;;; Chuyen toan bo Text -> Text Layer: (defun C:CTLA (/ Text_app) (setvar "Cmdecho" 0) (setq Text_app(ssget "X" '((0 . "*Text")) )) (if Text_app (progn (M_lay_c "_Text" "3");Tao Layer _Text neu chua co (command "_.Chprop" Text_app "" "LA" "_Text" "C" "Bylayer" "") ) (prompt "\nHien tai, khong co Texts.") ) (princ) ) ;;; Chuyen toan bo Blocks ve Layer _Blocks (defun C:CBLA (/ blk_app) (setvar "Cmdecho" 0) (setq blk_app(ssget "X" '((0 . "INSERT")) )) (if blk_app (progn (M_lay "_Blocks");Tao Layer _Blocks neu chua co (command "_.Chprop" blk_app "" "LA" "Blocks" "") ) (prompt "\nKhong co Blocks nao duoc Insert.") ) (princ) ) ;;; Chuyen toan bo Hatch ve Layer _Hatch (defun C:CHLA (/ hat_app) (setvar "Cmdecho" 0) (setq hat_app(ssget "X" '((0 . "Hatch")) )) (if hat_app (progn (M_lay "_Hatch");Tao Layer _Hatch neu chua co (command "_.Chprop" hat_app "" "LA" "_Hatch" "") ) (prompt "\nKhong co vat lieu Hatch.") ) (princ) )
.
Bạn thử xem nhé.
-
Đó chính là cái mà mình muốn làm nhưng ko được, bạn có thể nói chi tiết cách làm được không?, để còn làm lần khác và làm cho những cái khác, mà bạn ở Hà Nội không, đi coffee tí nhề, để cho mình hỏi 1 số cái thắc mắcp/s: mà cái này khi in ra thì sao vẫn còn cái boder của cái khung excel nhỉ? làm thế nào để mất đây
Boder của khung excel là cái nào nhỉ?
Bạn có thể upload image cái hình có boder khung excel lên được không?
Mình in (Preview) thì vẫn bình thường. Đây là file ảnh mà khi mình in lên nè? Bạn xem nhé.
-
Chào các bạn...
Kết thúc của bạn ssẽ được kết quả như thế nào? Bạn hãy nói rõ hơn.
-
Bạn Tue NV ui!!! sao chả thấy trả lời cái nhề, đợi lâu sốt ruột quá...Xin lỗi bạn đã đợi lâu. Mình chuyển cái khung OLE qua CAD theo đúng khổ giấy A3 mà bạn đã định dạng trong EXCEL rồi nè.
Đường Link của file đó đây :
http://www.cadviet.com/upfiles/Drawing3_1.rar
Bạn cho ý kiến nhé.
-
1
-
-
-Cái màu đỏ là text.-Cái màu vàng là text.
-Cái màu trắng là ACAD_PROXY_ENTITY.
****
-Cái màu vàng muốn giống cái màu đỏ thì dùng lệnh MATCHPROP bôi qua xong dùng find đổi dấu , thành dấu . là được.
-Cái màu trắng thì EXPLODE nó ra xẽ thành 3 đối tượng:
+Text phía trước. (mtext)
+Hình tròn.
+Text phía sau. (mtext)
Muốn nối hai text này lại thì chắc phải dùng lisp. (nhờ bác Hoành)
Các bác trên diễn đàn cho hỏi ACAD_PROXY_ENTITY là gì thế?
-
Thế là cad bị dính virus acad.lsp rồi.Bạn dùng tạm lệnh MBUTTONPAN để xử lý tạm thời nhưng mối lần bật bản vẽ mới lên lại phải dùng lại lênh này đấy.Cái menu hiện ra la` menu bắt điểm,bình thường ấn Ctrl+Right click là ra nó.
(Bài này có nói đến rồi đấy nhưng hình như bác Hoành vẫn chưa có cách rải quyết thì phải )
Bài viết mà bạn nói đến nó nằm ở đây này :
-
1
-
-
Mình muốn hỏi là khi mình dùng lện insert OLE vào í, thì nó chỉ hiện bằng 1 cái khung vuông thui, còn lại là nó ko hiện, có cách nào để biến cái khung đó theo page setup mà mình đã đặt ở trong excel hay ko mà, chứ insert theo như của bạn cũng vẫn thế...Bạn có thể upload file cad và excel lên diễn đàn được không?
-
Cho em hỏi cái là khi em làm 1 file excel trước ở bên ngoài, em đặt page setup của file excel là A3 landscape, view trong excel thì thấy ngon lành nhưng sao khi em dùng insert OLE vào thì toàn mất 1 phần, và khổ giấy lại chuyển thành Portrait, em làm sao bây giờ??? đang gấp quá, giúp em đi các bro ui...Ý của bạn là chọn các ô trong bảng tính excel rồi insert vào trong Cad phải không?
Mình dùng cách này mà không cần insert OLE.
Bạn chọn các ô trong bảng tính exel cần dán. Chọn copy. Sau đó qua CAD chọn Edit ->Paste Special ->
Chọn Autocad Entities trong hộp thoại Paste Special là đwợc
-
Cảm ơn anh, nhưng cái của anh bị lỗi phần tính weight kết quả toàn bằng 0, mà có lúc làm tiết diện của em bị biến dạngĐây là tiết diện của em anh thử xem. Anh xem lại và sửa lỗi hộ em nha.
Mình check lại rồi. Bạn thử nhé: ;;;--- GA.lsp - GetArea ;;; ;;; ;;;--- Select a spot on the interior of an enclosed area and this program ;;; will write the Plot Number, Area, and Perimeter on that spot. ;;; ;;; ;;;--- This program uses the -bhatch command to create a hatch over the area. ;;; It then gets a list of all of the control points for the hatch and ;;; creates a polyline boundary (using the ENTMAKE) function. The area ;;; command is used on the polyline to find the area and perimeter. ;;; No islands are taken into consideration. ;;; ;;; ;;;--- Created on 8/6/04 ;;; Copyright 2004 by JefferyPSanders.com ;;; All rights reserved. ;;; ;;; ;;;--- Program is issued as is without gauranties of the accuracy nor of ;;; damages resulting from use of the program. ;;; ;;; ;;;--- Tested with AutoCAD Release 14 and 2004 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; 888 888 888 8888888 8888 888 ;;; ;;; 8888 8888 88888 888 88888 888 ;;; ;;; 88888 88888 888 888 888 888888 888 ;;; ;;; 888888 888888 888 888 888 888 888888 ;;; ;;; 888 88888 888 88888888888 888 888 88888 ;;; ;;; 888 888 888 888 888 8888888 888 8888 ;;; ;;; ;;; ;;; ;;; ;;; 888 888888888 888888888 ;;; ;;; 88888 888 888 888 888 ;;; ;;; 888 888 888 888 888 888 ;;; ;;; 888 888 888888888 888888888 ;;; ;;; 88888888888 888 888 ;;; ;;; 888 888 888 888 ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun C:GA() ;;;--- Turn the command echo off (setvar "cmdecho" 0) ;;;--- Inform the user of the plot number (princ "\n Starting Number is ")(princ (getvar "useri1")) (princ ". To change this, reset the system variable USERI1") ;;;--- Get the interior selection point (setq pt(getpoint "\n Select Interior of Area : ")) ;;;--- Create a hatch pattern in the area (command "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "") ;;;--- If the hatch pattern was created... (if(setq en(entlast)) (progn ;;;--- Get the dxf group codes from the hatch entity (setq enlist(entget en)) ;;;--- Build a list to eventually make a polyline entity (setq plist(list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline"))) ;;;--- Set up an empty list, a flag, and a counter (setq newList(list) flag 0 cntr 0) ;;;--- Cycle through every item in the hatch's dxf group codes (while( ;;;--- Get the first item (setq a(nth cntr enlist)) ;;;--- If it is the first group code 10, increment the flag and proceed (if (= (car a) 10)(setq flag(+ flag 1))) ;;;--- Skip the first group code 10 in the entity list (if (> flag 1) ;;;--- If the dxf group code number is 10, then... (if(= (car a) 10) (progn ;;;--- Start a temporary list holding the dxf group codes for a VERTEX entity ;;; Add codes 0 and 10 (setq tmp(list (cons 0 "VERTEX") a)) ;;;--- In case there are bulges, look for codes 42 and 50 while the next code isn't ;;; a group code 10 and there are more items in the dxf group codes to look for. (while(and ( ;;;--- Increment the counter to get to the 42 and 50 codes (setq cntr(+ cntr 1)) ;;;--- Get the next code (setq b(nth cntr enlist)) ;;;--- If it is a 42 or 50 code... (if(or (= (car b) 42)(= (car b) 50)) ;;;--- Add it to the temporary list (setq tmp(append tmp (list b))) ) ) ;;;--- Add the temporary list to the new list (setq newList(append newList (list tmp))) ) ) ) ;;;--- Increment the counter to get the next group 10 code (setq cntr(+ cntr 1)) ) ;;;--- In order to close the polyline, we will need to save the start point ;;; and use it later as the end point of the polyline (setq lastPt(car newList)) ;;;--- Strip off the last point, which is the point selected during the hatch command (setq newList(reverse(cdr(reverse newList)))) ;;;--- Delete the hatch pattern (entdel en) ;;;--- Start creating the polyline entity (entmake (list (cons 0 "POLYLINE") ; Object type (cons 66 1) ; Vertices follow ) ) ;;;--- Add each vertex to the polyline entity... (foreach a newList (entmake a ) ) ;;;--- Close the polyline by adding the first point (entmake lastPt) ;;;--- Finally add the SEQEND to create the polyline (entmake (list (cons 0 "SEQEND"))) ;;;--- Get the entity name of the polyline just created (setq en(entlast)) ;;;--- Use the area command on the polyline (command "area" "Object" en) ;;;--- Get the Area of the Polyline (setq myArea(getvar "area")) ;;;--- NOTE: Here would be a good place to do any manipulation of the area. ;;; Such as converting it to square feet or acres. ;;;--- Get the perimeter of the polyline (setq myPerim(getvar "perimeter")) ;;;--- NOTE: Here would be a good place to do any manipulation of the perimeter. ;;; Such as converting to feet or meters. ;;;--- Get the plot number to use from the USERI1 system variable. (setq myNum(getvar "useri1")) ;;;--- Don't start with zero, which is Autocad's default (if(= myNum 0)(setq myNum 1)) ;;;--- Increment the counter before saving for next time (setvar "useri1" (+ myNum 1)) ;;;--- Convert the number to a string (setq myNum(itoa myNum)) ;;;--- Grab the current textsize (setq tht(getvar "textsize")) ;;;--- Get the current text style (setq csty(getvar "textstyle")) ;;;--- See if the text style has a preset height (if(= 0 (cdr(assoc 40(tblsearch "style" csty)))) (progn ;;;--- Insert the text with a height parameter (setq kl (/ (* myArea 2.7) 1000)) (command "text" "Justify" "Center" Pt tht 0 myNum) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) tht 0 (strcat "AREA=" (rtos kl 2 4))) (setq kl (/ (* myArea 2.7) 1000)) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) tht 0 (strcat "PERIMETER=" (rtos myPerim))) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) tht 0 (strcat "Weight=" (rtos kl 2 4))) ) (progn ;;;--- Else, Insert the text without a height parameter (setq kl (/ (* myArea 2.7) 1000)) (command "text" "Justify" "Center" Pt 0 myNum) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) 0 (strcat "AREA=" (rtos myarea 2 4))) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) 0 (strcat "PERIMETER=" (rtos myPerim))) (command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) 0 (strcat "Weight=" (rtos kl 2 4))) ) ) ;;;--- Delete the polyline entity (entdel en) ) (alert "Hatch pattern could not be created. Make sure the area is enclosed.") ) ;;;--- Turn the command echo back on (setvar "cmdecho" 1) ;;;--- Suppress the last echo for a clean exit (princ) )
-
Nhờ mọi người giúp mình cái lisp sao cho khi mình pick các số dạng text thì cho ra tổng của các số đó. Cảm ơn nhiều!Bạn nên sử dụng chức năng tìm kiếm của diễn đàn trước khi đưa ra câu hỏi. Lisp đó đây:
Sử dụng thanh công cụ draw order như thế nào vây!
trong Sử dụng AutoCAD
Đã đăng · Trả lời báo cáo
Hình chữ nhật mà bạn vẽ thuộc đối tượng nào vây? Phải chăng là rectangular? Như vậy là không được rồi.
Lệnh Draworder là lệnh thay đổi trật tự hiển thị của đối tượng image và đối tượng khác.
Bạn phải nhớ là đối tượng image nhé.