Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

Các bài được khuyến nghị

Bác Hoanh ơi giúp e với em có câu lệnh này

(defun c:sb ()(ssget)(command "draworder" "p" "" "b" ""))

Bác giúp e thêm 1 mã lệnh để sao cho khi ta gõ lệnh sb nó sẽ tự động chon tất cả đối tượng hatch trong bản vẽ với

Cảm ơn bác trước nhé ......... help me.......

 

(ssget) của Bạn thay bằng cái này (ssget "X" '((0 . "Hatch")) )

  • 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
bác nào giúp em với. Em đang cần 1 lisp với nội dung sau

Giả sử bản vẽ ta có 4 lớp : 1,2,3,4

e muốn có 1 lisp có thể mặc định lớp 2 luôn nằm trên lớp 1,3,4

Nôm na e muốn có 1 lisp quản lý hệ thống layer sao cho ta có thể mặc định 1 lớp luôn nằm trên hay nằm dưới các lớp khác giống như quản lý layer trong shop đó các bác

Mong các bác cao thủ giúp em với...........hic hic

AutoCAD không quản lý layer theo kiểu của PhotoShop hay CorelDraw. Trong AutoCAD, cái nào sinh ra sau được nằm trên, bất kể ở layer nào. User chỉ có thể hoán đổi thứ tự ấy cho một nhóm đối tượng cụ thể nào đó đã được chỉ định bằng lệnh "draworder". Yêu cầu của bạn không thể thực hiện được về nguyên tắc!

Đúng hơn, có thể thực hiện được cho các đối tượng đã tồn tại trên bản vẽ bằng lisp sau:

(defun C:FR( / lay ss)
(setq
lay (cdr (assoc 8 (entget (car (entsel "\nChon doi tuong mau:")))))
ss (ssget "X" (list (cons 8 lay)))
)
(command "draworder" ss "" "f")
)

 

Lệnh FR, chọn 1 đối tượng bất kỳ -> toàn bộ các đối tượng đang có trong bản vẽ, cùng layer với đối tượng vừa chọn sẽ nhảy lên trên. Nhưng những đối tượng mới, được tạo ra kể từ đó về sau, vẫn theo quy luật "sinh ra sau được nằm trên" như đã nó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

Trong hộp thoại, khi tính toán xong các giá trị đầu vào trong các ô thường mất đi, Làm cách nào để khi tính toán xong thi các giá trị đó vẫn được lưu lại trong ô tính toán không nhỉ (cho đỡ phải nhập lại từ đầu mà). Bác Hoang xem giúp em được không 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

(defun c:C[color="#FF0000"]N[/color]InVis	(/ SSet Count Elem)
 (defun Dxf (Id Obj)
   (cdr (assoc Id (entget Obj)))
 )					;end Dxf
 (cond
   ((setq SSet
    (ssget
      "X"
      [color="#FF0000"](append
	(list (cons -4 "<NOT"))[/color]
      (filterchondttheomau
	(maucuadoituong
	  (car (entsel "\nHay pick vao doi tuong de chon mau: ")
	  )
	)
      )
	[color="#FF0000"](list (cons -4 "NOT>")))[/color]
    )
    )
  [b][color="#FF0000"]  ssadd[/color][/b]
    (repeat (setq Count (sslength SSet))
      (setq Count (1- COunt)
     Elem  (ssname SSet Count)
      )
[b][color="#FF0000"]       (if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))[/color][/b]
 (if (Dxf 60 Elem)
   (entmod
     (subst '(60 . 1) (assoc 60 (entget Elem)) (entget Elem))
   )
   (entmod (append (entget Elem) (list '(60 . 1))))
 )
 (prompt
   "\nEntity on a locked layer. Cannot hide this entity. "
 )
      )				;end if
    )					;end repeat
   )
 )					;end cond
 (princ)
)					;end c:InVis
(defun maucuadoituong (ent)
 (setq	tt   (entget ent)
chon (assoc 62 tt)
 )
 (cond
   (chon (cdr chon))
   (t (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 tt))))))
 )
)
(defun filterchondttheomau (mau)
 (defun chonlayertheomau (mau / kq)
   (setq curlay (tblnext "LAYER" t))
   (while curlay
     (if (= mau (cdr (assoc 62 curlay)))
(setq kq (append kq (list (cdr (assoc 2 curlay)))))
     )
     (setq curlay (tblnext "LAYER"))
   )
   kq
 )
 (setq	filterlist
	   nil
taplayer   (chonlayertheomau mau)
 )
 (foreach pp taplayer
   (setq filterlist
   (append filterlist
	   (list (cons -4 "<AND")
		 (cons 62 256)
		 (cons 8 pp)
		 (cons -4 "AND>")
	   )
   )
   )
 )
 (setq	filterlist
 (append (list (cons -4 "<OR") (cons 62 mau))
	 filterlist
	 (list (cons -4 "OR>"))
 )
 )
)

(if (/= 4 (logand 4 (Dxf 70 (tblobjname "layer" (Dxf 8 Elem)))))

 

Bác NguyenHoanh ơi giải thích gùm em hàm logand dùng trong trường hợp này có tác dụng như thế nào? Vì theo em hiểu hàm Logand là "and ở dạng nhị phân các số nguyên".

Và hàm ssadd đứng 1 mình ( không nằm trong cặp dấu "()" ) có ý nghĩa như thế nào?

Em đọc lisp ẩn đối tượng của bác có 2 phần trên chưa hiểu. Bác giúp em nhé. Cám ơn bác :lol:

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

Xin chào cả nhà! Các bác cho em hỏi trên diễn đàn đã có lisp nào chuyển được các text đang ở chữ thường thành chữ hoa không ạ, Em tìm kiếm nhưng mà không có.

Các bác có thể viết cho Em một cái lisp mà chuyển từ chữ thường thành chữ hoa và ngược lại được không. Tại Em phải sửa bản vẽ mà toàn ghi chú bằng chữ thường thôi muốn chuyển thành chữ hoa mà phải gõ lại thì toi mất.

Cám ơn các Bác 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
Chào Bác NguyenHoanh

Nhờ bác viết dùm đọan code vẽ mặt cắt ngang từ file bình đồ điểm là file cad có các điểm text 2d

Xin cám ơn!

 

bạn nói rõ hơn ý của bạn ! bạn dùng cho tính toán khối lượng nạo vét, hay làm gì ?!

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
bạn nói rõ hơn ý của bạn ! bạn dùng cho tính toán khối lượng nạo vét, hay làm gì ?!

Mình dùng để vẽ mặt cắt ngang hiện trạng theo vết cắt (vết cắt là đường line hoặc pline) trên bình đồ điểm (điểm là các text 2D)

Nhờ bạn giúp dùm! 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
Bạn có thể post yêu cầu về autolisp ở topic này.

bạn nào viết cho mình lisp mà thay cái phím esc -->phím chuột phải (right click)được ko.chuột phải mình ít khi dùng mà với tay lên cái phím esc xa qua. heee.cam ơn trướ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

Các bác ơi em có đoạn mấ này

(defun c:3 ()

(ssget)

(command "CHANGE" "P" "" "p" "la" "vat lieu" "")

)

Tác dụng là nó chuyển toàn bộ đối tượng được chọn sang layer vat lieu

Em muốn các bác giúp e thêm 1 đoạn mã để khi ấn lệnh nó chọn toàn bộ hatch trong bản vẽ đồng thời chuyển chúng sang layer vat lieu luôn

Nếu được các bác khuyến mãi e đoạn mã tương tự nhưng đối tượng không phải là hatch mà là toàn bộ dim trong bản vẽ

Em trân thành cảm ơn các bác 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

Sorry các bác sau khi đọc xong đoạn mã này của bác tien2005

 

(ssget) của Bạn thay bằng cái này (ssget "X" '((0 . "Hatch")) )

 

em đã ngộ ra được chân lý và làm được rồi

đã làm phiên các bác

Cảm ơn bác tien2005 nhiều 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

Bác Ngọc Quan õi !xin bác giúp cho em cái lisp tạo layer của bác !Em cần nó lắm ! nhýng tìm hoài mà ko thấy ! khi post bài thì ko có ai trả lời ! hix ! làm õn nha bác ! xin bác giúp cho !

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
Trong hộp thoại, khi tính toán xong các giá trị đầu vào trong các ô thường mất đi, Làm cách nào để khi tính toán xong thi các giá trị đó vẫn được lưu lại trong ô tính toán không nhỉ (cho đỡ phải nhập lại từ đầu mà). Bác Hoang xem giúp em được không nhỉ.

Ý bác nói về hộp thoại nào trong Cad?

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
Bác Ngọc Quan õi !xin bác giúp cho em cái lisp tạo layer của bác !Em cần nó lắm ! nhýng tìm hoài mà ko thấy ! khi post bài thì ko có ai trả lời ! hix ! làm õn nha bác ! xin bác giúp cho !

 

 

(DEFUN CREATELAYER(laname lacolor lalt);; Tao mot layer moi (tenlayer mauyer duongnetlayer)
(if (tblsearch "LAYER" laname);; Kiem tra layer da ton tai
	(princ (strcat "Layer" laname " da ton tai")
	(if (tblsearch "LTYPE" ltname);if linetype exsists
	  (command "._Layer" "_Make" laname "_Color" lacolor laname "_LT" ltname laname "")
	  (command "._Layer" "_Make" laname "_Color" lacolor laname "_LT" "Continuous" laname "")
	)
)
)

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
làm thế nào để mờ đi một lệnh trong một menu.

 

ví dụ: làm mờ lệnh LINE trong menu Draw

-Nếu muốn làm 1 mục nào đó mờ ngay từ khi vừa khởi động cad thì thêm dấu ~ tại vị trí như đaon5 dưới đây.

[--]

ID_luu [~Luu lai thu vien]^C^C^C_luutvnd

ID_nhap [~Cap nhat thu vien]^C^C^C_capnhattvnd

ID_gioithieu [~Gioi thieu]^C^C^C_foryou lgoduyfy.sld;

[--]

-Muốn can thiệp cho mờ đi bằng dòng lệnh thì làm như sau:

(MENUCMD "Gtvnd.ID_nhap=~")

-Muốn hiện lại thì làm như sau:

(MENUCMD "Gtvnd.ID_nhap=")

  • 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
-Nếu muốn làm 1 mục nào đó mờ ngay từ khi vừa khởi động cad thì thêm dấu ~ tại vị trí như đaon5 dưới đây.

[--]

ID_luu [~Luu lai thu vien]^C^C^C_luutvnd

ID_nhap [~Cap nhat thu vien]^C^C^C_capnhattvnd

ID_gioithieu [~Gioi thieu]^C^C^C_foryou lgoduyfy.sld;

[--]

-Muốn can thiệp cho mờ đi bằng dòng lệnh thì làm như sau:

(MENUCMD "Gtvnd.ID_nhap=~")

-Muốn hiện lại thì làm như sau:

(MENUCMD "Gtvnd.ID_nhap=")

Uh hay ghê duy782006 ơi lâu nay mình ko biết chiện này. Xin cám ơn nhiều..... :lol:

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
Bạn dùng lisp này, lệnh BRK:

 

;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e)
(setq i 0 Le nil)
(repeat (sslength ss) 
   (setq
       e (ssname ss i)
       Le (append Le (list e))
       i (1+ i)
   )
)
Le
)
;;;-------------------------------------------------------------
(defun DXF (code e) (cdr (assoc code (entget e))) )
;;;-------------------------------------------------------------
(defun get_inters(e1 e2 / p11 p12 p21 p22)
(setq
   p11 (dxf 10 e1)  p12 (dxf 11 e1)
   p21 (dxf 10 e2) p22 (dxf 11 e2)
)
(inters p11 p12 p21 p22) 
)
;;;-------------------------------------------------------------
(defun C:BRK( / ss L Lp e1 e2 p e)
(setq
   ss (ssget '((0 . "LINE")))
   L (ss2ent ss)
   Lp nil
)
(foreach e1 L
   (foreach e2 L
       (setq p (get_inters e1 e2))
       (if (and p (not (member p Lp))) (setq Lp (append Lp (list p))))
   )
)
(foreach p Lp
   (setq
       ss (ssget "C" p p '((0 . "LINE")))
       L (ss2ent ss)
   )
   (foreach e L (command "break" e p p))
)
(princ)
)
;;;-------------------------------------------------------------

 

bác nào có thể sửa lại để ta có thể chọn bất kỳ đối tượng nào như : arc, spline ko giới hạn ở line

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
Bạn có thể post yêu cầu về autolisp ở topic này.

nhờ bac Hoanh tìm dùm phần mềm nào thống kê được khối lượng vật tư điện trên bảng vẽ cad khg, e tìm trên diễn đàn mà khg thấy, cam ơn nhiều, em cần gấp lắm, e là dân điện, khg phải dân xây dự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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×