Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hongquan88

Cao độ trong cad bị làm tròn.

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

Chào các bạn, mình đang gặp tí vấn đề về cao độ, ví dụ như cao độ trên bản cad là 10, nhưng mình xem trong "Ctrl 1" thì nó hiển thị 9.81. Mình xuất thử tọa độ ra text để nhập nova thì vẫn chỉ là 10. Vậy các bạn giúp mình cách để đưa nó về lại 9.81 với. Vấn đề này mình hơi kém, xin các bạn 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

Chào các bạn, mình đang gặp tí vấn đề về cao độ, ví dụ như cao độ trên bản cad là 10, nhưng mình xem trong "Ctrl 1" thì nó hiển thị 9.81. Mình xuất thử tọa độ ra text để nhập nova thì vẫn chỉ là 10. Vậy các bạn giúp mình cách để đưa nó về lại 9.81 với. Vấn đề này mình hơi kém, xin các bạn giúp đỡ.

Lisp của bạn đây. Lệnh ct nhé. Hy vọng đúng ý bạn.

http://www.cadviet.c...change_text.lsp

(defun C:ct()
 (setq taphop(ssget))
 (setq soluong (sslength taphop))
 (setq index 0)
 (setq i 0)
 (while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(setq KIEU(cdr(assoc 0 TEXT)))
(if (= KIEU "TEXT")
 	(progn
(setq i(1+ i))
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
  (setq InsertPoint(cdr(assoc 10 TEXT)))
  (setq InsertPoint(cdr(assoc 11 TEXT)))
  )
(entmod (subst (cons 1 (rtos (caddr InsertPoint) 2 2)) (assoc 1 TEXT) TEXT))
)
 	)
(setq index (+ index 1))
)
 (alert (strcat (rtos i 2 0) " objects changed"))
 (princ)
)

  • 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

Cám ơn bạn KangKung nhiều, chuẩn luôn đó bạn. Tiện thể cho mình hỏi thêm, cao độ đó lẽ ra là âm nhưng lại viết không có dấu trừ đằng trước, mình đã dùng cái lisp thêm ký tự, thêm dấu trừ đằng trước nhưng giá trị trong Cltr 1 vẫn là dương. Bạn giúp mình luôn nhé, cám ơn bạ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

Cám ơn bạn KangKung nhiều, chuẩn luôn đó bạn. Tiện thể cho mình hỏi thêm, cao độ đó lẽ ra là âm nhưng lại viết không có dấu trừ đằng trước, mình đã dùng cái lisp thêm ký tự, thêm dấu trừ đằng trước nhưng giá trị trong Cltr 1 vẫn là dương. Bạn giúp mình luôn nhé, cám ơn bạn.

Lisp mới sẽ thay đổi cao độ từ dương thành âm, âm thành dương. TEXT hiển thị sẽ tuỳ theo cao độ âm hay dương.

http://www.cadviet.c...e_text_rev1.lsp

(defun C:ct()
 (command "OSMODE" 0)
 (setq os(getvar "osmode"))
 (setq taphop(ssget '(( 0 . "TEXT"))))
 (setq soluong (sslength taphop))
 (setq index 0)
 (command "UNDO" "BE")
 (while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
 	(setq InsertPoint(cdr(assoc 10 TEXT)))
 	(setq InsertPoint(cdr(assoc 11 TEXT)))
 	)
(if (> (caddr InsertPoint) 0)
 	(setq newstring(strcat "-" (rtos (caddr InsertPoint) 2 2)))
 	(setq newstring(rtos (- 0 (caddr InsertPoint)) 2 2))
 	)
(entmod (subst (cons 1 newstring) (assoc 1 TEXT) TEXT))
(command "move" (ssname taphop index) "" (list 0 0 (caddr InsertPoint)) (list 0 0 (- 0 (caddr InsertPoint))))
(setq index (+ index 1))
)
 (command "OSMODE" os)
 (command "UNDO" "END")
 (princ)
)

PS: Bạn làm bản vẽ đo sâu đúng không? Mấy bác đo sâu hay đưa điểm lên bản vẽ như này.

  • 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

Thanks bạn nhiều lắm, mình đang làm đo sâu, tính khối lượng nạo vét ấy bạn. Một lần nữa, cảm ơn bạn đã giúp đỡ. Chúc sức khỏe và công tác tốt nhé.

  • 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

Thanks bạn nhiều lắm, mình đang làm đo sâu, tính khối lượng nạo vét ấy bạn. Một lần nữa, cảm ơn bạn đã giúp đỡ. Chúc sức khỏe và công tác tốt nhé.

Lisp trên tuy chạy tốt nhưng vẫn còn vấn đề cần phải xử lý đó là: Nếu tập chọn có cả text biểu thị độ cao(dạng số) và text ghi chú (dạng chữ) thì các text dạng chữ sẽ bị thay đổi tuỳ theo positionZ của text này. Nếu người sử dụng vô tình chọn đối tượng có cả text ghi chú thì các text này sẽ bị mất và thay vào đó là text với nội dung là “0.00” (trong trường hợp Z=0). Lisp dưới đây đã khắc phục được vấn đề đó.

[/size][/size]
(defun C:ct()
 (setq os(getvar "osmode"))
 (command "OSMODE" 0)
 (setq taphop(ssget '(( 0 . "TEXT"))))
 (setq soluong (sslength taphop))
 (setq index 0)
 (command "UNDO" "BE")
 (while (< index soluong)
(setq TEXT (entget (ssname taphop index)))
(if (= (read (cdr(assoc 1 TEXT))) (atof (cdr(assoc 1 TEXT))))
 	(progn
(if (= (+ (cdr(assoc 72 TEXT)) (cdr(assoc 73 TEXT))) 0)
  (setq InsertPoint(cdr(assoc 10 TEXT)))
  (setq InsertPoint(cdr(assoc 11 TEXT)))
  )
(if (> (caddr InsertPoint) 0)
  (setq newstring(strcat "-" (rtos (caddr InsertPoint) 2 2)))
  (setq newstring(rtos (- 0 (caddr InsertPoint)) 2 2))
  )
(entmod (subst (cons 1 newstring) (assoc 1 TEXT) TEXT))
(command "move" (ssname taphop index) "" (list 0 0 (caddr InsertPoint)) (list 0 0 (- 0 (caddr InsertPoint))))
)
 	)
(setq index (+ index 1))
)
 (command "OSMODE" os)
 (command "UNDO" "END")
 (princ)
)

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
Đăng nhập để thực hiện theo  

×