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ị

Anh Hoành viết hộ em 1 đọạn lisp nhé:

 

chả là em có 1 thư viện cad, mỗi lần muốn goị 1 file lên thì phải gõ đường dẫn .

ta phải nhập vào 1 đường dẫn: Vidụ: "D:\THUVIEN\CADVIET\BANGHE2D" (có thể thay đổi)

Lisp này với mục đích là: lưu lại đường dẫn này (chắc là phải lưu vào regedit) . khi tắt cad đi, bật lại thì không phải nhập lại đường dẫn 1 lần nào nữa. mà có thể dùng các defun tiếp theo của file lisp, còn nếu phát hiện chưa có đương dân hiện hành thì lại hiên ra dòng: "duong dan la gì:"

 

Chờ hồi âm của các anh!

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
Anh Hoành viết hộ em 1 đọạn lisp nhé:

 

chả là em có 1 thư viện cad, mỗi lần muốn goị 1 file lên thì phải gõ đường dẫn .

ta phải nhập vào 1 đường dẫn: Vidụ: "D:\THUVIEN\CADVIET\BANGHE2D" (có thể thay đổi)

Lisp này với mục đích là: lưu lại đường dẫn này (chắc là phải lưu vào regedit) . khi tắt cad đi, bật lại thì không phải nhập lại đường dẫn 1 lần nào nữa. mà có thể dùng các defun tiếp theo của file lisp, còn nếu phát hiện chưa có đương dân hiện hành thì lại hiên ra dòng: "duong dan la gì:"

 

Chờ hồi âm của các anh!

Tôi dùng một thuật toán khác là mỗi khi gọi một file (lần đầu) thì copy file đó vào một thư mục (support chẳng hạn).

Mỗi khi dùng lệnh, chỉ cần kiểm tra sự tồn tại của file đó trong thư viện, nếu chưa có thì lại copy vào.

Đây là đoạn code tôi dùng để load file dcl, bạn có thể sửa lại để dùng với thư việc cad

(setq	Supportdir (strcat (getvar "ROAMABLEROOTPREFIX") 
		   "support"
	   ) ; [b]Bạn có thể thay supportdir bằng một folder cố định riêng, 
                         ;; nhưng ko hay lắm vì khi folder bị sửa tên là hỏng hết [/b]
DirDCL	   (strcat supportdir "\\DCLinfor.DCL") ; [b]tên file có thể đưa vào một biến nào đó 
                                                           ;;(chẳng hạn blockname mỗi khi insert)[/b]
 )
 (if (= nil (findfile DirDCL))
   (progn
     (setq DirDCL1 (getfiled "Chon file DCL" 
		      ""
		      "dcl" ; [b]Tại đây thay bằng đuôi DWG[/b]
		      8
	    )
     )
     (vl-file-copy DirDCL1 DirDCL)	;(vl-file-delete DirDCL) [b]- Hàm này dùng khi muốn xoá file khỏi thư viện[/b]
   )
 )

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 có cái lisp tính Trung bình cộng các số (>2 số) cho e dowload với.bác Nguyễn Hoành ra tay jiúp đàn em với

bạn dùng lệnh CAL để tí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

Mong các bác giúp đỡ tôi 1 lisp như sau:

Tôi có 1 dãy các Dtext khác nhau.(như bản vẽ Up lên)

Giá trị của Dtext có 2 dãy số khác nhau cách nhau bởi dấu cách.(Đó chính là toạ độ X và Y của các điểm)

Tôi muốn tách Dtext đó thành 2 Dtext khác nhau mà giá trị của mỗi Dtext chính là 1 dãy số trong Dtext ban đầu.(tức là lấy riêng ra toạ độ X và Y trong dãy đó).

Cảm ơn rất nhiều.

http://www.cadviet.com/upfiles/Drawing3.rar

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 có cái lisp tính Trung bình cộng các số (>2 số) cho e dowload với.bác Nguyễn Hoành ra tay jiúp đàn em với

Bạn dùng đoạn code sau, lệnh AV, yêu cầu chọn nhiều text và cuối cùng chọn 1 text để ghi kết quả

(defun myerror (s)
 (cond
   ((= s "quit / exit abort") (princ))
   ((/= s "Function cancelled") (princ (strcat "\nError: " s)))
 )
 (setvar "cmdecho" CMD)             ; Restore saved modes
 (setvar "osmode" OSM)
 (setq *error* OLDERR)               ; Restore old *error* handler
 (princ)
)

(defun bocchu (ss1 c) (setq ob (entget (ssname ss1 c))) (setq ts (assoc 1 ob)) (setq a (cdr ts)))
(defun sothanhchu (num) (rtos num 2 2))
(defun thaychu (Ob newstr) (setq txtstr (assoc 1 Ob)) (setq newstr (cons 1 newstr)) (entmod (subst newstr txtstr Ob)))
(defun chonchu (dongnhac) (prompt dongnhac) (ssget '((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))))
(defun chon (str) (ssget '((cons(0 str)))))
(defun bamchon(st) (entget (car (entsel st))))
(defun bocdt (ss1 c) (entget (ssname ss1 c)))

(defun c:av ()
(command "undo" "mark")
(setq ss1 (chonchu "\nChon cac so can tinh trung binh ...")
      c 0
      total 0
      tolnum (sslength ss1)
      )
(while (< c (sslength ss1))
	(setq num (atof (bocchu ss1 c))
	      total (+ num total)
	      )
  	(setq c (+ 1 c))
  )

 		(if (/= tolnum 0)
	  (setq average (/ total tolnum))
	  (setq average "error div 0")
	  )
       	(setq ss2 (chonchu "\nChon text chua kq ..."))
	(setq ob (bocdt ss2 0))
  	(setq st (sothanhchu average))

  	(thaychu ob st)

)

  • 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
Mong các bác giúp đỡ tôi 1 lisp như sau:

Tôi có 1 dãy các Dtext khác nhau.(như bản vẽ Up lên)

Giá trị của Dtext có 2 dãy số khác nhau cách nhau bởi dấu cách.(Đó chính là toạ độ X và Y của các điểm)

Tôi muốn tách Dtext đó thành 2 Dtext khác nhau mà giá trị của mỗi Dtext chính là 1 dãy số trong Dtext ban đầu.(tức là lấy riêng ra toạ độ X và Y trong dãy đó).

Cảm ơn rất nhiều.

http://www.cadviet.com/upfiles/Drawing3.rar

Bạn hãy chỉ rõ hộ là từ đâu bạn có được Dtext có toạ độ X và Y như thế. Và bạn muốn tách ra để làm gì? Người viết lisp không phải là cái máy thi hành bạn ạ. Biết đâu khi bạn nói ra ý nghĩa của bài toán của bạn thì chúng tôi lại giúp bạn giải quyết theo cách khác nhanh hơn. Tránh trường hợp viết lisp xong nhưng cũng chẳng giải quyết được việc gì. Cái bạn yêu cầu hoàn toàn làm được nhưng bạn hãy nói rõ hơn ý nghĩa bài toán bạn đưa ra nhé. Đồng ý khô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

Cảm ơn bạn đã quan tâm. Khi thiết kế bản vẽ thi công, mình phải định vị các điểm đầu cọc. Mình vẽ Pline qua tất cả các điểm đầu cọc đó thôi, sau đó dùng list thì sẽ được Dtext đó. Mình phải thống kê 1 bảng toạ độ, X,Y riêng của các cọc. Do đó mình mới đề nghị được giúp đỡ.

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ảm ơn bạn đã quan tâm. Khi thiết kế bản vẽ thi công, mình phải định vị các điểm đầu cọc. Mình vẽ Pline qua tất cả các điểm đầu cọc đó thôi, sau đó dùng list thì sẽ được Dtext đó. Mình phải thống kê 1 bảng toạ độ, X,Y riêng của các cọc. Do đó mình mới đề nghị được giúp đỡ.

Tôi có lisp xuất toạ độ các block và vẽ thành bảng toạ độ rồi xuất ra excel.

Nếu tại vị trí các cọc có chèn một block thuộc tính thì có thể dùng lệnh BID để chọn tất cả các block, với cách dùng block thuộc tính để chèn và đánh số tại vị trí cọc thì lệnh sẽ tự động sắp xếp thứ tự các điểm theo thứ tự tên cọc, còn ko bảng toạ độ vẽ ra sẽ ko theo thứ tự. Bạn có thể chỉnh sửa với bảng excel xuất ra rồi paste lại vào CAD.

Bạn có thể pick từng vị trí cọc một và đặt tên cọc tuỳ ý bằng lệnh XID (chọn prefix tên cọc, thứ tự bắt đầu, ... nhấn enter để kết thúc pick điểm và vẽ bảng, xuất file.

http://www.cadviet.com/upfiles/Export_texttmp.fas

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 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 "")
	)
)
)

============================== Tao ban ve moi ===========================

(Defun c:a4 (/)

(command "cmdecho" 0)

(command "units" "2" "0" "1" "0" "" "")

(Command "-linetype" "l" "center" "acad.lin" "" "")

(Command "-linetype" "l" "hidden" "acad.lin" "" "")

(Command "-layer" "n" "Defpoints" "c" "251" "Defpoints" "")

(Command "-layer" "n" "00 - MAX - 00" "c" "105" "00 - MAX - 00" "lw" "0.9" "00 - MAX - 00" "")

(Command "-layer" "n" "35 - Noi that" "c" "50" "35 - Noi that" "lw" "0.35" "35 - Noi that" "")

(Command "-layer" "n" "35 - Cat 1 (Tuong..)" "c" "53" "35 - Cat 1 (Tuong..)" "lw" "0.35" "35 - Cat 1 (Tuong..)" "")

(Command "-layer" "n" "25 - Cat 2 (Khuon..)" "c" "164" "25 - Cat 2 (Khuon..)" "lw" "0.25" "25 - Cat 2 (Khuon..)" "")

(Command "-layer" "n" "15 - Thay 1" "c" "137" "15 - Thay 1" "lw" "0.15" "15 - Thay 1" "")

(Command "-layer" "n" "15 - Thay 2" "c" "31" "15 - Thay 2" "lw" "0.15" "15 - Thay 2" "")

(Command "-layer" "n" "09- Thay 3" "c" "9" "09- Thay 3" "lw" "0.10" "09- Thay 3" "")

(Command "-layer" "n" "05- Thay 2" "c" "27" "05- Thay 2" "lw" "0.05" "05- Thay 2" "")

(Command "-layer" "n" "09 - Tim " "c" "119" "09 - Tim " "l" "center" "09 - Tim " "lw" "0.09" "09 - Tim " "")

(Command "-layer" "n" "05 - Mo 1" "c" "67" "05 - Mo 1" "lw" "0.05" "05 - Mo 1" "")

(Command "-layer" "n" "05 - Mo 2" "c" "8" "05 - Mo 2" "lw" "0.05" "05 - Mo 2" "")

(Command "-layer" "n" "05 - Mo 3" "c" "16" "05 - Mo 3" "lw" "0.05" "05 - Mo 3" "")

(Command "-layer" "n" "05 - Noi that" "c" "252" "05 - Noi that" "lw" "0.05" "05 - Noi that" "")

(Command "-layer" "n" "15 - Noi that" "c" "93" "15 - Noi that" "lw" "0.15" "15 - Noi that" "")

(Command "-layer" "n" "09 - Kich thuoc" "c" "47" "09 - Kich thuoc" "lw" "0.09" "09 - Kich thuoc" "")

(Command "-layer" "n" "05 - Khuat 1" "c" "242" "05 - Khuat 1" "l" "Dashed2" "05 - Khuat 1" "lw" "0.05" "05 - Khuat 1" "")

(Command "-layer" "n" "09 - Khuat 2" "c" "32" "09 - Khuat 2" "l" "Dashed" "09 - Khuat 2" "lw" "0.09" "09 - Khuat 2" "")

)

 

Nó đây ! Xin lỗi vì tôi đến muộn

Trong đó :a4 là tên lệnh

Sau "lw" là độ dày của nét khi in

Sơ sơ thế có j cứ hỏi 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
Cảm ơn bạn đã quan tâm. Khi thiết kế bản vẽ thi công, mình phải định vị các điểm đầu cọc. Mình vẽ Pline qua tất cả các điểm đầu cọc đó thôi, sau đó dùng list thì sẽ được Dtext đó. Mình phải thống kê 1 bảng toạ độ, X,Y riêng của các cọc. Do đó mình mới đề nghị được giúp đỡ.

Tức là bạn phải lọc các X= Y= Z=.... đi để được Dtext như hình vẽ phải ko? Không cần phải thế. Bạn chỉ cần vẽ đường Polyline qua các đầu cọc rồi đánh lệnh TDD ( khi ap lisp này vào) sau đó chọn đường polyline vừa vẽ và chọn text làm mẫu, điểm đặt kết quả. Lisp sẽ xuất cho bạn cột thứ nhất là thứ tự điểm, cột thứ 2 là toạ độ X của các điểm, cột thứ 3 là toạ độ Y của các điểm. Bạn có thể căn lại hàng cột bằng cách thay đổi một chút ở biến K1, K2, H. Hy vọng đúng ý bạn.

(defun C:TDD ( / ss ent Lx Ly Ltt dem Tmau Tmau1 Pchen Pchen1 H K1 K2)

 	(SAVE_MODE)
 	(INIT)
 	(princ "\n Chon duong Polyline")
(while (null (setq ss 	(ssget '((-4 . "<OR") (0 . "POLYLINE") (0 . "LWPOLYLINE") (-4 . "OR>"))))))
(setq	ent 	(entget (ssname ss 0))
	dem	0
)
 	(mapcar '(lambda (x)
	   	(if (= (car x) 10)
		  	(setq Lx  (append Lx (list (cadr x)))
			      Ly  (append Ly (list (caddr x)))
			      dem (1+ dem)
			      Ltt (append Ltt (list dem))	
		      	)
	  	)
   	)
	ent
)
 	(while (null (setq Tmau (CHONCHU "\n Chon text lam mau xuat ket qua"))))
 	(setq 	Tmau	(entget (ssname Tmau 0)))

(while (null (setq Pchen  (getpoint "\n Chon diem dat ket qua:"))))

	(setq	K1	(list 	(* (cdr(assoc 40 Tmau)) 3) 	0.0 				0.0)
	K2	(list 	(* (cdr(assoc 40 Tmau)) 12) 	0.0 				0.0)
	H	(list 	0.0 				(* (cdr(assoc 40 Tmau)) 3) 	0.0)
     	)
 	(setq Lst 	(List Ltt Lx Ly)
      Lk	(List (List 0.0 0.0 0.0) K1 K2)
     	)
 	(mapcar '(lambda (x y)

		(setq 	Pchen1 	(mapcar '+ Pchen y)
	   		dem	0
		)
   		(repeat (length x)
  			(setq	Tmau 	(THAY_TEXT dem x Tmau)
				Tmau1	(subst (cons 10 Pchen1) (assoc 10 Tmau) Tmau)
				Pchen1 	(mapcar '- Pchen1 H)
			)
  			(entmake Tmau1)
	  		(setq 	dem	(1+ dem))
  		)
   	)
   	Lst
	Lk
  	)
 	(DONE)
 	(RESTORE)
)
;;;==========================================================================
; HAM BAY LOI
(defun INIT ()
 	(setq 	OLD_ERROR *error*
	*error* MYERROR
)
)

(defun MYERROR (errmsg)

 	(cond
   		(	(= errmsg "quit / exit abort")
	 	(princ)
	)
   		(	(/= errmsg "Function cancelled")
	 	(princ (strcat "\n Co loi: " errmsg))
	)
 	)

 	(command "Undo" "back")			
 	(setvar "osmode" OLD_OSMODE)
   	(command "CECOLOR" OLD_CECOLOR)

 	(DONE)

 	(prompt "\n Da thuc hien ham *error*, Reset lai thiet lap ban dau")

)

(defun DONE ()
 	(if OLD_ERROR (setq *error* OLD_ERROR))
)

;;;----------------------------------------------------------------------
; HAM LUU VA TRA LAI CAC THONG SO BAN DAU
(defun SAVE_MODE()

 	(command "Undo" "Mark")
(command "UCS" "W" "")
   	(setq OLD_OSMODE (getvar "OSMODE"))
    	(setq OLD_CECOLOR (getvar "CECOLOR"))
 	(command "cmdecho" 0)
 	(vl-load-com)

)
(defun RESTORE()

 	;(command "Undo" "back")
 	(if OLD_OSMODE
 		(setvar "osmode" OLD_OSMODE)
 	)
 	(if OLD_CECOLOR
   		(command "CECOLOR" OLD_CECOLOR)
 	)
 	(command "cmdecho" 1)
     	(Grtext -1 "Lisp's written by Nataca - 0983.715.333")
)
;;;----------------------------------------------------------------------
(defun CHONCHU (dongnhac)

 	(prompt dongnhac)
 	(ssget
   		'((-4 . "<OR") (0 . "text") (0 . "mtext") (-4 . "OR>"))
 	)
)

;;;----------------------------------------------------------------------
(defun THAY_TEXT (stt LST ENT)
 	(cond 	(	(= (type (nth stt LST)) 'REAL)
 			(subst (cons 1 (rtos (nth stt LST) 2 3)) (assoc 1 ENT) ENT)
 	)
	(	(= (type (nth stt LST)) 'INT)
	 	(subst (cons 1 (itoa (nth stt LST))) (assoc 1 ENT) ENT)
 	)
)
)

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ỞI VÌ NHIỀU LÚC CẦN ĐO 1 CÁI J ĐÓ (XEM ) RỒI XOÁ ĐI, NÊN XUẤT HIẸN Ý TƯỞNG ĐÓ,

mỞ RỘNG VẤN ĐỀ LÀ CHO ĐỐI TƯỢNG TỒN TẠI THEO 1 KHOẢNG THỜI GIAN

LIỆU CÓ THỰC HIỆN ĐUWỌC KHÔNG BÁC.

Tự động xoá sau 1 giây thì khó nhưng nếu chờ ấn Enter để xoá như thế này thì hoàn toàn làm được. Theo bạn có được không?

(defun C:DAS ()
 (command "DIMALIGNED" pause pause pause)
 (command "erase" "l" pause) 
)

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

Kính nhờ các Bác chỉ giúp cho.

PP đọc cả buổi mà vẩn chưa tìm được đoạn Lisp đang cần.

PP đang lập 1 một số bản vẽ sơ đồ các đường ống nước, gas trước nhà của cả 1 đoạn đường dài. Dựa vào khoảng cách trước mổi nhà để vẽ lại các đ/ố này. Khoảng cách thì khác nhau, mà ví trí điểm chọn trước mỗi nhà cũng không được thẳng hàng. Bản vẽ các line boundary mặt trước nhà đã có sẳn. Bây giờ chỉ cần vẽ các đ/ố và ghi lại khoảng cách như là 1.2B (tức là cách boundary trước nhà 1200mm-bản vẽ dùng đ/v mm) Bên dưới 1.2B sẽ còn ghi thêm độ sâu khác nhau thí dụ như 0.7D (=700mm)

Vẽ trong model với scale thật 1:1 nhưng sẽ dùng layout để in với scale 1:500 trong khổ giấy A1. (Text in ra cao 3.5mm-Text trong model cao 1750mm)

Nhờ các Bác viết giúp cho đoạn Lisp, chỉ cần chọn 1 điểm trước nhà, nhập khoảng cách (mm) thì sẽ vẽ được các line cách điểm chọn (vuông góc). (Nếu như tự động in text bên cạnh như được nhập ban đầu thì rất tốt)

Xin cám ơ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
Kính nhờ các Bác chỉ giúp cho.

PP đọc cả buổi mà vẩn chưa tìm được đoạn Lisp đang cần.

PP đang lập 1 một số bản vẽ sơ đồ các đường ống nước, gas trước nhà của cả 1 đoạn đường dài. Dựa vào khoảng cách trước mổi nhà để vẽ lại các đ/ố này. Khoảng cách thì khác nhau, mà ví trí điểm chọn trước mỗi nhà cũng không được thẳng hàng. Bản vẽ các line boundary mặt trước nhà đã có sẳn. Bây giờ chỉ cần vẽ các đ/ố và ghi lại khoảng cách như là 1.2B (tức là cách boundary trước nhà 1200mm-bản vẽ dùng đ/v mm) Bên dưới 1.2B sẽ còn ghi thêm độ sâu khác nhau thí dụ như 0.7D (=700mm)

Vẽ trong model với scale thật 1:1 nhưng sẽ dùng layout để in với scale 1:500 trong khổ giấy A1. (Text in ra cao 3.5mm-Text trong model cao 1750mm)

Nhờ các Bác viết giúp cho đoạn Lisp, chỉ cần chọn 1 điểm trước nhà, nhập khoảng cách (mm) thì sẽ vẽ được các line cách điểm chọn (vuông góc). (Nếu như tự động in text bên cạnh như được nhập ban đầu thì rất tốt)

Xin cám ơn trước.

 

 

Bạn nên đưa bản vẽ mẫu lên rồi diễn giải trong bản vẽ luôn, như vậy sẽ dễ dàng giúp cho Bạn và người viết code cũng biết được các công đoạn làm như thế nào là tối ưu

 

@Phiphi: nick này hình như bên kếtcấu.com phải không?

  • 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

Chào các bác.

tôi có một yêu cầu nhờ các bác giúp.

Tôi muốn tạo một Block hay một đối tượng (như ký hiệu trục ).

Khi copy đối tượng này đi thì giá trị chứa trong đối tượng này tăng lên một đơn vị. VD trục 1 => trục 2.., ký tự A=>ký tự B.

 

Cám ơn trước nhé

Chờ tin các Bá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

Thiệp xin hỏi các cao thủ Lisp: có một đoạn mã nào đưa các lệnh trong Express như Overkill, Layoff hoặc một lệnh tự tạo bằng Lisp vào trong một Lisp khác? Thiệp đang viết 1 Lisp vẽ mặt cắt địa hình, cần hổ trợ lệnh Overkill nhưng không biết cách đưa vào. Xin nhờ các cao thủ chỉ giúp

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
Thiệp xin hỏi các cao thủ Lisp: có một đoạn mã nào đưa các lệnh trong Express như Overkill, Layoff hoặc một lệnh tự tạo bằng Lisp vào trong một Lisp khác? Thiệp đang viết 1 Lisp vẽ mặt cắt địa hình, cần hổ trợ lệnh Overkill nhưng không biết cách đưa vào. Xin nhờ các cao thủ chỉ giúp

Theo tôi thì muốn đưa 1 lệnh lisp vào 1 lisp khác thì cần cải tạo 1 chút như sau:

Nguyên bản

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;

(Defun C:vtn ( )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;Sửa lại

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;

(Defun LENHVTN ( )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;

(Defun C:vtn ( )

(LENHVTN))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

;;;;;;;;;;;;;;;

 

lúc này bạn đem cái (LENHVTN) để vào lisp muốn lồng là đượ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
Kính nhờ các Bác chỉ giúp cho.

PP đọc cả buổi mà vẩn chưa tìm được đoạn Lisp đang cần.

PP đang lập 1 một số bản vẽ sơ đồ các đường ống nước, gas trước nhà của cả 1 đoạn đường dài. Dựa vào khoảng cách trước mổi nhà để vẽ lại các đ/ố này. Khoảng cách thì khác nhau, mà ví trí điểm chọn trước mỗi nhà cũng không được thẳng hàng. Bản vẽ các line boundary mặt trước nhà đã có sẳn. Bây giờ chỉ cần vẽ các đ/ố và ghi lại khoảng cách như là 1.2B (tức là cách boundary trước nhà 1200mm-bản vẽ dùng đ/v mm) Bên dưới 1.2B sẽ còn ghi thêm độ sâu khác nhau thí dụ như 0.7D (=700mm)

Vẽ trong model với scale thật 1:1 nhưng sẽ dùng layout để in với scale 1:500 trong khổ giấy A1. (Text in ra cao 3.5mm-Text trong model cao 1750mm)

Nhờ các Bác viết giúp cho đoạn Lisp, chỉ cần chọn 1 điểm trước nhà, nhập khoảng cách (mm) thì sẽ vẽ được các line cách điểm chọn (vuông góc). (Nếu như tự động in text bên cạnh như được nhập ban đầu thì rất tốt)

Xin cám ơn trước.

Bạn nên đưa bản vẽ mẫu lên rồi diễn giải trong bản vẽ luôn, như vậy sẽ dễ dàng giúp cho Bạn và người viết code cũng biết được các công đoạn làm như thế nào là tối ưu

@Phiphi: nick này hình như bên kếtcấu.com phải không?

PP xin post hình từ bản vẽ. Các đoạn màu đỏ đã có sẳn chỉ mặt tiền của từng nhà. Chỉ cần vẽ đuờng ống Gas (màu lam) với khoảng cách nhập vào là mm nhưng text ghi là đơn vị mét cho gọn. Xin các Bác giúp nhé. Thanks you very nhiều

http://img122.imageshack.us/img122/2640/lispyi0.jpg

lispyi0.jpg

@tien2005. Bác đoán hơi bị đúng đó :lol:

Tối qua nhờ đọc bài của BKIT http://www.ketcau.com/forum/showthread.php?p=65032 nên mới biết đến Diễn đàn CADViet rất hay này. PP rất ngưỡng mộ nhiều Bác đã đóng góp rất tích cực cho Diễn đàn CADViet. Thanks you.

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
PP xin post hình từ bản vẽ. Các đoạn màu đỏ đã có sẳn chỉ mặt tiền của từng nhà. Chỉ cần vẽ đuờng ống Gas (màu lam) với khoảng cách nhập vào là mm nhưng text ghi là đơn vị mét cho gọn. Xin các Bác giúp nhé. Thanks you very nhiều

 

@tien2005. Bác đoán hơi bị đúng đó :lol:

Tối qua nhờ đọc bài của BKIT http://www.ketcau.com/forum/showthread.php?p=65032 nên mới biết đến Diễn đàn CADViet rất hay này. PP rất ngưỡng mộ nhiều Bác đã đóng góp rất tích cực cho Diễn đàn CADViet. Thanks you.

Sao bạn không upload file dwg lên, mọi người sẽ dễ giúp bạn hơn.

 

Trong file dwg đó, bạn nên vẽ một đoạn vào nhà và điền text sẵn luôn để người giúp bạn có được cấu trúc của text và 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.

Em có một yêu cầu là: có rất nhiều dòng text được viết bởi các lệnh dtext, các dòng text này cách đều nhau một khoảng cách nào đó ví là a, bây giờ muốn các dòng text đó cách đều nhau một khoảng là b thì có lisp nào đáp ứng được điều đó ko bác Hoành.

Mong sớm nhận được sự giúp đỡ của các anh em!!

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
Sao bạn không upload file dwg lên, mọi người sẽ dễ giúp bạn hơn.

 

Trong file dwg đó, bạn nên vẽ một đoạn vào nhà và điền text sẵn luôn để người giúp bạn có được cấu trúc của text và line.

Rất cám ơn Bác Nguyen Hoang quan tâm giúp đở.

PP xin gởi bản vẽ và file số liệu dùng để lập sơ đồ đ/ống này: http://www.cadviet.com/upfiles/Duong_ong_Gas.zip

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
Em có một yêu cầu là: có rất nhiều dòng text được viết bởi các lệnh dtext, các dòng text này cách đều nhau một khoảng cách nào đó ví là a, bây giờ muốn các dòng text đó cách đều nhau một khoảng là b thì có lisp nào đáp ứng được điều đó ko bác Hoành.

Mong sớm nhận được sự giúp đỡ của các anh em!!

Tôi thường xuyên gặp phải vấn đề tương tự bạn, tôi làm như sau:

- Copy 1 text ra làm gốc, để dành đó.

- Scale cụm còn lại với tỷ lệ b/a.

- Matchprop text gốc với các text vừa scale.

- Xoá text gốc.

 

Thao tác trên đơn giản tới mức tôi không bao giờ dùng lisp để thực hiện vì để appload lisp + nhớ tên lệnh lisp khó khăn hơn việc thủ công trên.

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
Rất cám ơn Bác Nguyen Hoang quan tâm giúp đở.

PP xin gởi bản vẽ và file số liệu dùng để lập sơ đồ đ/ống này: http://www.cadviet.com/upfiles/Duong_ong_Gas.zip

 

Cảm ơn bạn vì một yêu cầu rất mạch lạc, dưới đây là lisp của bạn:

(defun c:xd ()
 (setq sel (entsel "\nHay pick mot diem thuoc mat tien nha: "))
 (if (or (not sel)
  (/= "LINE" (cdr (assoc 0 (entget (car sel)))))
     )
   (alert
     "Ban chon khong dung\nHay pick vao mot doi tuong LINE"
   )
   (progn
     (setq
ent    (car sel)
p1     (cdr (assoc 10 (entget ent)))
phuong (trans (getpoint (cadr sel) "\nHay pick huong dat chu: ")
	      1
	      0
       )
B_     (getreal "\mB (m): ")
D_     (getstring "\mD (m): ")
p      (vlax-curve-getClosestPointTo ent (trans (cadr sel) 1 0))

     )
     (changegeo p p1 phuong)
     (setq ptextB_ (trans (list 0.0 1500.0 0.0) 1 0)
    ptextD_ (trans (list -2500.0 1500.0 0.0) 1 0)
    pPoint  (trans (list 0.0 (* -1000.0 B_) 0.0) 1 0)
     )      
     (restoregeo)
     (ctext ptextB_ (strcat (rtos B_ 2 1) "B"))
     (ctext ptextD_ (strcat D_ "D"))
     (cpoint pPoint)
   )
 )
)
(defun ctext (p gt)
 (entmake (list
     (cons 0 "TEXT")
     (cons 8 "G_text35")
     (cons 40 1750.0)
     (cons 50 0.0)
     (cons 7 "ISOCP")
     (cons 10 p)
     (cons 1 gt)
   )
 )
)
(defun cPoint (p)
 (entmake (list
     (cons 0 "POINT")
     (cons 10 p)
   )
 )
)
(defun changegeo (p p1 phuong)
 (setq cv_oldos (getvar "osmode"))
 (setvar "osmode" 0)
 (command ".ucs" "w")
 (command ".ucs" "3" p p1 phuong)
)
(defun restoregeo ()
 (command ".ucs" "p")
 (command ".ucs" "p")
 (setvar "osmode" cv_oldos)
 (setq cv_oldos nil)
)

Lệnh XD sẽ yêu cầu bạn:

- pick vào 1 điểm thuộc mặt tiền nhà,

- sau đó yêu cầu bạn pick vào phía có ghi chữ (ngược lại phía với ống),

- sau đó nhập B và D (theo đơn vị m).

 

Khi bạn nhập xong, Chương trình sẽ cho bạn:

- Text B, D

- Point điểm tọa độ.

 

Từ đây bạn phải vẽ đường ống bằng cách nối line từ point đến point một cách thủ công. Nếu bạn lười, hãy dùng lisp JP (Joint Point) đã có trên diễn đàn (bạn hãy search nhé) để joint các point lại với nhau.

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

nhờ các ban tìm giúp có lisp nào thống kê block khi ta chọn 1 vùng trước khg, và tính tổng chiều dài các line, pline ... mà ta chọn khg. Mình là dân điện, đang muốn tìm lisp thống kê vật tư điện trên bảng vẽ CAD. Đa tạ :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
nhờ các ban tìm giúp có lisp nào thống kê block khi ta chọn 1 vùng trước khg, và tính tổng chiều dài các line, pline ... mà ta chọn khg. Mình là dân điện, đang muốn tìm lisp thống kê vật tư điện trên bảng vẽ CAD. Đa tạ :lol:

Nếu tính tổng các block thì chỉ cần Ctrl +1 nếu là cad 2008 trở lên thì nó đã đếm cho cậu rồi. Còn tính tổng chiều dài thì đây. http://www.cadviet.com/sub/upfiles/tinhchieudaidt.lsp . Phải dùng chức năng tìm kiếm chứ

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.

×