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

Mã hóa các text trong bản vẽ

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

Nhờ các anh trong diễn đàn hướng dẫn & giải quyết: có cách nào mã hóa (encrypt và decrypt) các text trong bản vẽ? (từ 1 chuỗi text ta có thể cắt rời từng ký tự sau đó thay thế và mã hóa các đối tượng này). Thanks :s_dead:

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 anh trong diễn đàn hướng dẫn & giải quyết: có cách nào mã hóa (encrypt và decrypt) các text trong bản vẽ? (từ 1 chuỗi text ta có thể cắt rời từng ký tự sau đó thay thế và mã hóa các đối tượng này). Thanks :s_dead:

 

 

Mục đích của việc mã hóa để làm gì? Bác có thể cho ví dụ mã hóa như thế nào 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
Mục đích của việc mã hóa để làm gì? Bác có thể cho ví dụ mã hóa như thế nào không?

 

mục đích của tôi là bảo vệ bản vẽ (có những công trình giao file nhưng chủ đầu tư chưa giao tiền) tôi ví dụ: trong file bản vẽ có đối tượng text là abc, tôi muốn cắt chuỗi này và mã hóa ký tự a thành một ký tự khác trong bản mã acii theo một hằng số, giả sử tôi cho hằng số = 3, ký tự a sẽ là = d trong bản vẽ (a + 3 = d), tương tự cho b, c. . .) decrypt = ta sẽ hoàn nguyê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
mục đích của tôi là bảo vệ bản vẽ (có những công trình giao file nhưng chủ đầu tư chưa giao tiền) tôi ví dụ: trong file bản vẽ có đối tượng text là abc, tôi muốn cắt chuỗi này và mã hóa ký tự a thành một ký tự khác trong bản mã acii theo một hằng số, giả sử tôi cho hằng số = 3, ký tự a sẽ là = d trong bản vẽ (a + 3 = d), tương tự cho b, c. . .) decrypt = ta sẽ hoàn nguyên

 

Đây là cách mã hóa đơn giản nhất được gọi là mã hóa CEASAR (Từ trước CN mà ông này giỏi thế, đã nghĩ ra rồi)

Bác GET về sau đó bổ sung thêm các hàm chọn TEXT, hàm lấy vị trí TEXT và hàm thay thế nhé

;Chuong ma hoa chuoi theo thuat toan Ceasar
(DEFUN ENCRYPT(str n / l str1 m)
 (setq str1 "a")  
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (ascii c))
(setq m (+ m n))
(setq m (MOD m 255))
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )
 (setq str1 (substr str1 2))  
 str1
)
(DEFUN DECRYPT (str n / l str1 m)
 (setq str1 "a")
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (ascii c))
(setq m (- m n))
(if (< m 0)
  (setq m (+ m 255))
)
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )  
 (setq str1 (substr str1 2))
 str1
)
(DEFUN SETALPHA( / Li)
 (setq Li (List))
 (setq i 32)
 (while (<= i 255)
(setq Li (append Li (List i)))
(setq i (1+ i))
 )
 (setq LiAlpha Li)
)  
(DEFUN MOD (m n / kq)
 (while (> m n)
(setq m (- m n))
 )
 (setq kq m)
 kq
)

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
Đây là cách mã hóa đơn giản nhất được gọi là mã hóa CEASAR (Từ trước CN mà ông này giỏi thế, đã nghĩ ra rồi)

Bác GET về sau đó bổ sung thêm các hàm chọn TEXT, hàm lấy vị trí TEXT và hàm thay thế nhé

Em GET rồi, dùng lệnh gì để chạy chương trình hả bác?

Phải bổ sung hàm chọn TEXT như thế nào?

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 GET rồi, dùng lệnh gì để chạy chương trình hả bác?

Phải bổ sung hàm chọn TEXT như thế nào?

 

Hàm GETTEXT có tính năng như sau:

Cho phép chọn nhóm đối tượng trên bản vẽ và lọc ra đối tượng là TEXT hoặc MTEXT

Các thuộc tính được lọc theo assoc như sau:

 

0 - Tên đối tượng

1 - Nội dung text (Nếu là MTEXT thì các hàng phân biệt bởi "\\")

7 - Style chữ

8 - Tên Layer

10 - Tọa độ điểm chèn

40 - Chiều cao chữ

50 - Góc quay text

51 - Độ nghiên của text

71 - Hướng dòng chữ (Không cần quan tâm lắm)

72 - Canh lề theo phương ngang

73 - Canh lề theo phương đứng

 

Ghi nhận lại các thông tin này để thay thế.

 

1. RE_ENCRYPT - Hàm thay thế có chức năng sau:

GETTEXT

ENCRYPT

REWRITE

 

2. RE_DECRYPT - Hàm thay thế có chức năng sau:

GETTEXT

DECRYPT

REWRITE

 

Mời các bác tiếp tục nhé. Chúc thành cô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
Hàm GETTEXT có tính năng như sau:

Cho phép chọn nhóm đối tượng trên bản vẽ và lọc ra đối tượng là TEXT hoặc MTEXT

Các thuộc tính được lọc theo assoc như sau:

 

0 - Tên đối tượng

1 - Nội dung text (Nếu là MTEXT thì các hàng phân biệt bởi "\\")

7 - Style chữ

8 - Tên Layer

10 - Tọa độ điểm chèn

40 - Chiều cao chữ

50 - Góc quay text

51 - Độ nghiên của text

71 - Hướng dòng chữ (Không cần quan tâm lắm)

72 - Canh lề theo phương ngang

73 - Canh lề theo phương đứng

 

Ghi nhận lại các thông tin này để thay thế.

 

1. RE_ENCRYPT - Hàm thay thế có chức năng sau:

GETTEXT

ENCRYPT

REWRITE

 

2. RE_DECRYPT - Hàm thay thế có chức năng sau:

GETTEXT

DECRYPT

REWRITE

 

Mời các bác tiếp tục nhé. Chúc thành công

 

bạn vndesperados ơi tôi không rành về autolisp . . . !!!

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ái của vndesperados lý thuyết cao quá, lại không có lệnh của ACAD nên người dùng không sử dụng được.

 

Sau đây là một đoạn mã lisp rất đơn giản để thực hiện theo yêu cầu của vbao (dịch 3 ký tự).

Dùng lệnh ENTXT để mã hóa. DETXT để giải mã (hoặc ngược lại, miễn là theo cặp).

Mật mã nằm tại hai dòng đầu tiên, có thể xáo trộn, thêm mã ascii khác nhưng cần đảm bảo 1 nguyên tắc: dòng trên có chữ gì thì dòng dưới có chữ đó, mỗi chữ xuất hiện 1 lần.

 

(setq txtsrc "123456789abcdefghijklmnopqrstuvxyz "
  txtdes "456789abcdefghijklmnopqrstuvxyz 123"
)
(vl-load-com)
(defun transl (ent / tt old new gt)
 (setq	tt  (entget ent)
old (assoc 1 tt)
gt  (cdr old)
new (cons 1 (vl-string-translate src des gt))	
 )
 (entmod (subst new old tt))
 (entupd ent)
)
(defun c:ENTXT ()
 (setq	ss  (ssget '((0 . "TEXT")))
src txtsrc
des txtdes
 )
 (princ (strcat "\nSo doi tuong duoc sua: " (itoa (sudung transl ss))))
 (princ)
)
(defun c:DETXT ()
 (setq	ss  (ssget '((0 . "TEXT")))
src txtdes
des txtsrc
 )
 (princ (strcat "\nSo doi tuong duoc sua: " (itoa (sudung transl ss))))
 (princ)
)

(defun sudung (ham ss / sodt index entdt soapp)
 (setq	sodt  (cond
	(ss (sslength ss))
	(t 0)
	  )
soapp 0
index 0
 )
 (repeat sodt
(setq entdt	(ssname ss index)
  index	(1+ index)
)
(if	(ham entdt)
  (setq soapp (1+ soapp))
)
 )
 soapp
)

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ái của vndesperados lý thuyết cao quá, lại không có lệnh của ACAD nên người dùng không sử dụng được.

 

Sau đây là một đoạn mã lisp rất đơn giản để thực hiện theo yêu cầu của vbao (dịch 3 ký tự).

Dùng lệnh ENTXT để mã hóa. DETXT để giải mã (hoặc ngược lại, miễn là theo cặp).

Mật mã nằm tại hai dòng đầu tiên, có thể xáo trộn, thêm mã ascii khác nhưng cần đảm bảo 1 nguyên tắc: dòng trên có chữ gì thì dòng dưới có chữ đó, mỗi chữ xuất hiện 1 lần.

 

(setq txtsrc "123456789abcdefghijklmnopqrstuvxyz "
  txtdes "456789abcdefghijklmnopqrstuvxyz 123"
)
(vl-load-com)
(defun transl (ent / tt old new gt)
 (setq	tt  (entget ent)
old (assoc 1 tt)
gt  (cdr old)
new (cons 1 (vl-string-translate src des gt))	
 )
 (entmod (subst new old tt))
 (entupd ent)
)
(defun c:ENTXT ()
 (setq	ss  (ssget '((0 . "TEXT")))
src txtsrc
des txtdes
 )
 (princ (strcat "\nSo doi tuong duoc sua: " (itoa (sudung transl ss))))
 (princ)
)
(defun c:DETXT ()
 (setq	ss  (ssget '((0 . "TEXT")))
src txtdes
des txtsrc
 )
 (princ (strcat "\nSo doi tuong duoc sua: " (itoa (sudung transl ss))))
 (princ)
)

(defun sudung (ham ss / sodt index entdt soapp)
 (setq	sodt  (cond
	(ss (sslength ss))
	(t 0)
	  )
soapp 0
index 0
 )
 (repeat sodt
(setq entdt	(ssname ss index)
  index	(1+ index)
)
(if	(ham entdt)
  (setq soapp (1+ soapp))
)
 )
 soapp
)

 

Xin lỗi bác Hoành nhé. Công nhận bác coding nhanh thật và khả năng sử dụng lệnh của LISP cũng như VisualLISP của bác thì mình bái phục. Mình hầu như chẳng thuộc lệnh của LISP đâu. Coding đến đâu thì mở HELP ra xem thôi. Nhưng mà tư duy của bác thì amateur hay là bác giấu nghề- Xin lỗi bác đừng giận.

Bác có thử chạy code của bác trên chữ hoa hay trên các ký hiệu chưa? và nếu người ta cần mã hóa mà bác dùng dịch chuyển là hằng số như thế thì coi bộ không ổn lắm, tất nhiên cái mã hóa mà bác Vbao yêu cầu cũng chỉ là amateur, nếu bác Vbao cần PRO thì mình cũng có thể code cho một đọan dùng mã công khai hoặc mã đối xứng. (Hehe, nghề của mình là Java Network Security mà)

Nhưng mà dù sao cũng cảm ơn bác, nhờ cái đọan code của bác mà mình học thêm được vài lệnh LISP.

@Vbao: Hôm nay bận quá. Để mai mình coding chương trình hòan chỉnh rồi gửi 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
Mật mã nằm tại hai dòng đầu tiên, có thể xáo trộn, thêm mã ascii khác nhưng cần đảm bảo 1 nguyên tắc: dòng trên có chữ gì thì dòng dưới có chữ đó, mỗi chữ xuất hiện 1 lần.

 

Chẳng có gì giấu cả, mình quan niệm đã là Lisp là amatơ. Mã mở, hướng dẫn người sử dụng tỉ mỷ, khi người sử dụng gặp chữ hoa tự khắc biết cách sửa. Mình không nghĩ họ không ngốc đến mức để nguyên chữ hoa.

 

Hãy giản dị như cuộc sống nó vẫn thế!

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ẳng có gì giấu cả, mình quan niệm đã là Lisp là amatơ. Mã mở, hướng dẫn người sử dụng tỉ mỷ, khi người sử dụng gặp chữ hoa tự khắc biết cách sửa. Mình không nghĩ họ không ngốc đến mức để nguyên chữ hoa.

 

Hãy giản dị như cuộc sống nó vẫn thế!

 

 

Bác Hoành này, trong bảng mã ASCII có 256 ký tự, trừ 32 ký tự đầu tiên có mã là 0..31 không hiển thị được còn 224 ký tự còn lại đều có khả năng xuất hiện trên bản vẽ. Nếu theo cách của bác thì nên khai đủ 224 ký tự đó và mỗi lần thay khóa để mã hóa thì bác phải viết lại hai dòng destxt va srctxt à?

 

@Vbao: Bác thử load code mình viết vào và thử tai dòng lệnh COMMAND của AutoCad nhé

(setq aa (ENCRYPT "Vo Kien Cuong - FITC" n))

(setq bb (DECRYPT aa n))

xem thử nó ra cái gì nhé...

Với n < 255 bất kỳ...

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

Đây rồi. các bác GET về và dung với các lệnh:

ENC = mã hóa

DEC = giải mã

 

;Chuong ma hoa chuoi theo thuat toan Ceasar
(DEFUN ENCRYPT(str n / i l str1 m)
 (setq str1 "a")  
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (ascii c))
(setq m (+ m n))
(setq m (MOD m 255))
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )
 (setq str1 (substr str1 2))  
 str1
)
(DEFUN DECRYPT (str n / i l str1 m)
 (setq str1 "a")
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (ascii c))
(setq m (- m n))
(if (< m 0)
  (setq m (+ m 255))
)
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )  
 (setq str1 (substr str1 2))
 str1
)
(DEFUN SETALPHA( / Li)
 (setq Li (List))
 (setq i 32)
 (while (<= i 255)
(setq Li (append Li (List i)))
(setq i (1+ i))
 )
 (setq LiAlpha Li)
)  
(DEFUN MOD (m n / kq)
 (while (> m n)
(setq m (- m n))
 )
 (setq kq m)
 kq
)
(DEFUN C:ENC (/ ss str str0)
 (SETALPHA)
 (setvar "CMDECHO" 0)
 (princ "\nChon doi tuong can ma hoa:")  
 (setq ss (ssget '((-4 . ""))))
 (setq m (getint "Cho biet ma khoa: "))
 (setq i 0)
 (setq dt (ssname ss 0))  
 (setq n (sslength ss))
 (setq i 0)
 (while (< i n)	
(setq dt (ssname ss i))	
(setq str (GETCONTENT dt))	
(setq str0 str)
(if (= (TENDOITUONG dt) "TEXT")
  (setq str (ENCRYPT str m))
  (setq str (ENC_MTEXT str m))	
)	
(setq obj (entget dt))
(setq obj (subst (cons 1 str) (cons 1 str0) obj))	
(entmod obj)
(entupd dt)
(setq i (1+ i))
 )
 (setvar "CMDECHO" 0)
 (princ) 
)
(DEFUN C:DEC (/ ss str str0)
 (SETALPHA)
 (setvar "CMDECHO" 0)
 (princ "\nChon doi tuong can giai ma:")  
 (setq ss (ssget '((-4 . ""))))
 (setq m (getint "Cho biet ma khoa: "))
 (setq i 0)
 (setq dt (ssname ss 0))  
 (setq n (sslength ss))
 (setq i 0)
 (while (< i n)	
(setq dt (ssname ss i))	
(setq str (GETCONTENT dt))	
(setq str0 str)
(if (= (TENDOITUONG dt) "TEXT")
  (setq str (DECRYPT str m))
  (setq str (DEC_MTEXT str m))	
)	
(setq obj (entget dt))
(setq obj (subst (cons 1 str) (cons 1 str0) obj))	
(entmod obj)
(entupd dt)
(setq i (1+ i))
 )
 (setvar "CMDECHO" 0)
 (princ) 
)

(DEFUN ENC_MTEXT(str m / LiStr i encstr n)
 (setq LiStr (List))
 (setq encstr "a")  
 (setq i (POSTSTR str "\\P"))  
 (if (= i 0)
(setq LiStr (Append LiStr (List str)))
(progn	  
  (while (> i 0)	
(setq temp (substr str 1 (1- i)))	
	(setq LiStr (Append LiStr (List temp)))
	(setq str (substr str (+ i 2)))	
(setq i (POSTSTR str "\\P"))	
  )
  (setq LiStr (Append LiStr (List str)))	  
)
 )
 (setq n (length LiStr))  
 (setq i 0)
 (while(< i n)
(setq encstr (strcat encstr "\\P" (ENCRYPT (nth i LiStr) m)))
(setq i (+ i 1))	
 )  
 (setq encstr (substr encstr 4))
 encstr
)  
(DEFUN DEC_MTEXT(str m / LiStr i decstr n)
 (setq LiStr (List))
 (setq decstr "a")  
 (setq i (POSTSTR str "\\P"))  
 (if (= i 0)
(setq LiStr (Append LiStr (List str)))
(progn	  
  (while (> i 0)	
(setq temp (substr str 1 (1- i)))	
	(setq LiStr (Append LiStr (List temp)))
	(setq str (substr str (+ i 2)))	
(setq i (POSTSTR str "\\P"))	
  )
  (setq LiStr (Append LiStr (List str)))	  
)
 )
 (setq n (length LiStr))  
 (setq i 0)
 (while(< i n)
(setq decstr (strcat decstr "\\P" (DECRYPT (nth i LiStr) m)))
(setq i (+ i 1))	
 )  
 (setq decstr (substr decstr 4))
 decstr
)
(DEFUN GETCONTENT (obj / cont)
 (setq cont (cdr (assoc 1 (entget obj))))
 cont
)
(DEFUN POSTSTR(str0 str / vt i l0 l)
 (setq vt 0)
 (setq l0 (strlen str0))
 (setq l (strlen str))
 (setq i 1)
 (while (< i (- l0 l -1))
(if (= (substr str0 i l) str)
  (progn			 
	(setq vt i)
	(setq i l0)
  )
)
(setq i (1+ i))
 )
 vt
)
(DEFUN TENDOITUONG (obj / name)
 (setq name (CDR (ASSOC 0 (ENTGET obj))))  
 name  
)

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
Đây rồi. các bác GET về và dung với các lệnh:

ENC = mã hóa

DEC = giải mã

 

;Chuong ma hoa chuoi theo thuat toan Ceasar
(DEFUN ENCRYPT(str n / i l str1 m)
 (setq str1 "a")  
 (setq l (strlen str))
 (setq i 1)
 (while (	(setq c (substr str i 1))
(setq m (ascii c))
(setq m (+ m n))
(setq m (MOD m 255))
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )
 (setq str1 (substr str1 2))  
 str1
)
(DEFUN DECRYPT (str n / i l str1 m)
 (setq str1 "a")
 (setq l (strlen str))
 (setq i 1)
 (while (	(setq c (substr str i 1))
(setq m (ascii c))
(setq m (- m n))
(if (	  (setq m (+ m 255))
)
(setq str1 (strcat str1 (chr (nth (- m 32) LiAlpha))))
(setq i (1+ i))
 )  
 (setq str1 (substr str1 2))
 str1
)
(DEFUN SETALPHA( / Li)
 (setq Li (List))
 (setq i 32)
 (while (	(setq Li (append Li (List i)))
(setq i (1+ i))
 )
 (setq LiAlpha Li)
)  
(DEFUN MOD (m n / kq)
 (while (> m n)
(setq m (- m n))
 )
 (setq kq m)
 kq
)
(DEFUN C:ENC (/ ss str str0)
 (SETALPHA)
 (setvar "CMDECHO" 0)
 (princ "\nChon doi tuong can ma hoa:")  
 (setq ss (ssget '((-4 . ""))))
 (setq m (getint "Cho biet ma khoa: "))
 (setq i 0)
 (setq dt (ssname ss 0))  
 (setq n (sslength ss))
 (setq i 0)
 (while (	(setq dt (ssname ss i))	
(setq str (GETCONTENT dt))	
(setq str0 str)
(if (= (TENDOITUONG dt) "TEXT")
  (setq str (ENCRYPT str m))
  (setq str (ENC_MTEXT str m))	
)	
(setq obj (entget dt))
(setq obj (subst (cons 1 str) (cons 1 str0) obj))	
(entmod obj)
(entupd dt)
(setq i (1+ i))
 )
 (setvar "CMDECHO" 0)
 (princ) 
)
(DEFUN C:DEC (/ ss str str0)
 (SETALPHA)
 (setvar "CMDECHO" 0)
 (princ "\nChon doi tuong can giai ma:")  
 (setq ss (ssget '((-4 . ""))))
 (setq m (getint "Cho biet ma khoa: "))
 (setq i 0)
 (setq dt (ssname ss 0))  
 (setq n (sslength ss))
 (setq i 0)
 (while (	(setq dt (ssname ss i))	
(setq str (GETCONTENT dt))	
(setq str0 str)
(if (= (TENDOITUONG dt) "TEXT")
  (setq str (DECRYPT str m))
  (setq str (DEC_MTEXT str m))	
)	
(setq obj (entget dt))
(setq obj (subst (cons 1 str) (cons 1 str0) obj))	
(entmod obj)
(entupd dt)
(setq i (1+ i))
 )
 (setvar "CMDECHO" 0)
 (princ) 
)

(DEFUN ENC_MTEXT(str m / LiStr i encstr n)
 (setq LiStr (List))
 (setq encstr "a")  
 (setq i (POSTSTR str "\\P"))  
 (if (= i 0)
(setq LiStr (Append LiStr (List str)))
(progn	  
  (while (> i 0)	
(setq temp (substr str 1 (1- i)))	
	(setq LiStr (Append LiStr (List temp)))
	(setq str (substr str (+ i 2)))	
(setq i (POSTSTR str "\\P"))	
  )
  (setq LiStr (Append LiStr (List str)))	  
)
 )
 (setq n (length LiStr))  
 (setq i 0)
 (while(	(setq encstr (strcat encstr "\\P" (ENCRYPT (nth i LiStr) m)))
(setq i (+ i 1))	
 )  
 (setq encstr (substr encstr 4))
 encstr
)  
(DEFUN DEC_MTEXT(str m / LiStr i decstr n)
 (setq LiStr (List))
 (setq decstr "a")  
 (setq i (POSTSTR str "\\P"))  
 (if (= i 0)
(setq LiStr (Append LiStr (List str)))
(progn	  
  (while (> i 0)	
(setq temp (substr str 1 (1- i)))	
	(setq LiStr (Append LiStr (List temp)))
	(setq str (substr str (+ i 2)))	
(setq i (POSTSTR str "\\P"))	
  )
  (setq LiStr (Append LiStr (List str)))	  
)
 )
 (setq n (length LiStr))  
 (setq i 0)
 (while(	(setq decstr (strcat decstr "\\P" (DECRYPT (nth i LiStr) m)))
(setq i (+ i 1))	
 )  
 (setq decstr (substr decstr 4))
 decstr
)
(DEFUN GETCONTENT (obj / cont)
 (setq cont (cdr (assoc 1 (entget obj))))
 cont
)
(DEFUN POSTSTR(str0 str / vt i l0 l)
 (setq vt 0)
 (setq l0 (strlen str0))
 (setq l (strlen str))
 (setq i 1)
 (while (	(if (= (substr str0 i l) str)
  (progn			 
	(setq vt i)
	(setq i l0)
  )
)
(setq i (1+ i))
 )
 vt
)
(DEFUN TENDOITUONG (obj / name)
 (setq name (CDR (ASSOC 0 (ENTGET obj))))  
 name  
)

 

"Chuyên gia phần mềm chuyên nghiệp" xem lại cho tại sao khi encrypt một số đối tượng thì bị báo lỗi:

; error: bad argument value: non-negative: -31

số -31 chỉ là ví dụ, mỗi mã khóa bị một số khác nhau.

 

Ví dụ khi dòng text có giá trị {error} thì sử dụng lệnh ENC với mã khóa từ 131-185 đều báo lỗi.

không biết chuyên gia chuyên nghiệp giải thích thế nào với khác hàng, hay là do phần mềm trên free nên còn nhiều lỗ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

(DEFUN ENCRYPT(str n / i l str1 m)
 (setq str1 "a")  
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (- (ascii c) 32))
(setq m (+ m n))
(while (< m 0)
  (setq m (+ m 224))
)  
(setq m (MOD m 224))
(setq str1 (strcat str1 (chr (nth m LiAlpha))))
(setq i (1+ i))
 )
 (setq str1 (substr str1 2))  
 str1
)
(DEFUN DECRYPT (str n / i l str1 m)
 (setq str1 "a")
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (- (ascii c) 32))
(setq m (- m n))
(while (< m 0)
  (setq m (+ m 224))
)
(setq m (MOD m 224))	
(setq str1 (strcat str1 (chr (nth m LiAlpha))))
(setq i (1+ i))
 )  
 (setq str1 (substr str1 2))
 str1
)

(DEFUN MOD (m n / kq)
 (while (>= m n)
(setq m (- m n))
 )
 (setq kq m)
 kq
)

 

Các bác thay thế 3 defun này vào đọan code trước.

Bấy giờ thì mã hóa với số nguyên bất kỳ. (âm dương đều được)

 

Các bác thông cảm, máy ở công ty không cài ACAD nên không test được...

Thôi mình phải làm việc đây

Dù sao cũng cảm ơn bác Hòanh đã test giúp, heheheheh.

  • 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
(DEFUN ENCRYPT(str n / i l str1 m)
 (setq str1 "a")  
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (- (ascii c) 32))
(setq m (+ m n))
(while (< m 0)
  (setq m (+ m 224))
)  
(setq m (MOD m 224))
(setq str1 (strcat str1 (chr (nth m LiAlpha))))
(setq i (1+ i))
 )
 (setq str1 (substr str1 2))  
 str1
)
(DEFUN DECRYPT (str n / i l str1 m)
 (setq str1 "a")
 (setq l (strlen str))
 (setq i 1)
 (while (<= i l)
(setq c (substr str i 1))
(setq m (- (ascii c) 32))
(setq m (- m n))
(while (< m 0)
  (setq m (+ m 224))
)
(setq m (MOD m 224))	
(setq str1 (strcat str1 (chr (nth m LiAlpha))))
(setq i (1+ i))
 )  
 (setq str1 (substr str1 2))
 str1
)

(DEFUN MOD (m n / kq)
 (while (>= m n)
(setq m (- m n))
 )
 (setq kq m)
 kq
)

 

Các bác thay thế 3 defun này vào đọan code trước.

Bấy giờ thì mã hóa với số nguyên bất kỳ. (âm dương đều được)

 

Các bác thông cảm, máy ở công ty không cài ACAD nên không test được...

Thôi mình phải làm việc đây

Dù sao cũng cảm ơn bác Hòanh đã test giúp, heheheheh.

 

Cảm ơn các bạn rất nhiều :s_dead:

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âu rồi mới có dịp nói chuyện cùng anh em CAD VIET

Cho tôi hỏi 1 vấn đề nhé , tôi ko biết những cái mà các đồng chí nói ở trên (Vì tôi ko là dân lập trình như các đồng chí)

Xin hỏi : có đoạn lisp nào khi dùng thì không sửa đc bản vẽ nữa ko Chỉ để in thôi ý Cái này tôi thấy cần thiết lắ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

Vấn đề thứ 2 muốn nhờ các đồng chí là : làm thế nào để gửi bản vẽ (bằng email) đến cho người khác (vẫn là email) mà chỉ cần đánh địa chỉ email đến , còn mail của mình dùng để gửi chỉ cần nhập 01 lần + cá password

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âu rồi mới có dịp nói chuyện cùng anh em CAD VIET

Cho tôi hỏi 1 vấn đề nhé , tôi ko biết những cái mà các đồng chí nói ở trên (Vì tôi ko là dân lập trình như các đồng chí)

Xin hỏi : có đoạn lisp nào khi dùng thì không sửa đc bản vẽ nữa ko Chỉ để in thôi ý Cái này tôi thấy cần thiết lắm

 

Dùng PDF Creator, cái này chuyển bản vẽ thành PDF, cho phép xem thôi, khỏi sửa.

Còn cách nữa, Nếu biết dùng ObjectARX cũng có thể tạo ra những đối tượng không sửa được bằng cách thông thườ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
Vấn đề thứ 2 muốn nhờ các đồng chí là : làm thế nào để gửi bản vẽ (bằng email) đến cho người khác (vẫn là email) mà chỉ cần đánh địa chỉ email đến , còn mail của mình dùng để gửi chỉ cần nhập 01 lần + cá password

 

1. Cố gắng tìm một địa chỉ email hỗ trợ POP3 (hotmail, vnnmai), dùng với Outlook Express hoặc Microsof Outlook.

2. Các địa chỉ Web mail hoặc Internet mail thì mở ra sau đó dùng Bookmark để đánh dấu lạ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
Dùng PDF Creator, cái này chuyển bản vẽ thành PDF, cho phép xem thôi, khỏi sửa.

Còn cách nữa, Nếu biết dùng ObjectARX cũng có thể tạo ra những đối tượng không sửa được bằng cách thông thường.

 

Vấn đề giao bản vẽ không cho chinh sửa trên diển đàn này có khá nhiều bài viết rồi nhưng chưa có giải pháp nào ngon lành cả:

-Chuyển sang PFD thì khôngdược vì phải giao file *.DWG.

-Nổ tàon bộ bản vẽ thì thủ công và nói chung không giải quyết vấn đề tận gốc được.

-Dùng chương trình LOCKDWG thì thấy nói dính vấn đề bản quyền. và thấy anh em phản hồi là có khi dùng không được.

Thấy bác nói cái ObjectARX gì đó nếu đơn giản nác có thể làm một bài hướng dẩn được không. Mình nghỉ cái này nhiều người quan tâm chứ không riêng mình mình. Cám ơ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

Xin chào các bạn CADVIET và chào riêng vndesperados nhé

Vấn đề bảo mật khi giao bản vẽ để đòi $ thì nó là bệnh muôn thủa của KTS rồi :ph34r: Bạn nói có thể dùng ObjectARX để làm việc đó thì làm như thế nào ? Có thể chia sẻ cho anh em đc không ? Chắc là đc thôi nhỉ :s_dead: .

Còn vấn đề gửi MAIL là ý mình muốn hỏi GỬI MAIL TRONG CAD chứ ko phải như bạn nói Cái bạn nói mình làm đc rồi Cảm ơ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ái này đã có bàn rồi mà, truớc đây Nguyễn Hoành cũng có đố mọi nguời explode cái Block mà ko được đó.

 

Xin thưa bà con là chỉ cần dùng lệnh MINSERT chèn cái bản vẽ đó vào 1 bản vẽ mới, với số lượng là 1,1 nhưng khoảng cách các block khác 0. Xong rồi gửi bản vẽ cho khách hàng.

 

Thách cụ khách hàng explode cái block đó ra được. :s_dead:)

 

Cách này mất công nếu có vài chục bản vẽ. Nhưng lúc đó sẽ cần đến những soft cho fép tạo SCRIPT để tự động hoá việc này. Còn vụ chuyển sang PDF thì hehe, hợp đồng đòi file CAD thì ko thể giao PDF đượ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ái này đã có bàn rồi mà, truớc đây Nguyễn Hoành cũng có đố mọi nguời explode cái Block mà ko được đó.

 

Xin thưa bà con là chỉ cần dùng lệnh MINSERT chèn cái bản vẽ đó vào 1 bản vẽ mới, với số lượng là 1,1 nhưng khoảng cách các block khác 0. Xong rồi gửi bản vẽ cho khách hàng.

 

Thách cụ khách hàng explode cái block đó ra được. :s_dead:)

 

Cách này mất công nếu có vài chục bản vẽ. Nhưng lúc đó sẽ cần đến những soft cho fép tạo SCRIPT để tự động hoá việc này. Còn vụ chuyển sang PDF thì hehe, hợp đồng đòi file CAD thì ko thể giao PDF được.

 

Mình làm thử thì ra như thế này:

Command: minsert

Block name (or ?) <BAOMAT>:

Insertion point: X scale factor <1> / Corner / XYZ:

Y scale factor (default=X):

Rotation angle <0>:

 

Number of rows (---) <1>: 1

 

Number of columns (|||) <1>: 1

 

Nhưng sao nó hông cho chọn files mà chỉ hỏi tên block thôi.

Mình dùng lệnh ínẻt chèn bản vẽ vào rồi dùng lệnh đó thi vẫn phá dược như thường. Minh sai chổ nào vậy. Mong bạn 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

- Bạn phải nhập đường dẫn đầy đủ khi máy ACAD tên block. ví dụ:

Command: minsert

Enter block name or [?] :D:\tmp\BLOCKS\WC\bt01_f.dwg

Units: Inches Conversion: 1.0000

Specify insertion point or [basepoint/Scale/X/Y/Z/Rotate]:

Enter X scale factor, specify opposite corner, or [Corner/XYZ] :

Enter Y scale factor :

Specify rotation angle :

Enter number of rows (---) : 2

Enter number of columns (|||) : 2

Enter distance between rows or specify unit cell (---): 0

Specify distance between columns (|||): 0

 

- Bạn đừng nhập 'number of rows' và 'number of columns' bằng 1 vì như thế ACAD tự convert về thành block. Hãy nhập là 2, sau đó sửa lại thành 1 sau (bằng bảng lệnh Properties - Ctrl+1).

  • 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

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

×