Bee
-
Số lượng nội dung
553 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
37
Bài đăng được đăng bởi Bee
-
-
Dùng hàm ở trên thì dấu thập phân bị mất. Nên theo ý bác Hạ!
*** VL-, VLA- ... Tham khảo: http://www.afralisp.net/archive/
Thập phân và chữ ko dấu thì update cái này của Tharwat ^_^
Nói chung là còn nhiều trường hợp nên chủ thớt phải tự xử lý theo ý của mình thôi.
(defun search (s) (vl-list->string (vl-remove-if '(lambda (x) (or (< 64 x 91) (< 96 x 123) ) ) (vl-string->list s) ) ) )-
1
-
-
Em có một vấn đề muốn nhờ các cao thủ autolisp giúp đỡ. Ví dụ em có chuỗi text "Chiều dài đoạn là 150.5m" em muốn tách phần số 150.5 ra khỏi chuỗi text. Kính nhờ các cao thủ trợ giúp ạ.
Search search và search ^_^ tham khảo tí cái này thôi nhé.
(setq number (search "Chieu dai doan la 150.5m"))
(defun search (s) (vl-list->string (vl-remove-if '(lambda (x) (or (< x 48) (> x 57))) (vl-string->list s) ) ) )-
1
-
-
Cá tính của tôi không bao giờ chơi khăm người khác, trừ khi nó nằm trong mục "đố vui".
Rất cám ơn Bee và Quocmanh04tt, nhưng tôi chịu, dù cả ngày nay cố gắng GG.
Cái này như quocmanh nói là gốc tọa độ block gốc là không trùng với 0. nên lisp tính toán sai. Em ít khi bị dính trường hợp này nên ko để ý. Mà có khi e còn không biết tạo cái block khác gốc tọa độ này ntn. ^_^
Cách sửa nếu chui vào BEDIT thì tất cả block đã chèn sẽ bị nhẩy sai hết. Vì vậy chỉ có cách là nổ block cũ và tạo 1 block mới với tọa độ chuẩn 0.. Sau đó thì lisp mới chèn ngược lại các block đã có trong bản vẽ. Đó là cách đơn giản nhất mà e nghĩ được.
Hi vọng ngóng được cách thay đổi tọa độ gốc trong block qua lisp của mọi người mà ko phải làm cách trên.
^_^
-
Paste dòng này vào text hoặc att block: %<\AcVar ctab>% thì sửa tên layout tên bản vẽ thay đổi theo.
-
1
-
-
Uhm, đúng mà không test trên file bác Hạ.
Và cũng đúng theo ý kiến quocmanh. :o
Bác Hạ soi được lỗi ở đâu chỉ cho e biết với :)
-
Dùng cho LWPOLYLINE như thế này mà sao nó chuyển sai Bee nhỉ (Line thì OK):
File test:
http://www.mediafire.com/file/vdcdleyjkxd08gz/Test.dwg
((= "LWPOLYLINE" typ) (setq lst (cons (list typ (mapcar '(lambda(p) (mapcar '+ ins (mxv mat p))) (mapcar 'cdr (vl-remove-if-not '(lambda(x) (eq (car x) 10)) elst)))) lst)))
Hì bác cứ đùa e. LW thì ko có z nên nó hiểu sai mà. :) Thêm cho nó 1 mapcar nữa là chuẩn.
((= "LWPOLYLINE" typ) (setq lst (cons (list typ (mapcar '(lambda (p) (mapcar '+ ins (mxv mat p))) (mapcar '(lambda (aa) (append aa (list 0.))) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (eq (car x) 10)) elst) ) ) ) ) lst ) ) ) -
Thiếu xref thôi.^_^
-
Có cái này đơn giản hơn này:
(defun c:tt (/ a b c l)
(cond ((setq a (entsel))
(and (eq (cdr (assoc 0 (entget (car a)))) "INSERT")
(setq b (nentselp (cadr a)))
(eq (cdr (assoc 0 (entget (car B)))) "LWPOLYLINE")
(setq c (entmakex (entget (car B))))
(not (vla-transformby (vlax-ename->vla-object c) (vlax-tmatrix (caddr B))))
(setq l (mapcar 'cdr (vl-remove-if-not '(lambda (x) (eq (car x) 10)) (entget c))))
(entdel c))))
l)
:D
-
1
-
-
Mọi người cho hỏi ngu tí:
Tôi có 1 block_att chứa 1 pline và 1 att, đem chèn nó vào điểm A, sau đó move qua điểm B. Làm thế nào để lấy tọa độ các đỉnh pline khi chọn block đã move? Vì khi lấy entget của các đối tượng con của block thì tọa độ pline nó lấy tọa độ lúc chèn (điểm A) chứ không phải tọa độ sau move (điểm 'B). Không nổ block nhé.
Cách khác,
Bác Hạ tham khảo code này của Giles, pline thì bác thay ngon lành qua matrix ^_^
;; Entmatrix ;; Returns a list which first item is the 3X3 tranformation matrix and second item ;; the insertion point of a block refernce in its owner (space or block definition) (defun EntMatrix (ename / elst ang norm) (setq elst (entget ename) ang (cdr (assoc 50 elst)) norm (cdr (assoc 210 elst)) ) (list (mxm (mapcar (function (lambda (v) (trans v 0 norm T))) '((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0)) ) (mxm (list (list (cos ang) (- (sin ang)) 0.0) (list (sin ang) (cos ang) 0.0) '(0.0 0.0 1.0) ) (list (list (cdr (assoc 41 elst)) 0.0 0.0) (list 0.0 (cdr (assoc 42 elst)) 0.0) (list 0.0 0.0 (cdr (assoc 43 elst))) ) ) ) (trans (cdr (assoc 10 elst)) norm 0) ) ) ;; Blk2Coord ;; Returns a list of a block reference entities coordinates (defun Blk2Coord (ref mat ins / blk ent lst) (setq blk (tblsearch "BLOCK" (cdr (assoc 2 (entget ref))))) (setq ent (cdr (assoc -2 blk))) (while ent (setq elst (entget ent) typ (cdr (assoc 0 elst)) ) (cond ((= "LINE" typ) (setq lst (cons (list typ (mapcar '+ ins (mxv mat (cdr (assoc 10 elst)))) (mapcar '+ ins (mxv mat (cdr (assoc 11 elst)))) ) lst ) ) ) ((member typ '("POINT" "TEXT")) (setq lst (cons (list typ (mapcar '+ ins (mxv mat (cdr (assoc 10 elst)))) ) lst ) ) ) ((= "INSERT" typ) (setq nent (EntMatrix ent)) (setq lst (append lst (Blk2Coord ent (mxm mat (car nent)) (mapcar '+ ins (mxv mat (cadr nent))) ) ) ) ) (T nil) ) (setq ent (entnext ent)) ) (cons (list (cdr (assoc 2 blk)) ins) lst) ) ;; Transpose a matrix Doug Wilson (defun trp (m) (apply 'mapcar (cons 'list m)) ) ;; Apply a transformation matrix to a vector by Vladimir Nesterovsky (defun mxv (m v) (mapcar (function (lambda (r) (apply '+ (mapcar '* r v)))) m ) ) ;; Multiply two matrices by Vladimir Nesterovsky (defun mxm (m q) (mapcar (function (lambda (r) (mxv (trp q) r))) m) ) ;; Main function (defun c:test (/ ss n ent mtx lst) (if (setq ss (ssget '((0 . "INSERT")))) (repeat (setq n (sslength ss)) (setq ent (ssname ss (setq n (1- n))) mtx (EntMatrix ent) lst (append (Blk2Coord ent (car mtx) (cadr mtx)) lst) ) ) ) (mapcar 'print lst) (textscr) (princ) )-
1
-
-
Chọn các đường cần điều chỉnh, đánh "mo", chuyển xuống Custom điều chỉnh Distence1 thành độ dài cần điều chỉnh.
:D ngon. thanks. Đôi lúc đầu óc chả nghĩ đc je .
-
Như tiêu đề bác nào biết chỉ cho e quơ 1 phát bằng lệnh stretch mà chọn đc hết grip block dynamic và stretch được hết ko nhỉ ? Dạo này bận quá ko có time nghiên cứu.
https://drive.google.com/open?id=0B2au9UBdk06UY1BEX1VPNENZbnc
Thanks.
-
Em có muốn viết 1 lisp sửa Pline theo 1 pline mẫu nhưng vẫn giữ nguyên Entity name (theo em hiểu thì thằng này giống IDobject) của đối tượng sửa nhưng khả năng có hạn nên chưa thể viết được, Mong các anh giúp đỡ em.


Sao phải giữ nguyên ID. Phức tạp hóa vấn đề nhỉ ? Offset thằng tím ra xong matchprop thằng xanh cho thằng mới là xong. ^_^
-
2. Lệnh entmake Line này có từ cad bao nhiêu trở lên vậy. Vì em đang xài cad 2007.
--------->>>>>>Lệnh entmake có từ cad 14 tới cad 2017 ^_^
-
Em mới học về autocad nhưng chưa biết xử lý theo ý yêu cầu tiêu đề

Filter line theo màu ^_^
-
Cám ơn các bác đã góp ý cho em học hỏi đc thêm nhiều điều, em có một mong muốn cải tiến nho nhỏ cái líp trên nữa.. giúp em viết thêm 2 dòng này với
- Lấy màu của Text đối tượng để đưa vào màu cho block vừa insert vào.
- Nếu ko có block "CODE_COL" trong bản vẽ thì báo về "Chua khoi tao block CODE_COL".
Em xin cám ơn!!!!
1. Bạn nên post dwg ví dụ thì làm nhanh hơn rất nhiều.
2. Để thay đổi màu att có nhiều cách: command BATTMAN hoặc BEDIT xong dùng ATTSYNS là thay hết màu......
-
1
-
-
Cả 2 biến kết hợp. Nó hoặc hiện prompt hoặc hiện dialog khi insert block_att. Tôi đã từng bị lỗi 1 lần về chúng rồi.
Ah cái thằng ATTREQ set to 1 chứ để 0 nó không chèn value mà chèn defaults. Ok thanks bác DVH. ^_^ Ồ mà tên bác viết tắt như Đàm Vĩnh Hưng nhỉ ^_^ Ca sĩ nổi tiếng. :)
-
1
-
-
ATTDIA + ATTREQ ảnh hưởng đến user mà?
ATTDIA tắt bảng cho nhập dòng lênh thôi mà bác. Em thấy có không trả lại biến nó vẫn hiện ở command promp nên ko ảnh hưởng nhiều. ^_^ Hì
-
Thay đổi biến ATTDIA mà không trả lại cho người ta kìa bác ^^
He he nó không ảnh hưởng gì nên cứ để vậy thoai ^_^
-
Cad 2014 không có, đang phải tải cad 2015 cài lại. Thanks @Beenhé
Update CAD2017 luôn cho khỏe ^_^
-
Mình đang làm bản vẽ thì bị dính cái này lâu rồi nhưng không rõ sửa ra sao. Cụ thể là mình vẽ shop cho một công ty Hàn, khi copy từ bản vẽ này sang bản vẽ kia thì đi theo là vô vàn block. Dùng lệnh PU không xóa được. Cũng không hiện trong block editor. Ctrl + A ròi xóa hết bản vẽ cũng ko hết. Dung lượng bản vẽ thì rất nặng ( 18 đến 60 mb. có bản đến 90 mb) Ai biết sửa thì giúp mình cái
https://drive.google.com/file/d/0B_gvmtf7vpDaWDE3SEN3YlFiV3c/view?usp=sharing
Link bản vẽ mọi người giupsm ình với. Thanks trước
Vẫn dùng lệnh PU nhưng tick vào ô: Automatically purge orphaned data là hết block lởm khởm ngay ^_^ Sau khi PU còn có 99Kb
-
2
-
-
Thưa các bác, kiểu là em có sẵn 1 block CODE_COL vs 4 attribute
-Tên_cột
-Cao_đáy
-Cao_đỉnh
-Trừ_cao
và mặt bằng có text tên cột C1, C2... Cn. Em muốn chọn tất cả các text tên cọc và chạy LISP để biến tất cả các text tên cột đó thành block CODE_COL vs tên cột được đưa vào attribute Tên_cột... bác nào đi qua giúp dùm em với, em xin cám ơn trc!
Nghịch tí nào. Lisp yêu cầu là đã có block CODE_COL trong bản vẽ nhé. ^_^
(defun c:test (/ osm ss n value ins) (setq osm (getvar 'osmode)) (if (setq ss (ssget '((0 . "TEXT")))) (progn (setq n 0) (repeat (sslength ss) (setq value (cdr (assoc 1 (entget (ssname ss n))))) (setq ins (cdr (assoc 10 (entget (ssname ss n))))) (mapcar 'setvar (mapcar 'vl-list->string (list '(65 84 84 68 73 65) '(79 83 77 79 68 69))) '(0 0)) (command "insert" "CODE_COL" ins 1 1 0 value "" "" "") (entdel (ssname ss n)) (setq n (1+ n)) ) ) (princ "\nBan da khong chon text.") );if (setvar 'osmode osm) (princ) )-
1
-
-
Chào mọi người. Cho mình hỏi ké vào đây với chẳng mình chưa biết cách tạo bài việt trên diễn đàn.
Mình đang vẽ 2d một sảng phẩm, mình xuất từ NX sang, nhưng giờ mình muốn copy 3 hình chiếu trên bản cad đó ra 3 file riêng lại ko copy được.
( mình copy nhưng lúc nào cũng chỉ copy được một hình chiếu thôi).
Bạn nào biết các sửa thì chỉ cho mình với. và có thể copy ra 3 file hộ mình với ạ. Mình xin cả ơn.
http://www.mediafire.com/file/9000eyvu4wa2ktd/sanphamlamdoan.dwg
https://drive.google.com/file/d/0B-3fZ45DSr_XMGMzUnJETkhhWGs/view?usp=sharing
Xuat thành 2D luôn ^_^
-
Xin chào các bác. Em muốn xác định 2 đỉnh đối nhau của khung tên được Xref để làm lisp IN [ lisp in chỉ quét khung tên được chọn thì tự bắt 2 đỉnh để preview hoặc in với đk mình đã ADDlayout từ trước ]. Mong các bác chỉ giáo thêm, em xin cảm ơn
Có thể dùng box của Lee nhé. ^_^
Code here:
(defun c:test ( / ent ) (if (setq ent (car (entsel))) (entmake (append '( (000 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (090 . 4) (070 . 1) ) (mapcar '(lambda ( p ) (cons 10 p)) (LM:boundingbox (vlax-ename->vla-object ent))) ) ) ) (princ) ) (vl-load-com) (princ) ;; Bounding Box - Lee Mac ;; Returns the point list describing the rectangular frame bounding the supplied object. ;; obj - [vla] VLA-Object (defun LM:boundingbox ( obj / a b lst ) (if (and (vlax-method-applicable-p obj 'getboundingbox) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'a 'b)))) (setq lst (mapcar 'vlax-safearray->list (list a b))) ) (mapcar '(lambda ( a ) (mapcar '(lambda ( b ) ((eval b) lst)) a)) '( (caar cadar) (caadr cadar) (caadr cadadr) (caar cadadr) ) ) ) ) -
Xin các chuyên gia CAD giúp đỡ.
Mình có một mặt bằng Ngũ Giác A,B,C,D,E ( không phải ngũ giác đều) đã có tất cả chiều dài từng đoạn.
Các góc đo không có. Làm sao mình dựng được hình này lên Autocad. Mục đích là mình dựng lên Autocad để lấy tọa độ.
Xin cảm ơn nhiều.
Trường hợp tổng quát như bác Hạ nói là đúng. Nhưng trong trường hợp cụ thể: có thể scan thành jpg, vẽ gần đúng góc và chính xác cạnh thì có thể vi chỉnh gần đúng được. Tóm lại là post hình lên rồi mọi người sẽ dựng CAD gần đúng nhất cho ^_^
Lisp Về Tính Độ Dài
trong AutoLisp
Đã đăng · Trả lời báo cáo
Tính độ dài 1 đường thì trên này có nhiều. Search là ra thôi mà. ^_^