Đế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

#81 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 02 August 2007 - 11:23 AM

Mình đã phải ngồi căn lại khoảng cách giữa các dòng dim cho nó bằng nhau và cảm thấy hơi vất.

Mình muốn các bạn giúp cho 1 lisp có thể tự động căn chỉnh khoảng cách các dòng dim bằng nhau.
ví dụ:- có 3 hàng dim (dim mặt bằng, có khoảng cách không bằng nhau ). Khi dùng lisp sẽ tự động căn chỉnh khoảng khoảng cách giũa các hàng dim bằng 1 giá trị nhập vào từ bàn phím.

Bạn hãy mô tả cách mà bạn muốn lisp làm. Tôi đã rõ về mục đích, nhưng chưa rõ lisp sẽ phải làm gì.

Chọn các đối tượng dim như thế nào? Bạn lưu ý: có một công việc rất dễ với con người là nhìn ra các dim thẳng hàng thành 1 nhóm, nhưng lại rất khó với máy tính.
rồi căn hai hàng này bằng một khoảng cách? Khoảng cách này bằng bao nhiều? vì sẽ gặp phải trường hợp các giá trị dim có độ lớn khác nhau (do vẽ không chuẩn).
....
  • 0

#82 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 02 August 2007 - 02:14 PM

Hình đã gửi

Giả sử mình dim một hình như H1, lúc này khoảng cách giữa 3 hàng dim là không bằng nhau (mình dim khoảng cách vào chỉ để nhìn cho rõ thôi, còn thực tế thì kích thước đó sẽ thay đôi :s_dead:) khi dùng lisp, nhập vào giá trị bằng 5 (chẳng hạn) thì 3 hàng dim đó sẽ được cách nhau bằng 5 (mặc định cái hàng nào làm chuẩn để các hàng dim khác cách đều nhau là tùy người viết lisp :D). H2 là kết quả khi thực hiện lisp.

Không biết mình mô tả như thế đã rõ chưa nhỉ? :ph34r:

Cảm ơn bạn đã quan tâm!
  • 0

#83 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 02 August 2007 - 02:27 PM

Không biết mình mô tả như thế đã rõ chưa nhỉ? :s_dead:

Cảm ơn bạn đã quan tâm!

Vẫn như trước khi bạn post bài này!

Tôi đã rõ về mục đích, nhưng chưa rõ lisp sẽ phải làm gì.

Chọn các đối tượng dim như thế nào? Bạn lưu ý: có một công việc rất dễ với con người là nhìn ra các dim thẳng hàng thành 1 nhóm, nhưng lại rất khó với máy tính.
  • 0

#84 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 02 August 2007 - 07:11 PM

Mình thử nghĩ 1 cách này xem có được không nhé!

*chạy lệnh lisp:

----> lisp bắt chọn hàng dim thứ 1 (mình chọn hàng dim 3,5,3,5,3,5...)
----> lisp bắt chọn hàng dim thứ 2 (mình chọn hàng dim 10)
----> lisp bắt chọn hàng dim thứ 3 (mình chọn hàng dim 30)
----> lisp bắt nhập khoảng cách các dim (mình nhập vào 5) ----> kết thúc lệnh

Lisp sẽ thực hiện công việc move hàng dim3,5,3,5,3,5... cách hàng dim10 1 khoảng la` 5
và .... move hàng dim30 cách hàng dim10 1 khoảng la` 5

Nhìn thì hơi dài dòng nhưng thực hiện lệnh chắc cũng không lau lắm :s_dead:
  • 0

#85 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 02 August 2007 - 08:28 PM

Mình thử nghĩ 1 cách này xem có được không nhé!

*chạy lệnh lisp:

----> lisp bắt chọn hàng dim thứ 1 (mình chọn hàng dim 3,5,3,5,3,5...)
----> lisp bắt chọn hàng dim thứ 2 (mình chọn hàng dim 10)
----> lisp bắt chọn hàng dim thứ 3 (mình chọn hàng dim 30)
----> lisp bắt nhập khoảng cách các dim (mình nhập vào 5) ----> kết thúc lệnh

Lisp sẽ thực hiện công việc move hàng dim3,5,3,5,3,5... cách hàng dim10 1 khoảng la` 5
và .... move hàng dim30 cách hàng dim10 1 khoảng la` 5

Nhìn thì hơi dài dòng nhưng thực hiện lệnh chắc cũng không lau lắm :s_dead:

OK
  • 0

#86 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 03 August 2007 - 07:39 PM

các bác ơi em đang cần 1 lisp có nội dung như sau:
trên màn hình có các điểm point ví dụ 4 điểm do em vừa vẽ ra
khi chạy lisp sẽ yêu cầu chọn các điểm point trên màn hình
em chọn 4 điểm trên, sau khi chạy lisp đó nó sẽ
vẽ 1 đường pline từ điểm 1 đến 2 đến 3 đến 4
với cơ sở phân biệt các điểm là :
điểm 1 : điểm point đầu tiên em pick trên màn hình
điểm 2 : điểm point thứ 2 em pick trên màn hình
điểm 3 : điểm point thứ 3 em pick trên màn hình
điểm 4 : điểm point thứ 4 em pick trên màn hình
cám ơn các pác trước!
  • 0

#87 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 03 August 2007 - 09:22 PM

các bác ơi em đang cần 1 lisp có nội dung như sau:
trên màn hình có các điểm point ví dụ 4 điểm do em vừa vẽ ra
khi chạy lisp sẽ yêu cầu chọn các điểm point trên màn hình
em chọn 4 điểm trên, sau khi chạy lisp đó nó sẽ
vẽ 1 đường pline từ điểm 1 đến 2 đến 3 đến 4
với cơ sở phân biệt các điểm là :
điểm 1 : điểm point đầu tiên em pick trên màn hình
điểm 2 : điểm point thứ 2 em pick trên màn hình
điểm 3 : điểm point thứ 3 em pick trên màn hình
điểm 4 : điểm point thứ 4 em pick trên màn hình
cám ơn các pác trước!



tên lệnh là NP.

(defun c:np ( / sel index ent tt tendt p tappoint )
(princ "\nNoi Point © CADViet.com 2007")
(setq sel (entsel "\nChon diem point dau tien: ")
index 0
)
(while sel
(setq
ent (car sel)
tt (entget ent)
tendt (cdr (assoc 0 tt))
)

(if (= tendt "POINT")
(setq
index (1+ index)
p (cdr (assoc 10 tt))
tappoint (append tappoint (list p))
)
(princ "\nHay pick vao mot doi tuong point")
)
(setq
sel (entsel (strcat "\nChon diem point thu " (itoa index) ": "))
)
)
(luuos)
(setvar "osmode" 0)
(command ".pline")
(foreach p tappoint
(command p)
)
(command "")
(traos)
)

(defun luuos ()
(setq
HOANH_OSMODE (getvar "OSMODE")
HOANH_AUTOSNAP (getvar "AUTOSNAP")
)
)
(defun traos ()
(if HOANH_OSMODE
(setvar "OSMODE" HOANH_OSMODE)
)
(if HOANH_AUTOSNAP
(setvar "AUTOSNAP" HOANH_AUTOSNAP)
)
)
(princ "\nNP - free lisp from www.cadviet.com")
(princ)

  • 0

#88 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 03 August 2007 - 11:07 PM

cám ơn bác Hoanh , nhưng bác ơi
ý em hơi khác 1 chút
chọn điểm ở đây không phải là chọn từng điểm
mà chọn tất cả các điểm cùng một lúc
(kiểu chọn cửa sổ cross đó)
bác có thể sửa cho em một chút nữa được không?
cám ơn bác nhiều!
  • 0

#89 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 August 2007 - 12:09 AM

cám ơn bác Hoanh , nhưng bác ơi
ý em hơi khác 1 chút
chọn điểm ở đây không phải là chọn từng điểm
mà chọn tất cả các điểm cùng một lúc
(kiểu chọn cửa sổ cross đó)
bác có thể sửa cho em một chút nữa được không?
cám ơn bác nhiều!

Chọn tất cả cùng 1 lúc thì lấy đâu ra thứ tự các điểm?
  • 0

#90 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 04 August 2007 - 07:49 PM

Em đang cần 1 lisp có nội dung như sau:
trên màn hình có text là ABCD
khi chạy lisp sẽ chọn text và điểm chèn kết quả
trên màn hình sẽ có các dòng kết quả sau:
có 4 kí tự lần lượt là: A, B, C, D trong text trên
với kí tự A ở vị trí 1
với kí tự B ở vị trí 2
với kí tự C ở vị trí 3
với kí tự D ở vị trí 4
  • 0

#91 conghoa

conghoa

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 411 Bài viết
Điểm đánh giá: 88 (tàm tạm)

Đã gửi 04 August 2007 - 11:30 PM

@xaydung cái lisp dạng này hình như trong rum cũng có roài mà!
  • 0

#92 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 05 August 2007 - 10:45 AM

Tìm lisp lấy ra được giá trị width(độ rộng) của polyline
như sau: chọn 1 pline có trên màn hình, sau đó nhập điểm chèn kết quả
cho ra giá trị là số của độ rộng đường polyline.
Anh em nào có cho mình nha, xin cám ơn!
  • 0

#93 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 August 2007 - 09:58 PM

Em đang cần 1 lisp có nội dung như sau:
trên màn hình có text là ABCD
khi chạy lisp sẽ chọn text và điểm chèn kết quả
trên màn hình sẽ có các dòng kết quả sau:
có 4 kí tự lần lượt là: A, B, C, D trong text trên
với kí tự A ở vị trí 1
với kí tự B ở vị trí 2
với kí tự C ở vị trí 3
với kí tự D ở vị trí 4

Bạn có thể upload lên 1 file mẫu không?

------------------------------------------------------------------------------------------

Tìm lisp lấy ra được giá trị width(độ rộng) của polyline
như sau: chọn 1 pline có trên màn hình, sau đó nhập điểm chèn kết quả
cho ra giá trị là số của độ rộng đường polyline.
Anh em nào có cho mình nha, xin cám ơn!

Lệnh là PW (print width)
(defun c:pw ( / tmp)
(princ "\nPW (c) CADViet.com")
(entmake
(list
(cons 0 "TEXT")
(cons 1 (rtos (cdr (assoc 40 (entget (car (entsel "\nPick vao Pline: ")))))2 2))
(cons 10 (setq tmp (getpoint "\nVao diem chen cua chu: ")))
(cons 40 (getdist tmp "\nVao chieu cao cua chu: "))
)
)
(princ)
)
(princ "\nPW - free lisp from www.CADViet.com")
(princ)

  • 0

#94 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 06 August 2007 - 08:24 AM

Cám ơn bác hoành, em đang cần 1 lisp khác có nội dung
giống như lisp caltext có trong diễn đàn nhưng ở đây nó
chọn nhiều text 1 lúc chứ không chọn đơn lẻ 1 text.
bác giúp em nha!
  • 0

#95 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 06 August 2007 - 08:57 AM

Cám ơn bác hoành, em đang cần 1 lisp khác có nội dung
giống như lisp caltext có trong diễn đàn nhưng ở đây nó
chọn nhiều text 1 lúc chứ không chọn đơn lẻ 1 text.
bác giúp em nha!

Trên diễn đàn có đến mấy lệnh caltext, cái bạn nói là cái nào, bạn có thể paste ra đây được không?
  • 0

#96 xaydung

xaydung

    biết lệnh trim

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

Đã gửi 06 August 2007 - 10:40 AM

(defun c:caltext (/ ent tt old gt vt gtmoi)
(if (not c:cal)
(load "geomcal.arx") )
(setq ent (car (entsel "\nHay pick vao doi tuong text: "))
tt (entget ent)
old (assoc 1 tt)
gt (cdr old)
vt (vl-string-position (ascii "=") gt)
gtmoi (substr gt 1 vt)
kq (rtos (c:cal gtmoi))
kq (vl-string-right-trim "0" kq)
kq (vl-string-right-trim "." kq)
gtmoi (strcat gtmoi "=" kq)
tt (subst (cons 1 gtmoi) old tt) )
(entmod tt) (entupd ent)
(princ)
)

Là cái này bác à!
  • 0

#97 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 06 August 2007 - 10:54 AM

Là cái này bác à!


Tên lênh là MCALTEXT.

(defun c:mcaltext (/ ent tt old gt vt gtmoi)
(if (not c:cal)
(load "geomcal.arx")
)
(defun calone (ent)
(setq
tt (entget ent)
old (assoc 1 tt)
gt (cdr old)
vt (vl-string-position (ascii "=") gt)
gtmoi (substr gt 1 vt)
kq (rtos (c:cal gtmoi))
kq (vl-string-right-trim "0" kq)
kq (vl-string-right-trim "." kq)
gtmoi (strcat gtmoi "=" kq)
tt (subst (cons 1 gtmoi) old tt)
)
(entmod tt)
(entupd ent)
)
(setq ss (ssget '((0 . "TEXT"))))
(sudung calone 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
)


  • 0

#98 tienlagiay_dxt

tienlagiay_dxt

    biết lệnh trim

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

Đã gửi 06 August 2007 - 03:06 PM

Bạn có thể post yêu cầu về autolisp ở topic này.

Mình muốn nhờ Hoành viết 1 líp tạo các layer ,các layer này sẽ được khai báo đầy đủ các thuộc tính như đường nét, màu sắc, độ rộng.
Thank trước nhé
  • 0

#99 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 06 August 2007 - 03:13 PM

Mình muốn nhờ Hoành viết 1 líp tạo các layer ,các layer này sẽ được khai báo đầy đủ các thuộc tính như đường nét, màu sắc, độ rộng.
Thank trước nhé

Bạn nêu ví dụ đi!
  • 0

#100 kts.ngocquan

kts.ngocquan

    biết vẽ ellipse

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

Đã gửi 06 August 2007 - 06:43 PM

Này tienlagiay_dxt cái mà ông cần đấy

a4 la tên lệnh
Các tên layer tự thay nhé
(Defun c:a4 (/)
(command "cmdecho" 0)
(command "units" "2" "0" "1" "0" "" "")
(Command "-linetype" "l" "center" "acad.lin" "" "")
(Command "-linetype" "l" "hidden" "acad.lin" "" "")
(Command "-layer" "n" "35 - Cat 1 (Tuong..)" "c" "53" "35 - Cat 1 (Tuong..)" "lw" "0.35" "35 - Cat 1 (Tuong..)" "")
(Command "-layer" "n" "25 - Cat 2 (Khuon..)" "c" "164" "25 - Cat 2 (Khuon..)" "lw" "0.25" "25 - Cat 2 (Khuon..)" "")
(Command "-layer" "n" "15 - Thay 1" "c" "93" "15 - Thay 1" "lw" "0.15" "15 - Thay 1" "")
(Command "-layer" "n" "09- Thay 3" "c" "254" "09- Thay 3" "lw" "0.10" "09- Thay 3" "")
(Command "-layer" "n" "05- Thay 2" "c" "25" "05- Thay 2" "lw" "0.05" "05- Thay 2" "")
(Command "-layer" "n" "09 - Tim " "c" "117" "09 - Tim " "l" "center" "09 - Tim " "lw" "0.09" "09 - Tim " "")
(Command "-layer" "n" "05 - Mo 1" "c" "67" "05 - Mo 1" "lw" "0.05" "05 - Mo 1" "")
(Command "-layer" "n" "05 - Mo 2" "c" "8" "05 - Mo 2" "lw" "0.05" "05 - Mo 2" "")
(Command "-layer" "n" "05 - Mo 3" "c" "103" "05 - Mo 3" "lw" "0.05" "05 - Mo 3" "")
(Command "-layer" "n" "05 - Noi that" "c" "16" "05 - Noi that" "lw" "0.05" "05 - Noi that" "")
(Command "-layer" "n" "09 - Kich thuoc" "c" "45" "09 - Kich thuoc" "lw" "0.09" "09 - Kich thuoc" "")
(Command "-layer" "n" "05 - Khuat 1" "c" "22" "05 - Khuat 1" "l" "Dashed2" "05 - Khuat 1" "lw" "0.05" "05 - Khuat 1" "")
(Command "-layer" "n" "09 - Khuat 2" "c" "30" "09 - Khuat 2" "l" "Dashed" "09 - Khuat 2" "lw" "0.09" "09 - Khuat 2" "")
)
  • 1