Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#761 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 04 June 2008 - 12:42 PM

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.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#762 romeo1982

romeo1982

    biết lệnh mirror

  • Members
  • PipPipPip
  • 152 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 04 June 2008 - 01:00 PM

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
  • 0

#763 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 04 June 2008 - 01:26 PM

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.
  • 1

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#764 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 04 June 2008 - 01:42 PM

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
  • 0

#765 123ahha

123ahha

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 04 June 2008 - 05:09 PM

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Ử!
  • 0

#766 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 04 June 2008 - 06:02 PM

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 à?
  • 0

#767 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 05 June 2008 - 09:38 PM

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!
  • 0

#768 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 June 2008 - 09:58 PM

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?
  • 0

#769 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 05 June 2008 - 10:10 PM

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.
  • 0

#770 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 05 June 2008 - 10:28 PM

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:
....

Bạn thay mã lệnh (getint) bằng (getdist) là được.
  • 0

#771 traitimsat034

traitimsat034

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 05 June 2008 - 11:15 PM

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Ẻ.
  • 0

#772 minhdung007

minhdung007

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 June 2008 - 09:05 AM

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
  • 0

#773 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 08 June 2008 - 10:32 AM

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?
  • 0

#774 minhdung007

minhdung007

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 June 2008 - 11:19 PM

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.
  • 0

#775 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 09 June 2008 - 12:03 AM

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.
  • 1

#776 minhdung007

minhdung007

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2008 - 09:57 PM

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.

Xin lỗi bác Hoành! Trình độ của em kém quá nên diễn đạt khó hiểu làm Bác mất công. Bác thông cảm và giúp em nhé!
Ví dụ ban đầu của em có 12 đối tượng text.
  • 0

#777 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 10 June 2008 - 09:40 PM

Xin lỗi bác Hoành! Trình độ của em kém quá nên diễn đạt khó hiểu làm Bác mất công. Bác thông cảm và giúp em nhé!
Ví dụ ban đầu của em có 12 đối tượng text.

Lệnh CONG, TRU, NHAN, CHIA dưới đây sẽ làm điều bạn cần:

(defun c:cong () (xulytext +))
(defun c:tru () (xulytext -))
(defun c:nhan () (xulytext *))
(defun c:chia () (xulytext /))

(defun xulytext (ham / lst1 lst2 sst1 sst2 ykq)
(princ "\nNhap vao hang text dau tien: ")
(setq sst1 (ssget '((0 . "TEXT"))))
(princ "\nNhap vao hang text thu hai: ")
(setq sst2 (ssget '((0 . "TEXT"))))

(if (/= (sslength sst1) (sslength sst2))
(alert
"\nHai tap chon co so doi tuong khong bang nhau!\nHay chon lai!"
)
(progn
(setq
lst1 (mapcar 'entget (ss2ent sst1))
lst2 (mapcar 'entget (ss2ent sst2))
Ykq (- (* 2 (caddr (assoc 10 (car lst2)))) (caddr (assoc 10 (car lst1))))
lsterr ""
)
(mapcar
'entmake
(mapcar '(lambda (t1 t2 / tt pp gt)
(setq gt (vl-catch-all-apply
'ham
(list (atof (cdr (assoc 1 t1)))
(atof (cdr (assoc 1 t2)))
)
)
)
(if (vl-catch-all-error-p gt)
(setq lsterr (strcat lsterr "- " (vl-catch-all-error-message gt) "\n")
gt "#"
)
(setq gt (vl-string-right-trim "." (vl-string-right-trim "0" (rtos gt))))
)
(setq
p (cdr (assoc 10 t1))
pp (list 10 (car p) Ykq (caddr p))
tt (subst (cons 1 gt) (assoc 1 t1) t1)
tt (subst pp (assoc 10 t1) tt)
)
)
lst1
lst2
)
)
(if (/= lsterr "")
(alert
(strcat "Trong qua trinh tinh toan, co cac loi sau:\n"
lsterr
)
)
)
)
)
)
(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

  • 1

#778 xuantanmn2

xuantanmn2

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 June 2008 - 10:28 AM

Jin thì nghĩ Khung Tên nên được làm thành một Block Attrributes, như vậy thì mình có thể copy thoải mái mà không sợ sót, và chỉ cần chỉnh sửa một vài khoản mục cần thiết (tên công trình, tên bản vẽ...)

Mình mới tập toạnh vẽ cad.Jinnói rõ hơn muc block Ảttibtets làm sao cho cái khng tên không bị thay đổi khi áp dụng vào nhiều bản vẽ khác nhau trên A1,A2,A4.Hướng dẫn cách làm cụ thể một khung mẫu để sau khi vẽnhiều công trình chỉ cần thay tên công trình thôi . Cho file đính kèm một khung mẫu do bạn tao và cách thức thực hành khi áp dụng vớinhiều bãn vẽ A1..A4 nha.
  • 0
Học và tích luỹ kinh nghiệm

#779 ditimbantot

ditimbantot

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 June 2008 - 08:51 PM

- Thế này nhá bác Hoanh
- Tớ có 1 hình thể có nhiều tọa độ pline là 586888.xxxx,1186244.xxxx ,chú ý nhiều tọa độ pline nhập lại thành 1 hình thể có 1 diện tích là 500m2 chẳng hạn, lisp mình đưa ở trên sẽ lấy từ hình thể mình vẽ xuất ra các tọa độ là 586888.xx,1186244.xx chỉ còn giá trị chẵn thôi không còn giá trị xxxx nữa mà là xx chính vì thế diện tích sẽ có thể mất đi chẳng hạn 475m2
- Tới lúc này mình phải kéo hình thể lại ,sao cho bằng diện tích mà vẫn đúng giá trị chẵn xx ,
- Ý mình là bạn có thể sửa lại lisp này sao cho xuất ra giá trị tọa độ Pline chẵn mà phần diện tích không bị lệnh dù lệch cũng ít nhất là 499.9 không lệnh càng ít càng tốt
- chỉ chạy trên layer 10 nha Bác Hoanh lệnh command là nth thanks bác nhiều có gì không hiểu nữa mình sẽ đưa bản cad thí dụ lên . Mấy hôm nay tai đi làm lâu lâu mới online được bác thông cảm nha
  • 0

#780 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 11 June 2008 - 09:14 PM

- Thế này nhá bác Hoanh
- Tớ có 1 hình thể có nhiều tọa độ pline là 586888.xxxx,1186244.xxxx ,chú ý nhiều tọa độ pline nhập lại thành 1 hình thể có 1 diện tích là 500m2 chẳng hạn, lisp mình đưa ở trên sẽ lấy từ hình thể mình vẽ xuất ra các tọa độ là 586888.xx,1186244.xx chỉ còn giá trị chẵn thôi không còn giá trị xxxx nữa mà là xx chính vì thế diện tích sẽ có thể mất đi chẳng hạn 475m2
- Tới lúc này mình phải kéo hình thể lại ,sao cho bằng diện tích mà vẫn đúng giá trị chẵn xx ,
- Ý mình là bạn có thể sửa lại lisp này sao cho xuất ra giá trị tọa độ Pline chẵn mà phần diện tích không bị lệnh dù lệch cũng ít nhất là 499.9 không lệnh càng ít càng tốt
- chỉ chạy trên layer 10 nha Bác Hoanh lệnh command là nth thanks bác nhiều có gì không hiểu nữa mình sẽ đưa bản cad thí dụ lên . Mấy hôm nay tai đi làm lâu lâu mới online được bác thông cảm nha


Bây giờ thì tôi đã hiểu bạn muốn gì nhưng cái này quá khó với lisp. Đến tận bây giờ, tôi vẫn không biết cách kéo hình như thế nào để các đỉnh pline chẵn mà diện tích lại như mong muốn. Nếu bạn mô tả được cách làm bằng tay, tôi sẽ viết được bằng lisp.

Bác Ssg xem có giúp được gì hơn chăng?
  • 0