Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
namhai

Lisp điền cao độ bị lỗi!!!

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

 

- ngón này nhoc ko rành lắm, nhoc thử sữa lại theo ý bạn, bạn xem có đúng ko ^^, nhoc chỉ sợ lượt bớt nhiều quá làm sai kết quả ^^

(defun DXFcn (code elist) (cdr (assoc code elist)))
;============================================================
(prompt "\n[Cmd:CDX] - GHI CAO DO DIEM TREN TRAC NGANG by Thaistreetz - huuthais@yahoo.com\n")
;============================================================
(defun c:Cdx (/ DZ pt  ptside ang OT sc1 scale tx ty tx1 ty1 y H0) ; 
(command "Undo" "BEGIN")
(if (= tx nil) 
	(setq tx 1))
(if (= ty nil) 
	(setq ty 1))
	(setq 		  tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/")) 
		  ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))
	)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq CMLAST (getvar "cmdecho"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(setvar "cmdecho" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
;(setvar 'osmode 0)
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXFcn 1 ed))) 
(While (and (setq pt (getpoint "\nChon diem chuan : ")) (setq doitt (car (entsel "\nChon text de chinh sua: "))))
(Progn
	(setq y (- (cadr pt) y0 (- H0)))
(cond 
	((> y 0) (entmod (subst (cons 1 (strcat "+" (rtos (* y ty) 2 2))) (assoc 1 (entget doitt)) (entget doitt))))
	((< y 0) (entmod (subst (cons 1 (rtos (* y ty) 2 2)) (assoc 1 (entget doitt)) (entget doitt)))) 
	((= y 0) (entmod (subst (cons 1 "%%p0.00") (assoc 1 (entget doitt)) (entget doitt))))
)

);progn
);while 
(setvar "OSMODE" OSLAST)(setvar "ORTHOMODE" OT)(setvar "cmdecho" CMLAST)
(prompt "\n[GHI CAO DO TRAC NGANG] by Thaistreetz - huuthais@yahoo.com\n")
(command "Undo" "End")
(princ)
);end

1/ (setq ed (entget (car (entsel "\nChon cao do tim: "))))

      (setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))

cho hỏi 2 câu lệnh này khác nhau như thế nào. không hiểu sao những lisp mình tải về xem thì đến bước chọn text cao độ ở câu lệnh 1 cho kết quả toàn bằng 0 hay trật lất còn câu 2 thì đúng. 

2/ file cdx.lsp mình tải về xài toàn cho kết quả bằng 0 . các bác chỉ dùm...

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
phamthanhbinh    3.123

1/ (setq ed (entget (car (entsel "\nChon cao do tim: "))))

      (setq cdd (atof (cdr(assoc 1 (entget(car(entsel "\n Pick chon Text cao do dau :")))))))

cho hỏi 2 câu lệnh này khác nhau như thế nào. không hiểu sao những lisp mình tải về xem thì đến bước chọn text cao độ ở câu lệnh 1 cho kết quả toàn bằng 0 hay trật lất còn câu 2 thì đúng. 

2/ file cdx.lsp mình tải về xài toàn cho kết quả bằng 0 . các bác chỉ dùm...

Hề hề hề,

1/- (setq ed (entget (car (entsel "\n Chon cao do tim)))) trả về kết quả là một danh sách chứa các mã dxf của đối tượng text được chọn.

     (setq cdd (atof (cdr (assoc 1 (entget (car (entsel "\n Pick chon text cao do"))))))) trả về giá trị số của text cao độ được chọn

2/- Việc sử dụng 2 code này ở đâu và ra sao tùy vào ý định của người viết lisp hay người dùng lisp . Không thể thay thề cái nọ bằng cái kia được.

3/- bạn sử dụng lisp nào và với bản vẽ nào mà thấy không đúng thì phải gửi cả hai cái đó lên mới có thể tìm được lỗi. Hỏi như bạn là đánh đố mọi người vì họ chẳng biết bạn dùng lisp nào và với bản vẽ nào cả.

4/- Lisp không phải là công cụ vạn năng có thể dùng cho mọi bản vẽ bạn có mà nó chỉ có thể dùng với những bản vẽ thỏa mãn điều kiện sử dụng nó do người viết lisp xác định mà thôi. Muốn sử dụng tốt lisp thì người dùng phải có những kiến thức tối thiểu về lisp để có thể đọc và hiểu nội dung của nó và hiểu được nó dùng cho việc gì, trong môi trường bản vẽ nào bạn ạ.

  • 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

Hề hề hề,

1/- (setq ed (entget (car (entsel "\n Chon cao do tim)))) trả về kết quả là một danh sách chứa các mã dxf của đối tượng text được chọn.

     (setq cdd (atof (cdr (assoc 1 (entget (car (entsel "\n Pick chon text cao do"))))))) trả về giá trị số của text cao độ được chọn

2/- Việc sử dụng 2 code này ở đâu và ra sao tùy vào ý định của người viết lisp hay người dùng lisp . Không thể thay thề cái nọ bằng cái kia được.

3/- bạn sử dụng lisp nào và với bản vẽ nào mà thấy không đúng thì phải gửi cả hai cái đó lên mới có thể tìm được lỗi. Hỏi như bạn là đánh đố mọi người vì họ chẳng biết bạn dùng lisp nào và với bản vẽ nào cả.

4/- Lisp không phải là công cụ vạn năng có thể dùng cho mọi bản vẽ bạn có mà nó chỉ có thể dùng với những bản vẽ thỏa mãn điều kiện sử dụng nó do người viết lisp xác định mà thôi. Muốn sử dụng tốt lisp thì người dùng phải có những kiến thức tối thiểu về lisp để có thể đọc và hiểu nội dung của nó và hiểu được nó dùng cho việc gì, trong môi trường bản vẽ nào bạn.

 

Hề Hề..hiểu sơ sơ. để ngâm cứu tiếp. cảm ơn đã giải thí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
vtcd09b    1

lisp rất hay nhưng em nhờ các bác sửa lại cho text xuất ra ở dạng 3 chữ số sau dấu phẩy được không, cám ơn mọi người, e gà món này lắm

  • Vote giảm 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
phuhvp    2

Hề hề hề,

1/- (setq ed (entget (car (entsel "\n Chon cao do tim)))) trả về kết quả là một danh sách chứa các mã dxf của đối tượng text được chọn.

     (setq cdd (atof (cdr (assoc 1 (entget (car (entsel "\n Pick chon text cao do"))))))) trả về giá trị số của text cao độ được chọn

2/- Việc sử dụng 2 code này ở đâu và ra sao tùy vào ý định của người viết lisp hay người dùng lisp . Không thể thay thề cái nọ bằng cái kia được.

3/- bạn sử dụng lisp nào và với bản vẽ nào mà thấy không đúng thì phải gửi cả hai cái đó lên mới có thể tìm được lỗi. Hỏi như bạn là đánh đố mọi người vì họ chẳng biết bạn dùng lisp nào và với bản vẽ nào cả.

4/- Lisp không phải là công cụ vạn năng có thể dùng cho mọi bản vẽ bạn có mà nó chỉ có thể dùng với những bản vẽ thỏa mãn điều kiện sử dụng nó do người viết lisp xác định mà thôi. Muốn sử dụng tốt lisp thì người dùng phải có những kiến thức tối thiểu về lisp để có thể đọc và hiểu nội dung của nó và hiểu được nó dùng cho việc gì, trong môi trường bản vẽ nào bạn ạ.

Mong mọi người giúp dùm, các bác cao thủ rãnh tay chém phát giúp em

Em muốn lấy giá trị khoảng cách cộng dồn và cao độ tuyệt đối của 1 đoạn Pline ( đường tự nhiên) và xuất ra scv

Em chỉ cần xuất ra file scv đơn giản như tệp kèm phía dướ này thôi ạ

Và mỗi lần mình làm lại thì scv sẽ làm mới, (thay thế giá trị đã ghi lần trước) hoặc có thể ghi thêm phía dưới (cái nào đơn giản hơn thì làm ạ)

Đơn giản các thao tác (các thông số cài đặt sẵn đc ko ạ)

 

Phương án :( em thấy cái lisp này gần giống chỉ cần sửa giá trị 1 tí thôi, nhưng em ko biết sửa mong các Bác chỉ giáo)

http://www.cadviet.com/upfiles/5/150815_coorn.lsp

lisp này là lisp xuất tọa độ x y cho 1 đoạn PLine theo gốc tọa độ

Dùng lệnh qq và chọn 1 đường Pline nó sẽ ghi ra file scv mà ko cần hỏi lưu ( đúng ý em ko cần hỏi lưu cho đỡ công đoạn)

Nếu sửa lis[ này mình nên thêm bước:

 

1 - đầu tiên là chọn hệ tọa độ mới (mình sẽ chọn hệ tọa độ mới tại tim đường) ( có thể bỏ qua bước này vì mình có thể sử dụng lệnh ucs riêng)

2 - Chọn Cao độ tim đường ( và cộng thêm giá trị này với tọa độ Oy của các điểm node nằm trên Pline được chọn)

 

sau đó mọi giá trị xuất ra scv sẽ đúng trừ hàng khoảng cách cộng dồn "bên trái" nó sẽ có giá trị âm và sắp xếp ngược so với mong muốn ( ý em là cho khoảng cách sẽ có giá trị dương hết, và khoảng cách ở cột "Bên Trái" sẽ đảo ngược tự dưới lên)

 

Loại bỏ bớt các thao tác của lisp củ là bỏ đi lệnh hỏi lưu file nào mà cho mặc định lưu luôn ra scv đc ko ạ hoặc bỏ cái lưu ra file .TXT đi ạ

 

Mong mọi người giúp sức

Em chỉ nghĩ ra hướng đi còn cách diễn dãi bằng ngôn ngữ lisp thì em chịu nên các bác thông cảm nếu có gì sai sót

Chân thành cảm ơn, chúc mọi người sức khỏe.

http://www.cadviet.c.../5/150815_3.rar

http://www.cadviet.com/upfiles/5/150815_11111_1.dwg

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
quocmanh04tt    385

Bạn thử cái này xem:

(defun c:tt  (/ xuat_kq elv ent lsp lst-l lst-r lsw txt x y sep)
 (defun xuat_kq  (str lst / filename fn i)
  (setq i 1)
  (setq filename (strcat (getvar 'dwgprefix) (getvar 'dwgname) ".txt"))
  (or (findfile fileName) (progn (setq fn (open fileName "w")) (close fn)))
  (setq fn (open fileName "a"))
  (princ (strcat "\n" (write-line str fn)))
  (foreach x  lst
   (princ (strcat "\n" (write-line (strcat (itoa i) sep (car x) sep (cadr x)) fn)))
   (setq i (1+ i)))
  (close fn))
 (setq sep "\t")
 (while (and (setq ent (car (entsel "\nChon Pline trac ngang: ")))
             (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
             (not (redraw ent 3))
             (setq txt (car (entsel "\nChon Text cao do tim duong: ")))
             (wcmatch (cdr (assoc 0 (entget txt))) "*TEXT")
             (not (redraw ent 4))
             (setq elv (distof (cdr (assoc 1 (entget txt))) 2)))
  (setq lsp (acet-geom-vertex-list ent))
  (foreach pt  lsp
   (setq x (car pt)
         y (+ (cadr pt) elv))
   (cond ((< x 0) (setq lst-l (cons (list (rtos (abs x) 2 2) (rtos y 2 2)) lst-l)))
         ((> x 0) (setq lst-r (cons (list (rtos x 2 2) (rtos y 2 2)) lst-r)))))
  (xuat_kq (strcat "\nSTT" sep "K.cach" sep "Cao do\nBen trai:") lst-l)
  (xuat_kq "Ben phai:" (reverse lst-r))
  (setq lst-l nil
        lst-r nil))
(and ent (redraw ent 4))
 (princ "\nLisp created By QuocManh04tt-CadViet.com!")
 (princ))

P/s:

1​. Lsp xuất ra file .txt nằm cùng thư mục với file .dwg hiện hành.

2. Muốn xuất file .csv thì tìm trong lsp thay ".txt" bằng ".csv", ngăn cách giữa STT, K.cach, caodo bằng dấu ";" thì thay dòng:  (setq sep "\t") bằng dòng này:  (setq sep ";").

3. => Copy sẽ tốt hơn download ...

  • 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
phuhvp    2

Bạn thử cái này xem:

(defun c:tt  (/ xuat_kq elv ent lsp lst-l lst-r lsw txt x y sep)
 (defun xuat_kq  (str lst / filename fn i)
  (setq i 1)
  (setq filename (strcat (getvar 'dwgprefix) (getvar 'dwgname) ".txt"))
  (or (findfile fileName) (progn (setq fn (open fileName "w")) (close fn)))
  (setq fn (open fileName "a"))
  (princ (strcat "\n" (write-line str fn)))
  (foreach x  lst
   (princ (strcat "\n" (write-line (strcat (itoa i) sep (car x) sep (cadr x)) fn)))
   (setq i (1+ i)))
  (close fn))
 (setq sep "\t")
 (while (and (setq ent (car (entsel "\nChon Pline trac ngang: ")))
             (wcmatch (cdr (assoc 0 (entget ent))) "*POLYLINE")
             (not (redraw ent 3))
             (setq txt (car (entsel "\nChon Text cao do tim duong: ")))
             (wcmatch (cdr (assoc 0 (entget txt))) "*TEXT")
             (not (redraw ent 4))
             (setq elv (distof (cdr (assoc 1 (entget txt))) 2)))
  (setq lsp (acet-geom-vertex-list ent))
  (foreach pt  lsp
   (setq x (car pt)
         y (+ (cadr pt) elv))
   (cond ((< x 0) (setq lst-l (cons (list (rtos (abs x) 2 2) (rtos y 2 2)) lst-l)))
         ((> x 0) (setq lst-r (cons (list (rtos x 2 2) (rtos y 2 2)) lst-r)))))
  (xuat_kq (strcat "\nSTT" sep "K.cach" sep "Cao do\nBen trai:") lst-l)
  (xuat_kq "Ben phai:" (reverse lst-r))
  (setq lst-l nil
        lst-r nil))
(and ent (redraw ent 4))
 (princ "\nLisp created By QuocManh04tt-CadViet.com!")
 (princ))

P/s:

1​. Lsp xuất ra file .txt nằm cùng thư mục với file .dwg hiện hành.

2. Muốn xuất file .csv thì tìm trong lsp thay ".txt" bằng ".csv", ngăn cách giữa STT, K.cach, caodo bằng dấu ";" thì thay dòng:  (setq sep "\t") bằng dòng này:  (setq sep ";").

3. => Copy sẽ tốt hơn download ...

Trước tiên xin cảm ơn bạn quocmanh04tt rất nhiều đã giúp mình

Bạn cho mình hỏi sao mình load lisp làm theo hướng dẫn rồi mà mình ko thấy có xuất ra tệp .txt nào cả, và mình cũng thử thay .scv vào mà vẫn ko thấy ra file nào cả. và mình muốn nó xuất ra csv theo dạng:

k.cách    cao độ

X1              Y1

X2              Y2

.....              ....

.....              ....

giống như file xuất ra từ lisp của mình đưa ra ở trên đó bạn, ra file .xls giống lisp mình càng tốt

Một lần nữa cảm ơn bạn rất nhiều và mong bạn bỏ ra ít thời gian chỉnh dùm mình tks

  • Vote giảm 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
phuhvp    2

Anh ơi, tuyệt vời ông mặt trời luôn, giờ còn 1 xí nữa là nó ko xuất ra file nào hết anh, em muốn nó ra exl để mình copy đó ạ

Không biết phải báo đáp anh như thế nào... Rất cảm ơn anh 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
quocmanh04tt    385

Bạn kiểm tra lại đi, lsp ở trên nếu bạn chưa sửa gì trong lsp thì nó ra file .txt mà. Nếu sửa sang .csv như hướng dẫn thì excel mở bình thường, kể cả file .txt.

  • 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
quocmanh04tt    385

Khi bạn F2 lên có tương tự như của mình ko? Nếu có thì file đã xuất được, tên file giống tên file bản vẽ hiện hành và nằm cùng thư mục.

  • 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
phuhvp    2

Dạ em đã làm y và kết quả ghi trong cad cũng giống của bác , nhưng sao em lục ở đâu cũng ko có file nào cả ta, hay do máy em sài win 8.1

150815_screenshot_9.png

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
phuhvp    2

Thật sự xin lỗi bác, và cảm ơn Bác nhiều vì sự giúp đỡ của Bác

Em đã thành công và vì em không kiểm tra kỹ, tên file em nó dài quá ... nó hiện là 1111.DW...  nên em tưởng ko phải, ai dè nó hiện ra hết là 1111.DWG.TXT

hihi em rất xin lỗi vì cứ bắt Bác phải kiểm tra đi, kiểm tra lại, Chúc Bác Thành công trong công việc và gặp nhiều may mắn.

Em yêu bác xxx

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
quocmanh04tt    385

Bác ơi, nếu mình muốn mọi file txt xuất ra luôn luôn tạo ra ngoài desktop thi mình thêm như thế nào ạ

 

Thế này nhé:

1. Copy hoặc save as 1 file dwg ra desktop, mở file này lên.

2. Gõ (hoặc copy cái này paste dòng command: (getvar 'dwgprefix)), nó sẽ được đường dẫn đến desktop. Ví dụ sẽ được: "C:\\Users\\Admin\\Documents\\Desktop\\" (cái này tùy thuộc vào từng máy).

3. Vào lsp thay thế: (getvar 'dwgprefix) bằng "C:\\Users\\Admin\\Documents\\Desktop\\".

  • 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
phuhvp    2

Cảm ơn anh rất nhiều, em đã làm được thành công

Chúc anh có nhiều niềm vui trong cuộc sống

Cho đi tất sẽ nhận đc ,Cảm ơn anh vì tất cả nếu anh ở kon tum hay gần đây thì pm anh em mình giao lưu tí

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×