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 Hoành ah, trong diễn đàn có cái lisp vẽ mặt cắt bình đồ nhưng các đường đồng mức không có cao trình (z=0) mà mình sẽ nhập độ chênh deltaZ và các đường đồng mức tăng dần or giảm dần. Nhưng trong thực tế các đường đồng mức lúc tăng lúc giảm và có những bài toán độ tăng của đường đồng mức không đều (deltaZ thay đổi).

Bài toán của em là:

+ Bình đồ có đường đồng mức có cao độ z (mình đỡ phải khai báo deltaH)

+ Chọn 1 line (or pline) làm mặt cắt tính toán (giống bài toán của bác)

+ Xuất ra phôi mặt cắt ngang (giống bài toán của bác)

Bác Hoành hay bác ssg giúp em vớ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

Kính gửi anh Hoành, và cả nhà!

Khi scan to lên hay nhỏ đi thì đim nó bị nhảy !

 

em muốn có 1 cái lisp như sau:

-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)

-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này

Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan

Mong các bác giúp em!

Chúc bác Hoanh manh khỏe, diễn đàn ngày càng phát triể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
Kính gửi anh Hoành, và cả nhà!

Khi scan to lên hay nhỏ đi thì đim nó bị nhảy !

 

em muốn có 1 cái lisp như sau:

-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)

-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này

Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan

Mong các bác giúp em!

Chúc bác Hoanh manh khỏe, diễn đàn ngày càng phát triển!

Mong tin bác mỗi ngày!

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 muốn có 1 cái lisp như sau:

-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)

-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này

Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan

Bạn dùng thử lisp này. Tên lệnh SCC:

;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss) 
   (setq
       e (ssname ss i)
       Le (append Le (list e))
       i (1+ i)
   )
)
Le
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L k e d dtype dt k0 newdtype) ;;;SCale Constant
(setq
   ss (ssget)
   ssd (ssget "p" '((0 . "DIMENSION")))
   L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(foreach e L
   (setq d (entget e))
   (if (wcmatch (cdr (assoc 0 d)) "TEXT,MTEXT")
       (entmod (subst (cons 40 (/ (cdr (assoc 40 d)) k)) (assoc 40 d) d))
   )
)
(if ssd (progn
   (setq
       e (ssname ssd 0)
       d (entget e)
       dtype (cdr (assoc 3 d))
       dt (tblsearch "dimstyle" dtype)
       k0 (cdr (assoc 144 dt))
       newdtype (strcat dtype "x" (rtos k))
   )
   (setvar "dimlfac" (/ k0 k))
   (if (tblsearch "dimstyle" newdtype)
       (command "dimstyle" "r" newdtype)
       (command "dimstyle" "s" newdtype)
   )
   (command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------

 

Chú ý:

1) Phải chọn cả các đối tượng dim khi chương trình yêu cầu select objects

2) Dim không bị "độ chế", tức là đã bị sửa Dim scale linear trong properties

  • Vote tăng 4

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 thử lisp này. Tên lệnh SCC:

;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e) ;;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss) 
   (setq
       e (ssname ss i)
       Le (append Le (list e))
       i (1+ i)
   )
)
Le
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L k e d dtype dt k0 newdtype) ;;;SCale Constant
(setq
   ss (ssget)
   ssd (ssget "p" '((0 . "DIMENSION")))
   L (ss2ent ss)
)
(command "scale" ss "" pause (setq k (getreal "\nScale factor:")))
(foreach e L
   (setq d (entget e))
   (if (wcmatch (cdr (assoc 0 d)) "TEXT,MTEXT")
       (entmod (subst (cons 40 (/ (cdr (assoc 40 d)) k)) (assoc 40 d) d))
   )
)
(if ssd (progn
   (setq
       e (ssname ssd 0)
       d (entget e)
       dtype (cdr (assoc 3 d))
       dt (tblsearch "dimstyle" dtype)
       k0 (cdr (assoc 144 dt))
       newdtype (strcat dtype "x" (rtos k))
   )
   (setvar "dimlfac" (/ k0 k))
   (if (tblsearch "dimstyle" newdtype)
       (command "dimstyle" "r" newdtype)
       (command "dimstyle" "s" newdtype)
   )
   (command "dimstyle" "a" ssd "")
))
(princ)
)
;;;-------------------------------------------------------------

 

Chú ý:

1) Phải chọn cả các đối tượng dim khi chương trình yêu cầu select objects

2) Dim không bị "độ chế", tức là đã bị sửa Dim scale linear trong properties

lisp hay quá, rất tiện dụng. Cảm ơn 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

Bác Hoành giúp em cai Lisp này với, trong diễn đàn có cái lisp vẽ mặt cắt bình đồ nhưng các đường đồng mức không có cao trình (z=0) mà mình sẽ nhập độ chênh deltaZ và các đường đồng mức tăng dần or giảm dần. Nhưng trong thực tế các đường đồng mức lúc tăng lúc giảm và có những bài toán độ tăng của đường đồng mức không đều (deltaZ thay đổi).

Bài toán của em là:

+ Bình đồ có đường đồng mức có cao độ z (mình đỡ phải khai báo deltaH)

+ Chọn 1 line (or pline) làm mặt cắt tính toán (giống bài toán của bác)

+ Xuất ra phôi mặt cắt ngang (giống bài toán của bác)

Bác Hoành hay bác ssg giúp em vớ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
lisp hay quá, rất tiện dụng. Cảm ơn bác nhiều!

Tôi dùng lisp này và thấy khá hay, nhưng có một nhược điểm, khi mình scale lên thì chữ ghi kích thước và chữ trong bản vẽ không đc scale lên, vẫn giũ kích thước của đối tượng cũ, có cách nào làm tăng chữ ghi kích thước và chữ trong bản vẽ (thuộc đối tượng mình scale) lên theo tỉ lệ sacle thì hay quá!ai làm đc thì giúp vớ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

Các cao thủ giúp em một tay với!!! Có cách nào lấy được đường dẫn thư mục chứa các file hệ thống của windows (system or system32) bằng lisp không? (Ý của em là tìm bằng lisp function, hoặc biến môi trường, không có sự can thiệp của người dùng)

Em đã thử tìm các biến của CAD mà không thấy biến nào lưu trữ cái này.

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.

chào anh Hoành lâu quá mới nhờ anh 1 tí thế này, trong cad cua mình có 1 cái rất hay là sau khi ra 1 lệnh thì nhấn P sẽ chọn lại các object mình đã chọn trước đó nhưng nó lại ko có tác dung với lệnh stretch, mình có cái líp nào để khắc phục điều này ko anh, mong chờ hồi â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
chào anh Hoành lâu quá mới nhờ anh 1 tí thế này, trong cad cua mình có 1 cái rất hay là sau khi ra 1 lệnh thì nhấn P sẽ chọn lại các object mình đã chọn trước đó nhưng nó lại ko có tác dung với lệnh stretch, mình có cái líp nào để khắc phục điều này ko anh, mong chờ hồi âm

 

Theo mình biết, lênh Stretch chỉ pho phép chọn đối tượng bằng phương pháp windows, do đó không thể dùng phương pháp chọn previous được. Nếu đã dùng đến lisp thì nên can thiệp trực tiếp vào entity để kéo dãn, thay đổi kích thước đối tượ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
Các cao thủ giúp em một tay với!!! Có cách nào lấy được đường dẫn thư mục chứa các file hệ thống của windows (system or system32) bằng lisp không? (Ý của em là tìm bằng lisp function, hoặc biến môi trường, không có sự can thiệp của người dùng)

Em đã thử tìm các biến của CAD mà không thấy biến nào lưu trữ cái này.

Bạn dùng mã lisp sau để lấy đường dẫn tới thư mục gốc windows:

(getenv "systemroot")

 

Thông thường sẽ là: c:\windows

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 gửi anh Hoành, và cả nhà!

Khi scan to lên hay nhỏ đi thì đim nó bị nhảy !

 

em muốn có 1 cái lisp như sau:

-hình vẽ đó đang vẽ ở tỷ lệ 1/200(model)

-Scan sang tỷ lệ khác (1/300chẳng hạn) thì hình vẽ sẽ tự tạo ra 1 dim 1/300 và nhận kích thứoc này

Như vậy Là kích thứoc không thay đổi, Và tự tìm kiếm text trong hình vẽ để sao cho Chièu cao chữ trong hình vẽ cũng không thay đổi khi scan

Mong các bác giúp em!

Chúc bác Hoanh manh khỏe, diễn đàn ngày càng phát triển!

xIN ANH HOÀNH GIÚP ĐỆ 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
xIN ANH HOÀNH GIÚP ĐỆ TỬ!

Yêu cầu của bạn đã được đáp ứng. Bạn không đọc bài trang 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

bác nào giúp em với em với, em tìm được lisp thay đổi chiều rộng của pline trên diễn đàn, nhưng lisp này chỉ cho thay đổi với giá trị độ rộng là số nguyên , em muốn bác sửa lại để có thể nhập giá trị độ rộng là số thập phân. cám ơn 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
bác nào giúp em với em với, em tìm được lisp thay đổi chiều rộng của pline trên diễn đàn, nhưng lisp này chỉ cho thay đổi với giá trị độ rộng là số nguyên , em muốn bác sửa lại để có thể nhập giá trị độ rộng là số thập phân. cám ơn bác nhiều!

bạn đã thử độ rộng là số thập phân chưa?

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 đã thử độ rộng là số thập phân chưa?

em thử rồi nên nhưng không được, chương trình báo

Command: WD

Select objects: Specify opposite corner: 1 found

Select objects:

§é réng polyline <1.0>: 0.1

Requires a positive integer.

đây là phần lisp:

 

(defun plwid (/ a b sophantu sodem list1 ha:wid)

(defun *error* (msg)

(command "_.undo" "_E")

(setvar "cmdecho" 1)

(princ "\nError: ")

(princ msg)

(princ " ")

(setq *error* olderr)

(princ)

)

(setq olderr *error*)

(setq b (ssget '((-4 . "<OR") (0 . "LINE") (0 . "LWPOLYLINE") (0 . "ARC") (-4 . "OR>"))))

(setq sophantu (sslength B ))

(if (null ha:wid) (setq ha:wid (getvar "tracewid")))

(princ "\n§é réng polyline <")

(princ ha:wid)

(princ ">: ")

(initget 4)

(setq ha:wid (getint))

(if (null ha:wid) (setq ha:wid (getvar "tracewid")))

(setvar "tracewid" ha:wid)

(setvar "cmdecho" 0)

(setq sodem 0)

(repeat sophantu

(setq a (ssname b sodem))

(setq list1 (assoc 0 (entget a)))

(cond

((= (cdr list1) "LWPOLYLINE") (command "_Pedit" a "w" ha:wid ""))

(PROGN (command "_Pedit" a "" "w" ha:wid ""))

)

(setq sodem (1+ sodem))

)

(SETVAR "cmdecho" 1)

(setq olderr *error*)

(princ))

 

(defun c:dw () (plwid) (princ))

(defun c:wd () (plwid) (princ))

(defun c:wp () (plwid) (princ))

 

bác xem giúp em vớ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
em thử rồi nên nhưng không được, chương trình báo

Command: WD

Select objects: Specify opposite corner: 1 found

Select objects:

§é réng polyline : 0.1

Requires a positive integer.

đây là phần lisp:

....

Bạn thay mã lệnh (getint) bằng (getdist) 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
Bạn thay mã lệnh (getint) bằng (getdist) là được.

CÁM ƠN BÁC NHIỀU, CHÚC BÁC LUÔN MẠNH KHOẺ.

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ờ bác Hoành viết hộ em lisp này. Chân thành cảm ơn bác nhiều!

Cộng - trừ - nhân - chia hai hàng số cho trước và ghi kết quả ra hàng thứ 3.

Ví dụ: Có hai dãy số

2 5 6 8 18 10

1 2 7 8 2 1

Kết qủa:

- Phép cộng (cong): 3 7 13 16 20 11

- Phép trừ (tru): 1 3 -1 0 16 9

- Phép nhân (nhan): 2 10 42 64 36 10

- Phép chia (chia) : 2 2.5 0.86 1 9 10

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ờ bác Hoành viết hộ em lisp này. Chân thành cảm ơn bác nhiều!

Cộng - trừ - nhân - chia hai hàng số cho trước và ghi kết quả ra hàng thứ 3.

Ví dụ: Có hai dãy số

2 5 6 8 18 10

1 2 7 8 2 1

Kết qủa:

- Phép cộng (cong): 3 7 13 16 20 11

- Phép trừ (tru): 1 3 -1 0 16 9

- Phép nhân (nhan): 2 10 42 64 36 10

- Phép chia (chia) : 2 2.5 0.86 1 9 10

Dữ liệu nhập vào thế nào bạn? Nhập vào từ 2 đối tượng text, hay từ 12 đối tượng text, hay từ file txt,....

Kết quả được xuất ra thế nào 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
Dữ liệu nhập vào thế nào bạn? Nhập vào từ 2 đối tượng text, hay từ 12 đối tượng text, hay từ file txt,....

Kết quả được xuất ra thế nào bạn?

Dữ liệu nhập vào là hai hàng text nằm song song và không hạn chế về số lượng (có thể 2, 4, 6, 8text hay nhiều hơn), Kết quả được xuất ra là một dòng text nằm song song phía dưới hai dòng text kia. Như ví dụ đối với 6 cặp text em gửi cho bác Hoành đó. Cảm ơn bác đã quan tâ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
Dữ liệu nhập vào là hai hàng text nằm song song và không hạn chế về số lượng (có thể 2, 4, 6, 8text hay nhiều hơn), Kết quả được xuất ra là một dòng text nằm song song phía dưới hai dòng text kia. Như ví dụ đối với 6 cặp text em gửi cho bác Hoành đó. Cảm ơn bác đã quan tâm.

Một hàng là một hay nhiều đối tượng text?

Một dòng là một hay nhiều đối tượng text?

 

Bạn đừng có dùng chữ hàng hay dòng bởi vì nó không sáng hơn bài viết trước của bạn chút nào. Bạn hãy trả lời câu hỏi bài viết trước của tôi: cho tôi biết trong ví dụ đầu tiên của bạn có bao nhiêu đối tượng text? 2 hay 12?

 

Nếu có thể tránh hiểu nhầm, bạn hãy upload 1 file dwg lên diễn đàn. Tôi không ngại viết lisp nhưng tôi ngại viết sai ý bạn, vì khi tôi đã viết tôi sẽ không sửa lisp nữa.

  • 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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×