-
Số lượng nội dung
905 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
29
Bài đăng được đăng bởi Thaistreetz
-
-
Quick Leader Dtext
trong AutoLisp
(command \U+001B)
Định làm gì đây hả ketxu? ký tự trên mình cũng không tìm thấy trong bảng mã unicode
P/S :e tâm đắc nhất chỗ nhấn nút ESC :D
Tâm đắc cái giề? mình nhấn nút Esc có thấy gì đâu nào :angry:
-
cái đó có ảnh hưởng gì đâu mà bạn cần phải tắt.
bạn hỏi cái gì cao siêu hơn được không.
chả ảnh huởng gì và nó cũng chả giúp được gì cho mình. nhưng ... thấy nó ngứa mắt <_<
-
Cũng còn tuỳ loại đối tuợng bạn ạ. chẳng hạn như line, text, circle .... không bắt buộc phải khai báo mã này. Mình dùng cad2010
-
đã edit. cảm ơn ketxu đã test hộ tớ
-
topic của mình đây mà. cũng là bài viết thứ 2 trên cadviet của mình. hồi đó đuợc bác PhamThanhBinh viết cho cái lisp này mừng cả 1 ngày.
Mình sửa lại 1 chút lisp của bác Bình cho fù hợp với nhu cầu của bạn đây.
(defun C:TL( / Length1 SSdelete MakePoint GET-M2P MakeText HT I K LST LST1 LSTL LSTP OSMLAST OTHLAST PT PT0 PT1 SS SSMOVE SSNX SSP TBSS) (vl-load-com) (defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst); Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (if Ang (cons 50 Ang)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) justify (strcase justify)) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1)))))) (entmakex Lst)) (defun SSdelete (SS / ) (setq SS (acet-ss-to-list SS))(foreach SSN SS (entdel SSN))) (defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))) (defun GET-M2P (PT1 PT2) (polar PT1 (angle PT1 PT2) (* 0.5 (distance PT1 PT2))));end (defun MakePoint (point layer color) (entmakex (list '(0 . "POINT")'(100 . "AcDbEntity") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) '(100 . "AcDbPoint")(cons 10 point)))) (setq lst '() lst1 '() lstL '() k (getvar "dimlfac") ssmove (ssadd)) (setq ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE"))) i 0) (repeat (sslength ss) (if (= 1 (car (setq ssnx (car(ssnamex ss i))))) (if lst1(progn (setq ssp (ssadd)) (foreach ssn lst1 (setq ssp(ssadd(MakePoint(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS ssn)))(cadr lstp))nil 250)ssp))) (setq tbss (ACET-GEOM-SS-EXTENTS-FAST ssp))(ssdelete ssp) (if (>(abs(-(car(car tbss))(car(cadr tbss))))(abs(-(cadr(car tbss))(cadr(cadr tbss))))) (setq lst1 (vl-sort lst1 '(lambda (e1 e2) (< (car (get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e1)))(cadr lstp))) (car (get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e2)))(cadr lstp))))))) ;;; hang (setq lst1 (vl-sort lst1 '(lambda (e1 e2) (> (cadr(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e1)))(cadr lstp))) (cadr(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e2)))(cadr lstp)))))))) ;;; cot (setq lst (append (list (cadr ssnx)) lst1) lst1 '())) (setq lst (append (list (cadr ssnx)) lst))) (setq lst1 (append (list (cadr ssnx)) lst1))) (setq i (1+ i))) (if lst1 (progn (setq ssp (ssadd)) (foreach ssn lst1 (setq ssp(ssadd(MakePoint(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS ssn)))(cadr lstp))nil 250)ssp))) (setq tbss (ACET-GEOM-SS-EXTENTS-FAST ssp))(ssdelete ssp) (if (>(abs(-(car(car tbss))(car(cadr tbss))))(abs(-(cadr(car tbss))(cadr(cadr tbss))))) (setq lst1 (vl-sort lst1 '(lambda (e1 e2) (> (car (get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e1)))(cadr lstp))) (car (get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e2)))(cadr lstp))))))) ;;; hang (setq lst1 (vl-sort lst1 '(lambda (e1 e2) (< (cadr(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e1)))(cadr lstp))) (cadr(get-m2p(car(setq lstp(ACET-GEOM-EXTENTS e2)))(cadr lstp)))))))))) ;;; cot (if (setq lst(append lst1 lst)) (progn (setq ht (getreal "nhap chieu cao text: ") pt (cadr (grread 't 15 0)) pt0 pt i 0) (foreach ll (reverse lst) (setq ssmove (ssadd (maketext pt (itoa(setq i (1+ i))) ht 0 "C" nil nil nil nil) ssmove) ssmove (ssadd (maketext (polar pt 0 (* 5 ht)) (rtos (* k(length1 ll)) 2 3) ht 0 "R" nil nil nil nil) ssmove) pt (list (car pt) (- (cadr pt) (* 1.5 ht))))) (acet-ss-redraw ssmove 2) (setq OTHLAST (getvar "orthomode")) (setvar "orthomode" 0) (if (setq pt1 (acet-ss-drag-move ssmove pt0 "\nChon diem dat bang")) (progn (vl-cmdf "move" ssmove "" pt0 pt1) (setvar "orthomode" OTHLAST)) (ssdelete ssmove)))) (print "free lisp from cadviet.com") (princ))
Bạn chú ý:
- sau khi gõ lệnh bạn có thể chon theo cả 2 cách như bạn yêu cầu. nghĩa là bạn có thể chọn kiểu như thế này: ...chọn 1 tập hợp -> rồi pick...pick -> rồi lại chọn tập hợp -> rồi lại pick pick...rồi...rồi...
- Chương trình sẽ tự nhận diện tập hợp đối tượng của bạn, nhóm đối tượng nào chọn trước, nhóm đối tượng nào chọn sau, các phần tử trong 1 tập hợp là hàng hay là cột để tự sắp xếp theo X hoặc Y.
- mình ngại kẻ bảng nên kết quả nhìn hơi xấu. thôi, cái này bạn tự làm đê.
@Ketxu: ai lại dich tên tớ thế <_<. dịch là Thái bụi cậu ạ :lol:
-
2
-
-
Chỗ mình vuớng mắc chính là chỗ này đây
(cons 10 (list (+ (car (trans vtct 1 0)) 1.0) (+ (cadr (trans vtct 1 0)) 2.0) 0))
việc bắt buộc phải cung cấp toạ độ cho attrib gây ra khó khăn nêu muốn tạo hàm con tổng quát. nó có thể làm thay đổi hình dạng của đối tuợng đuợc insert ra so với bock gốc. Cảm ơn bạn đã chia sẻ
-
Bữa nay rảnh rỗi nên dành thời gian cải tạo lại mấy lisp hồi trước viết, động đến cái block thuộc tính và mình cũng đang vuớng phải vấn đề như của bạn chủ topic đề cập. sau 1 đêm cặm cụi, mò mẫm rất là chăm chỉ thì mình thấy có 2 vấn đề chính cần giải quyết đó là: Tạo block thuộc tính bằng entmake và tạo đối tượng insert 1 block thuộc tính bằng entmake.
1. Tạo block thuộc tính bằng entmake.
Cái này thì tương đối đơn giản, nhiều người cũng nghĩ nó đơn giản nhưng rồi không thể tạo được, mình cũng thế. có nhiều nguyên nhân nhưng.. thôi kệ nó. đây là code tổng quát mình rút ra được và đã make thành công. các bạn có thể tham khảo để xây dựng hàm con fù hợp nhu cầu.
(entmake '((0 . "BLOCK") (2 . "Tenblock"); Tên block khi dùng lệnh insert (70 . 2) ; Mã này bắt buộc fải có và giá trị = 2 nếu bạn muốn tạo block thuộc tính (10 0.0 0.0 0.0) (4 . "Chuthich"); ghi chú thích cho block, không có cũng được )) ;(entmake các đối tượng con của block: LINE, PLINE, Text....) (entmake '((0 . "ATTDEF") ; Entmake đối tượng thuộc tính, các giá trị bên dưới là bắt buộc (100 . "AcDbEntity") (8 . "0") ; layer (62 . 7) ; màu chữ (100 . "AcDbText") (10 point) ; tọa độ điểm chèn, (chỉ cần quan tâm khi lựa chọn canh lề là left) (40 . 0.2) ; chiều cao chữ (1 . "01") ; giá trị mặc định của attdef (7 . "textstyle") ; kiểu chữ (72 . 1) ; Canh lề theo phương ngang, giá trị từ 0 - 5 (11 point) ; toa độ điểm canh lề (lựa chọn canh lề là left thì mã này có giá trị là (11 0.0 0.0 0.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "prompt") (2 . "tag") (70 . 0) ; mã xđịnh trạng thái của thuộc tính, mặc đinh lấy = 0 nhưng không bỏ nó đi được. (mất cả đêm vì thằng này >''<); (74 . 0) ; Canh lề theo phương thẳng đứng, giá trị từ 0 - 3 (280 . 1) ) ) ;(entmake gì nữa thì tùy bạn) (entmake '((0 . "ENDBLK")(8 . "layer"))); mã 8 này chính là layer của block (nếu đặt layer 0 thì có thể bỏ qua)
các lựa chọn về góc quay, width factor, độ nghiêng của text thuộc tính là không bắt buộc, có thể bổ sung thêm cho phù hợp với nhu cầu.
2. tạo đối tượng insert 1 block thuộc tính bằng entmake.
Cái này thì mình chưa làm được, nhưng các bước của nó cũng tương tự như trên
(entmake '((0 . "insert") (2 . "Tenblock") (8 . "layer") (10 . point) ;điểm chèn (50 . 0) ;góc quay (2 . "Tenblock") (70 . 0) (66 . 1) ;mã xác định block có chứa đối tượng thuộc tính ) (entmake '((0 . "ATTRIB") [b].................mình đang chết dí chỗ này...............[/b] ) (entmake '((0 . "Seqend") (8 . "layer"))
trong code trên thì chỗ mình đang mắc chính là 2 mã 10 và 11 của đối tượng ATTRIB vì không biết xác định giá trị của nó như thế nào bởi bản thân ATTRIB bị gắn chết vào đối tượng Block rồi. các bác gỡ tiếp giúp mình vụ này với.
PS: Ah, Để cho dễ hiểu ý tứ của bạn chủ topic và của mình thì các bác có thể hiểu đơn giản là mình muốn viết 1 hàm để thay thế cho lệnh Block và 1 hàm để thay thế cho lệnh Insert trong cad.
có lẽ một vài người sẽ đặt câu hỏi tại sao lại fải làm thế này mà không dùng cách đơn giản hơn là (command "insert"....). thực tế thì việc thay đổi cấu trúc của lệnh insert giữa các fiên bản cad như 18011985 lo ngại không fải là vấn đề quá lớn. cái chính là hàm command khiến chương trình chạy chậm, chịu ảnh hưởng lớn từ các biến hệ thống trong cad và người lập trình không có cách gì để can thiệp vào cấu trúc của nó khi gặp fải những vấn đề chưa hài lòng với nó. và đơn giản là mình ghét nó, cực chẳng đã mới fải dùng nó thôi.
-
1
-
-
Trước em cũng như bác nhưng giờ phải quan tâm đến sức khỏe nhiều hơn (cẩn thận không đi làm không đủ tiền mua thuốc) cộng với công việc ngày càng nhiều hơn nên em thường xuyên phải ghi ra Note của điện thoại. Khi ghi ra thì rất yên tâm là ý tưởng của mình không bị mất. Thế nên ngủ cũng ngon. Khi có khoảng thời gian rỗi là lôi một loạt ý tưởng ra thực thi. Vừa không hại sức khỏe vừa tiết kiệm thời gian (tránh nhàn cư vi bất thiện) khà khà. Hy vọng kinh nghiệm của em có ích cho các anh em đam mê lập trình.
Đúng là Lisp có hại cho sức khoẻ bác ạ. em từng bị sụt từ 49kg xuống 42kg sau hơn 2 tháng tập tành lisp. tuởng mình điên nhưng có thằng còn dị nhân hơn.
Tiện vui thì em kể các bác nghe. thằng truởng phòng của em cũng bị lisp làm tình làm tội, thằng này rất siêu lisp đồng thời cũng bị ám ảnh bởi lisp. Thứ 7 mà nguời yêu fải ra lệnh đi chơi thi nó mới đi.
OK, chiều ý em anh đi. Rồi chả hiểu vì sao 2 đứa giận nhau, ghế đá mỗi đứa đầu, mặt cách nhau cả vòng trái đất. Tội nghiệp con nhỏ, mặt vênh lên ngồi chờ người yêu làm lành trước nhưng em có biết đâu thằng kia vừa có 1 ý tưởng cực kỳ hay trong đầu, nó ngồi rút điện thoại ra, ghi note các bước cần fải làm cho ý tưởng của nó mà quên mất người yêu đang giận dỗi sau lưng. khoảng gần 1 tuần sau nó chìa cho em xem sản phẩm của nó: phần mềm quản lý toàn bộ bản vẽ của 1 dự án.
Phần mềm này giúp liên kết, tìm kiếm, sắp xếp, quản lý và in ấn tất cả các bản vẽ trên nhiều file bản vẽ khác nhau của 1 dự án thông qua 1 file bản vẽ duy nhất là danh mục bản vẽ. Có lẽ đây cũng chính là vấn đề mà chủ topic quan tâm
-
Uh, lỗi tuơng tự như nova cho cad2002 luôn. bọn Hài Hoà cải lùi, có vẻ như thuật toán của nova dành cho bản cad2000 khác tuơng đối nhiều so với bản dành cho cad14.
@ngoctu: nova dành cho cad2005 là phiên bản cuối cùng rồi cậu ạ.
-
nova 4.01 gồm 2 module. 1 dùng cho cad14 và 1 dùng cho cad2000 (vào thư mục cài đặt của nó sẽ thấy các module này đuợc đóng gói riêng biệt)
ai cũng biết như vậy nhưng chẳng ai muốn dùng module dành cho cad2000 thì cũng fải có nguyên nhân sâu xa cậu ạ. mình có cái khoá cứng màu tím tím danh cho module cad2000 đây. bạn nào thích mình cho không :lol:
-
Vđ này các bạn đã gặp và đã giúp rất nhiều anh em trắc địa rồi mà các bạn kg để ý đấy thôi. Trong CT in Hồ sơ kỹ thuật thửa đất do cadviet viết, thường tọa độ làm tròn đến 2 số lẽ (tức đơn vị cm). Nếu ta chỉ làm tròn trên tọa độ in ra bảng mà kg làm tròn ngay bản thân cái polyline gốc thì sẽ có sai lệch diện tích, vì dụ khi bạn kg có file mà phải nhập lại bảng tọa độ đó. Trong ngành địa chính cũng sd tọa độ đỉnh thửa đất đến cm thôi
hà hà, bây giờ thì mình đã hiểu. từ hôm đến giờ cứ thắc mắc mãi không hiểu bạn muốn làm điều đó vì mục đích gì :lol:
-
Hình như phương pháp của bạn phamngoctukts là quá hay rồi. Bàn về thủ thuật thì có thể có nhiều cách, nhưng cách của bạn phamngoctukts thì có lý do gì để chê nhỉ?
Để giải quyết vấn đề thì làm theo cách của phamngoctu hoàn toàn có thể sử dụng đuợc. tuy nhiên nó chỉ có thể gọi là "thủ thuật" chứ không fải là thuật toán, cách làm này yêu cầu fải tạo 1 point rồi lại xoá nó đi chỉ để fục vụ cho 1 buớc kiểm tra. nhiều lập trình viên không thích điều này vì nó ảnh huởng đến cơ sở dữ liệu bản vẽ và làm chậm tốc độ xử lý. dù chẳng để lại hậu quả gì đáng tiếc xong đã không thích thì chắc chắn là không muốn làm trừ khi không còn cách nào khác tốt hơn
-
Bạn coi lại nhé :
(rtos -618.003 2 2) -> "-618.00" -> ok. Nhưng (atof "-618.00") -> -618.0 (Không đúng)
Ngoài ra, cần phải thiết lập biến Dimzin=0 :rolleyes:
Chúng ta đang bàn đến việc làm tròn số, không fải về việc thể hiện 1 số duới dạng chuỗi như thế nào bạn ạ.
[round 618.003 ; 2] = 618.00 = 618.0 = 618.000000000000000000000000000000000000000 = 618
vì thế chả cần biến Dimzin làm gì.
-
Không biết cad2002 có Visual Lisp chưa nhỉ.
bác thử cái này để lấy list toạ độ LWpolyline xem
(defun get-vertex-lwpline (e/ iv L) (setq iv -1 L '()) (repeat (fix (1+ (vlax-curve-getEndParam e))) (setq iv (1+ iv) L (append L (list (vlax-curve-getPointAtParam e iv))))))
nếu vẫn không đuợc thì đành chơi cái này vậy - autolisp nên chạy dc với mọi bản cad
(defun get-vertex-lwpline (e / lstpt) (setq lstpt '()) (foreach x (entget e) (if (= (car x) 10) (setq lstpt (append (list (cdr x)) lstpt)))) lstpt)
Làm tròn tọa độ về 2 chữ số
(mapcar '(lambda (x1) (mapcar '(lambda (x2) (atof(rtos x2 2 2))) x1)) (get-vertex-lwpline (car(entsel))))
Còn việc cập nhật list point đã được làm tròn cho đường pline mình nghĩ là đơn giản thôi mà.
từ record của pline, bác loại bỏ mọi fần tử có mã DXF 10, 40, 41, 42, 91 rồi chèn các điểm point mới vào vị trí sau mã 39. entmod với record mới này là ok
-
1 cách đơn giản là bác chuyển các giá trị đó thành chuỗi bằng hàm rtos rồi lại chuyển nguợc lại thành số thực.
(atof (rtos x 2 2))
-
Thế này các bác ah, thường là em viết 1 dòng chữ nào đó trên cad vẫn dùng (Command "TEXT" ..., vẫn luôn bị vướng trong 2 trường hợp style hiện hành có chiều cao chữ =0 và khác 0, vì như thế sẽ phải viết đoạn sau của lệnh trên khác đi, thế nên thường thì em cứ tạo cho nó 1 kiểu chữ cho chắc, chẹp, nói chung là giờ thấy ko hợp lý lắm nên muốn hỏi các bác xem cad nó có lưu giá trị chiều cao chữ của style hiện hành ko ah? Em search thử rồi nhưng chưa ra
lấy chiều cao mặc định của textstyle hiện hành:
(cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))
PS: Sao bạn không xây dựng 1 hàm con để viết text bằng hàm entmake nhỉ. Ưu điểm là chạy nhanh hơn dùng command rất nhiều, không fụ thuộc vào các biến hệ thống liên quan đến textstyle, layer, color, width factor... và quan trọng là chẳng bao giờ fải lăn tăn về chiều cao chữ.
đây là hàm Maketext của mình, bạn có thể tham khảo và rút gọn nó cho fù hợp với nhu cầu của bạn.
(defun MakeText (point string Height Ang justify Style Layer Color xdata / Lst); Ang: Radial (setq Lst (list '(0 . "TEXT") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) (cons 10 point) (cons 40 Height) (cons 1 string) (if Ang (cons 50 Ang)) (cons 7 (if Style Style (getvar "Textstyle"))) (cons -3 (if xdata (list xdata) nil))) justify (strcase justify)) (cond ((= justify "C") (setq Lst (append Lst (list (cons 72 1) (cons 11 point))))) ((= justify "R") (setq Lst (append Lst (list (cons 72 2) (cons 11 point))))) ((= justify "M") (setq Lst (append Lst (list (cons 72 4) (cons 11 point))))) ((= justify "TL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 3))))) ((= justify "TC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 3))))) ((= justify "TR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 3))))) ((= justify "ML") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 2))))) ((= justify "MC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 2))))) ((= justify "MR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 2))))) ((= justify "BL") (setq Lst (append Lst (list (cons 72 0) (cons 11 point) (cons 73 1))))) ((= justify "BC") (setq Lst (append Lst (list (cons 72 1) (cons 11 point) (cons 73 1))))) ((= justify "BR") (setq Lst (append Lst (list (cons 72 2) (cons 11 point) (cons 73 1)))))) (entmakex Lst));end
-
1
-
-
Ketxu tiến bộ thật là đáng nể.
Tiếp nhé. Cad cung cấp cho người dùng 10 biến User để lưu vào bản vẽ, nhưng chúng chỉ chấp nhận 5 biến giá trị là Real và 5 biến giá trị integer.
Giờ mình muốn lưu 1 list vào 1 biến lưu trong bản vẽ, nghĩa là biến này vẫn tồn tại trong bản vẽ khi ta tắt bản vẽ đi.
List đó có thể gồm các phần tử: string, real, integer...
Cái này rất cần để viết các phần mềm lớn. Mình tin là có thể làm được vì Nova đã làm được điều tương tự. tuy nhiên chưa mò được.
-
Edit: tớ post nhầm topic :D
-
theo ngu ý của mình thì bạn có thể làm như thế này:
- tìm 1 điểm chắc chắn nằm trong đa giác. (cái này tùy vào dữ liệu của bạn, nếu có 1 điểm xác định trước rồi thì OK, nếu chưa thì bạn có thể lấy trọng tâm của đa giác đó)
- tìm giao điểm thực của đa giác đó với đuờng nối giữa 2 điểm (điểm nằm trong đa giác và điểm cần xác định)
- nếu tồn tại giao điểm thì điểm cần xác định nằm ngoài đa giác và nguợc lại.
PS: cách này không áp dụng đuợc với miền kín chứa lỗ thủng nhé
-
1
-
-
Mình có một vấn đề nảy sinh trong quá trình viết lisp là làm sao để biết được và lấy được giá trị của các biến toàn cục mà trong quá trình viết lisp mình đã đặt (dùng tới nó và hiện đang lưu giá trị trong bản Cad đang mở). Ví dụ: (defun C:text() (setq A ....)). Vì biến A là biến toàn cục nên nó sẽ lưu trong môi trường bản vẽ. Vậy có cách nào để lấy được giá trị biến A và các biến tương tự A mà không cần biết biến A tên chính xác như thế nào không? (Vì thực tế có rất nhiều biến tương tự A mà mình không nhớ hết được). Mong các bác có cao kiến gỡ rối cho em vụ này với. Cám ơn các bác
Diễn đạt lòng vòng khó hiểu. Nói chính xác và ngắn gọn thì Nataca muốn tìm danh sach tất cả các biến toàn cục đang tồn tại trong bản vẽ các bác ạ. <_<
-
Mình ra truờng với hơn 1 nửa số môn fải thi lại, học lại. hơn 3năm rồi vẫn chưa lấy đuợc bằng, cũng không cảm thấy bi đát lắm. Có bằng như bạn là đuợc rồi.
Cố lên anh bạn trẻ, đời còn dài,cơ hội còn nhiều, chả việc gì fải xoắn :rolleyes:
-
có lẽ phamngoctukts chưa hiểu điều mình nói.
bạn viết code như thế này.
(defun C:test nil
(command "undo" "begin")
.... làm 1 việc gì đó khoảng 5000 lần bằng hàm command. (viết 1 nội dung text ra màn hình chẳng hạn)
(command "undo" "end") (princ))
rồi sau khi chạy lệnh test bạn thử undo lại xem. mời bạn ngồi chờ <_<
-
Thật mệt mỏi với hàm Command quá!
Các chương trình sử lý 1 khối luợng lớn các công việc bằng hàm Command không những gây chậm mà còn có nhuợc điểm rất khó chịu là khi chuơng trình chạy xong, muốn undo lại rất cực khổ, chờ dài cổ mới xong, ngoài ra còn kèm theo 1 loạt thông báo (Lisp Expression) ngứa mắt, đôi khi làm treo máy luôn. Biết vậy nhưng thỉnh thoảng vẫn fải dùng đến Command.
Các bác có cách nào khắc phục được vấn đề này không? hoặc chí ít là tắt cái dòng thông báo kia đi khi undo, chắc sẽ nhanh hơn chút xíu.
-
Tuyệt vời! Liveshow của bác lần này quả thật hoằn táng. Em đang chán lisp vì cạn ý tuởng thì bác tương cho quả này thật là sướng. :lol:
Cho e hỏi về chiều cao text ứng với từng khổ giấy.
trong Sử dụng AutoCAD
Đã đăng · Trả lời báo cáo
Cần hiểu chiều cao chữ theo 2nghĩa. cao chữ trong bản vẽ (tính bằng đơn vị bản vẽ) và cao chữ khi in ra giấy.
Chiều cao chữ khi in ra giấy là cái mà ta quan tâm, nó là kết quả thu được từ chiều cao chữ và tỷ lệ in bản vẽ
với cad đời cũ (từ 2007 trở xuống thì fải) thì việc xác định mấy con số này thực sự vất vả và làm tốn nhiều noron thần kinh. Các bản cad cao hơn cung cấp thuộc tính annotation cho đối tượng nên vấn đề này được giải quyết đơn giản hơn. áp dụng cho nhiều loại đối tượng chứ không chỉ text
với text thì làm như sau:
- giả sử bạn muốn in bản vẽ ra có chiều cao 1 loại text nào đó = 2mm (tầm khoảng này nhìn vừa mắt, dễ đọc) với mọi tỷ lệ in
- Thiết lập textstyle cho loại text đó với chiều cao text mặc định = 2 nếu đơn vị bản vẽ của bạn là minimeter (tương tự = 0.002 nếu đơn vị bản vẽ là meter...)
- tương ứng với mỗi bản vẽ có 1 tỷ lệ in cho bản vẽ đó. khi sử dụng textstyle đã tạo ở bước trên để viết text, cad sẽ kết hợp với tỷ lệ in của bản vẽ để tính toán lại chiều cao text sao cho đảm bảo yêu cầu khi in ra text luôn có chiều cao =2mm.
Cụ thể: tỷ lệ in của bản vẽ là 1:100, textstyle có chiều cao mặc định = 0.002 (m) thì text vẽ ra sẽ có chiều cao tính bằng đơn vị bản vẽ là 0.002x100=0.2 (cái này cad tính giúp ta rồi nên không cần fải quan tâm đến nó nữa) bạn chỉ cần làm 1 việc duy nhất là thiết lập tỷ lệ in bản vẽ về tỷ lệ mong muốn trước khi viết text là được.
Tặng bạn lệnh này để thiết lập tỷ lệ in cho nhanh
PS: các đối tượng cad muốn sử dụng chức năng này fải thiết lập bật chế độ Annotative. VD: khi tạo textstyle, bạn kích chọn mục annotative cho textstyle đó.
Muốn biết bản vẽ đang đặt tỷ lệ in là bao nhiêu bạn nhìn xuống thanh status của cad, chỗ hình cái fi tiêu 3 cạnh ý