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

#501 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

  • Members
  • PipPipPipPip
  • 224 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 07 March 2008 - 11:37 PM

Làm thế nào để đưa các icon vào trong các menu của mình như các menu khác của cad nhỉ.Ví dụ như bên cạnh Help trong menu Help là icon hình
  • 0

#502 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

  • Members
  • PipPipPipPip
  • 224 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 08 March 2008 - 01:05 AM

Có ai có thể cho e biết đc Lisp có thể gọi đc 1 chương trình File exe đã cài trong máy ko?
Ví dụ như chương trinh tính thống kê thép CTK của Jin ấy?
  • 0

#503 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 08 March 2008 - 07:17 AM

Làm thế nào để đưa các icon vào trong các menu của mình như các menu khác của cad nhỉ.Ví dụ như bên cạnh Help trong menu Help là icon hình

Không được! Nếu bạn muốn thì dùng Toolbars hoặc Image Tile Menu
  • 0

#504 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 08 March 2008 - 07:18 AM

Có ai có thể cho e biết đc Lisp có thể gọi đc 1 chương trình File exe đã cài trong máy ko?
Ví dụ như chương trinh tính thống kê thép CTK của Jin ấy?

(command "start" "...\\Myapp.exe")
  • 1

#505 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 08 March 2008 - 09:44 AM

Làm thế nào để đưa các icon vào trong các menu của mình như các menu khác của cad nhỉ.Ví dụ như bên cạnh Help trong menu Help là icon hình


Theo tôi biết thì cad2008 làm được việc này. Nhưng phài viết đi viết lại cho các đời cad mệt lắm với lại cái này mang tính biểu diển không cần thiết lắm.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#506 pooh_21

pooh_21

    biết zoom

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

Đã gửi 08 March 2008 - 10:26 AM

Mình đang cần một lisp thống kê thiết bị (như hình dưới)
Hình đã gửi

Kí hiệu thiết bị được tạo bởi một block "hiệu ứng" (không biết giải thích như thế nào, text trong block có thể edit được... attribute gì đó <_<), khi dùng lisp thì nó sẽ cho mình một bảng thống kê các thiết bị (như trong hình kèm theo)
Đây là file cad ví dụ:
http://www.cadviet.c...pfiles/test.dwg

Rất mong được sự giúp đỡ của các Mod.
  • 0

#507 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 March 2008 - 12:26 PM

...
Kí hiệu thiết bị được tạo bởi một block "hiệu ứng" (không biết giải thích như thế nào, text trong block có thể edit được... attribute gì đó <_<), khi dùng lisp thì nó sẽ cho mình một bảng thống kê các thiết bị (như trong hình kèm theo)
Đây là file cad ví dụ:
http://www.cadviet.c...pfiles/test.dwg

Rất mong được sự giúp đỡ của các Mod.

Cảm ơn bạn vì đã đưa ra yêu cầu rất mạch lạc.

Lệnh TKB (thống kê block) dưới đây sẽ làm điều bạn muốn:
(defun c:tkb (/ kq)
(setq
ssb (ssget '((0 . "INSERT") (2 . "kh1")))
dc (getpoint "\nVao diem chen ket qua: ")
x (car dc)
y (cadr dc)
lstb (ss2ent ssb)
lstb (mapcar '(lambda (e)
(setq e1 (entnext e)
e2 (entnext e1)
)
(list (cdr (assoc 1 (entget e1)))
(cdr (assoc 1 (entget e2)))
)
)
lstb
)
lstb (vl-sort lstb '(lambda (e1 e2)
(if (= (cadr e1)(cadr e2))
(< (car e1)(car e2))
(< (cadr e1)(cadr e2)))
)
)
)
(foreach e lstb
(if (assoc e kq)
(setq
e1 (assoc e kq)
e1 (cons (car e1) (1+ (cdr e1)))
kq (subst e1 (assoc e kq) kq)
)
(setq kq (append kq (list (cons e 1))))
)
)
(foreach e kq
(setq gt (car e)
sl (itoa (cdr e))
)
(command ".insert"
"kh1"
(list x y)
""
""
""
(car gt)
(cadr gt)
)
(entmake (list (cons 0 "TEXT")
(cons 8 "NetText")
(cons 10 (list (+ x 1870) (+ y 181)))
(cons 40 250.0)
(cons 1 sl)
(cons 7 "STYLE7")
)
)
(setq y (- y 880.0))
)
(princ)
)

(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

#508 pooh_21

pooh_21

    biết zoom

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

Đã gửi 08 March 2008 - 03:00 PM

Cảm ơn bác Hoành rất nhiều!
- Cho mình hỏi thêm một chút nữa là:
Với trường hợp mà có nhiều tên Block khác nhau
ssb (ssget '((0 . "INSERT") (2 . "kh1"))), không đơn thuần là một tên thì có thể cập nhật cho lisp thống kê tự nhận biết các block dạng (attribute) để thống kê ko vậy? Nếu làm được thế thì tốt quá

Một lần nữa cảm ơn bác Hoành và Cadviet!
  • 0

#509 cafesigun

cafesigun

    biết zoom

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

Đã gửi 08 March 2008 - 04:58 PM

Cảm ơn bạn vì đã đưa ra yêu cầu rất mạch lạc.

Lệnh TKB (thống kê block) dưới đây sẽ làm điều bạn muốn:

(defun c:tkb (/ kq)
(setq
ssb (ssget '((0 . "INSERT") (2 . "kh1")))
dc (getpoint "\nVao diem chen ket qua: ")
x (car dc)
y (cadr dc)
lstb (ss2ent ssb)
lstb (mapcar '(lambda (e)
(setq e1 (entnext e)
e2 (entnext e1)
)
(list (cdr (assoc 1 (entget e1)))
(cdr (assoc 1 (entget e2)))
)
)
lstb
)
lstb (vl-sort lstb '(lambda (e1 e2)
(if (= (cadr e1)(cadr e2))
(< (car e1)(car e2))
(< (cadr e1)(cadr e2)))
)
)
)
(foreach e lstb
(if (assoc e kq)
(setq
e1 (assoc e kq)
e1 (cons (car e1) (1+ (cdr e1)))
kq (subst e1 (assoc e kq) kq)
)
(setq kq (append kq (list (cons e 1))))
)
)
(foreach e kq
(setq gt (car e)
sl (itoa (cdr e))
)
(command ".insert"
"kh1"
(list x y)
""
""
""
(car gt)
(cadr gt)
)
(entmake (list (cons 0 "TEXT")
(cons 8 "NetText")
(cons 10 (list (+ x 1870) (+ y 181)))
(cons 40 250.0)
(cons 1 sl)
(cons 7 "STYLE7")
)
)
(setq y (- y 880.0))
)
(princ)
)

(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)
)




BÁC CÓ THỂ LÀM MỘT CÁI LISP ĐỂ VẼ CẦU THANG THẲNG VÀ CẦU THANG XOẮN THEO 1 THIẾT KỂ NÀO ĐÓ ĐƯỢC KO BÁC
THANK BÁC NHIỀU
  • 0

#510 ATnguyen

ATnguyen

    biết pan

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

Đã gửi 08 March 2008 - 11:46 PM

Bác nào giúp em cái lisp này với.
Chọn text 1 -> chọn text 2 -> chọn Pline -> in ra kết quả là Độ dốc / Chiều dài.
Trong đó Độc dốc = [(text1)-(text2)] / Chiều dài Pline.

Thanks.

Hình đã gửi
  • 0

#511 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 March 2008 - 11:55 PM

Bác nào giúp em cái lisp này với.
Chọn text 1 -> chọn text 2 -> chọn Pline -> in ra kết quả là Độ dốc / Chiều dài.
Trong đó Độc dốc = [(text1)-(text2)] / Chiều dài Pline.

Thanks.

Hình đã gửi

Bạn có thể upload file dwg trong ảnh lên diễn đàn được không?
  • 0

#512 ATnguyen

ATnguyen

    biết pan

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

Đã gửi 09 March 2008 - 12:48 AM

Sorry bác em cứ tưởng up ảnh là ok. Em up file cad đây.

http://www.cadviet.com/upfiles/cd.dwg
  • 0

#513 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 March 2008 - 01:19 AM

Sorry bác em cứ tưởng up ảnh là ok. Em up file cad đây.

http://www.cadviet.com/upfiles/cd.dwg

Con số 110.37 lấy ở đâu hả bạn?

Trong file của bạn chẳng có giá trị nào như vậy cả.
  • 0

#514 ATnguyen

ATnguyen

    biết pan

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

Đã gửi 09 March 2008 - 01:32 AM

Con số 110.37 lấy ở đâu hả bạn?

Trong file của bạn chẳng có giá trị nào như vậy cả.

Là khoảng cách giữa hai ngã 4 á bác. Em quên chưa trym 2 đầu cho nó còn 1 đoạn pline <_<
E nghĩ là giá trị (chiều dài) theo pline thì chuẩn hơn vì nếu chọn 2 điểm để ra chiều dài thì sợ có những đoạn nó có cả đường cong.
  • 0

#515 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 March 2008 - 09:47 AM

Là khoảng cách giữa hai ngã 4 á bác. Em quên chưa trym 2 đầu cho nó còn 1 đoạn pline <_<
E nghĩ là giá trị (chiều dài) theo pline thì chuẩn hơn vì nếu chọn 2 điểm để ra chiều dài thì sợ có những đoạn nó có cả đường cong.

Nếu như nhìn vào bản ảnh chụp màn hình của bạn, ai cũng nghĩ rằng khoảng cách giữa 2 đường tim của ngã tư là 110.37.

Nhưng trong bản vẽ DWG của bạn khoảng cách giữa 2 ngã tư chẳng có khoảng cách nào có giá trị 110.37. Tại các ngã tư, khi zoom lên các đường tim của bạn nát như tương, số điểm tim giao nhau tôi đếm được là 4 điểm, nhưng không có hai điểm bất kỳ nào có khoảng cách như bạn nêu.

Đừng mong chờ người khác sẽ giúp bạn nếu bạn không nghĩ rằng bạn phải giúp bạn trước. Nếu bạn đưa ra một bản vẽ chuẩn mực, chương trình lisp chưa chắc đã có một kết quả đúng. Huống chi bạn đưa ra một bản vẽ quá ẩu như vậy, chắc chắn chương trình lisp sẽ đưa ra kết quả sai.
  • 0

#516 ATnguyen

ATnguyen

    biết pan

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

Đã gửi 09 March 2008 - 11:46 AM

Nếu như nhìn vào bản ảnh chụp màn hình của bạn, ai cũng nghĩ rằng khoảng cách giữa 2 đường tim của ngã tư là 110.37.

Nhưng trong bản vẽ DWG của bạn khoảng cách giữa 2 ngã tư chẳng có khoảng cách nào có giá trị 110.37. Tại các ngã tư, khi zoom lên các đường tim của bạn nát như tương, số điểm tim giao nhau tôi đếm được là 4 điểm, nhưng không có hai điểm bất kỳ nào có khoảng cách như bạn nêu.

Đừng mong chờ người khác sẽ giúp bạn nếu bạn không nghĩ rằng bạn phải giúp bạn trước. Nếu bạn đưa ra một bản vẽ chuẩn mực, chương trình lisp chưa chắc đã có một kết quả đúng. Huống chi bạn đưa ra một bản vẽ quá ẩu như vậy, chắc chắn chương trình lisp sẽ đưa ra kết quả sai.

Hic, bác làm gì mà nặng lời thế. Em ko biết khi bác view file của em có lỗi gì ko mà tim lại nát như tương, nhưng ảnh sau đây em capture lại khi đã trim cái đoạn bên trái đi, pline đó sẽ có độ dài 110,37.

http://www.cadviet.com/upfiles/cd2.jpg

Lúc đầu em cũng định ngồi vẽ 1 cái vuông vắn, đơn giản nhưng em nghĩ làm gì để các bác trên này hiểu ý mình là được, ko nghĩ vì file cad đó mà để bác phải nặng lời thế này <_<

Em gửi lại file cad, bác xem giúp em nhé. Sorry làm phiền bác nhiều quá.
http://www.cadviet.com/upfiles/cd2.dwg
  • 0

#517 Ar_Chanwoo

Ar_Chanwoo

    biết lệnh break

  • Members
  • PipPipPipPip
  • 224 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 09 March 2008 - 06:28 PM

Ai có thể viết hộ e lisp này đc không.
E muốn mỗi khi mở cad ra nó sẽ tự load 1 số lisp của e( khoảng 30file) mà không cần phải gõ lệnh gì hết, giống như Startup của windown ấy. Em đã thử làm 1file acad.lsp rồi để vào trong thư mục C:\ProgramAuto Cad 2007\acad.lsp rồi mà không ăn thua.File acad.lsp e port phía dưới.Mong các anh giúp đỡ!!!!!!!
http://www.cadviet.c...pfiles/acad.lsp
  • 0

#518 bighead

bighead

    biết vẽ arc

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

Đã gửi 09 March 2008 - 07:30 PM

Ai có thể viết hộ e lisp này đc không.
E muốn mỗi khi mở cad ra nó sẽ tự load 1 số lisp của e( khoảng 30file) mà không cần phải gõ lệnh gì hết, giống như Startup của windown ấy. Em đã thử làm 1file acad.lsp rồi để vào trong thư mục C:\ProgramAuto Cad 2007\acad.lsp rồi mà không ăn thua.File acad.lsp e port phía dưới.Mong các anh giúp đỡ!!!!!!!
http://www.cadviet.com/upfiles/acad.lsp


Không biết mình có hiểu đúng ý bạn không nhưng cần gì viết lisp để load lisp khác mỗi khi khởi động cad nhỉ ?
Hình đã gửi

Thả các lisp vào Startup Suite là xong. Hy vọng có thông tin bổ ích.
  • 1
Mục đích của cuộc sống là sống có mục đích.

#519 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 10 March 2008 - 07:59 AM

Ai có thể viết hộ e lisp này đc không.
E muốn mỗi khi mở cad ra nó sẽ tự load 1 số lisp của e( khoảng 30file) mà không cần phải gõ lệnh gì hết, giống như Startup của windown ấy. Em đã thử làm 1file acad.lsp rồi để vào trong thư mục C:\ProgramAuto Cad 2007\acad.lsp rồi mà không ăn thua.File acad.lsp e port phía dưới.Mong các anh giúp đỡ!!!!!!!
http://www.cadviet.c...pfiles/acad.lsp

Trong các file của bạn, Acad chỉ chấp nhận load *.lsp, *.fas và *.vlx thôi. Còn những cái khác thì nó bảo "I don't know!". Bạn sưu tầm lsp từ đủ các nguồn hằm bà lằng và còn lơ mơ về cái khoản load thì tốt nhất là dùng Startup Suite như anh bạn bighead đã nêu bên dưới (mà cái này trên diễn đàn đã nói rất nhiều, bạn không đọc hay sao ấy!)
  • 0

#520 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 10 March 2008 - 08:35 AM

...cần gì viết lisp để load lisp khác mỗi khi khởi động cad nhỉ ?

Autodesk bày ra file acad.lsp là dành cho mục đích này. Nó hữu ích khi bạn muốn share chương trình của bạn cho mọi người, trong đó có những người hoàn toàn không có một chút khái niệm gì về lisp hay appload. Họ có thể xem chương trình của bạn như một application hoàn chỉnh, chỉ cần click vào setup.exe chẳng hạn là có ngay mọi thứ, không cần quan tâm đến bất cứ điều gì khác.
  • 0