Đến nội dung


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

Viết lisp theo yêu cầu [phần 2]


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

#241 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 October 2009 - 10:21 PM

Em có lisp copy thứ tự này thấy dùng khá hay : http://www.cadviet.c..._thu_tu_coo.lsp
Nhưng e có một thắc mắc nhỏ thế này, lisp này là copy theo thứ tự tăng dần với hệ số là +1, khi e vẽ đường đồng mức san nền thì không phải hệ số lúc nào cũng là +1 mà có thể khác đi, vậy các bác giúp em chỉnh lại lisp trên có hệ số mà do ta tự chọn khi copy nhé. Nghĩa là khi đánh lệnh COO thì hiện ra dòng command là lựa chọn hệ số (ví dụ ta có thể nhập vào là -1,-0.5,-0.2, 0.2, 0.5...v.v sau đấy copy là số tự động nhảy khi cộng trừ hệ số đó. Thanks các bác nhiều nhé !!! :bigsmile:

Chủ đề này đã có người hỏi rồi. Và được trả lời tại đây :
Topic Viết Lisp theo yêu cầu Phần 1 - Bài viết số 1962

@All : Việc tìm kiếm lại bài viết của mình rất khó trong topic, nhất là topic Viết Lisp theo yêu cầu. Thực sự là rất khó khăn mới tìm được đúng bài viết đã post để giúp cho bạn Minhnghi. Nên cũng dám mong các bạn không nên post các bài viết có nội dung chẳng liên quan đến topic, nhất là topic này -> nhằm tạo điều kiện thuận lợi cho người tìm kiếm.
Thanks
  • 2

#242 hoanghaiyp

hoanghaiyp

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 430 Bài viết
Điểm đánh giá: 244 (khá)

Đã gửi 08 October 2009 - 11:53 PM

Cảm ơn bạn Tue_NV đã nói về số PI
Mình hay phải làm công việc xác định đường kính của hình trụ D khi biết thể tích V ( thể tích cần coi như đã biết) và chiều cao H (đã biêt) hình trụ bằng công thức:
V= Pi *( D ^2) * H / 4 >>> D= ( V*4/ Pi/H)^0.5
Cách này tính cũng đơn giản nhưng tính nhiều cũng nhàm chán và nhức đầu. Nhờ các bạn viết hộ cái lisp để tính nhanh.

Ví dụ mình vẽ solid hình trụ đường kính 155 cao 25 biết được thông số về thể tích:
Select objects: 1 found
Select objects:
---------------- SOLIDS ----------------

Mass: 471729.7719
Volume: 471729.7719


Từ D= 155, H= 25 biết được thể tích của nó là 471729.7719
vậy V= 450000, H= 25 thì >>> D= ?

  • 0

#243 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 09 October 2009 - 10:37 AM

Cảm ơn bạn Tue_NV đã nói về số PI
Mình hay phải làm công việc xác định đường kính của hình trụ D khi biết thể tích V ( thể tích cần coi như đã biết) và chiều cao H (đã biêt) hình trụ bằng công thức:
V= Pi *( D ^2) * H / 4 >>> D= ( V*4/ Pi/H)^0.5
Cách này tính cũng đơn giản nhưng tính nhiều cũng nhàm chán và nhức đầu. Nhờ các bạn viết hộ cái lisp để tính nhanh.

Ví dụ mình vẽ solid hình trụ đường kính 155 cao 25 biết được thông số về thể tích:
Select objects: 1 found
Select objects:
---------------- SOLIDS ----------------

Mass: 471729.7719
Volume: 471729.7719
Từ D= 155, H= 25 biết được thể tích của nó là 471729.7719
vậy V= 450000, H= 25 thì >>> D= ?

Bạn sử dụng Code này thử nhé :
(defun c:dk (/ V H tam)
(setq tam (getpoint "\nNhap tam cua solid hinh tru:"))
(setq V (getreal "\nNhap the tich cua solid hinh tru:")
H (getreal "\nNhap chieu cao cua solid hinh tru: ")
D (sqrt (/ (* V 4) (* H pi)))
)
(command "cylinder" tam (/ D 2) H)
(alert
(strcat "\n The tich cua solid hinh tru la : " (rtos V 2 3)
"\n\n Chieu cao cua solid hinh tru la : " (rtos H 2 3)
"\n\n Ket qua tinh duong kinh cua solid hinh tru : " (rtos D 2 3)
)
)
(princ)
)

  • 1

#244 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 09 October 2009 - 12:21 PM

Hôm trước anh Tue_NV đã viết giúp em lisp sapxep.lsp để thống kê các text trong một bản vẽ vào một bảng. Vậy nay anh và mọi người có thể viết giúp em một lisp có công dụng ngược lại không ạ?

Đặt vấn đề: Sau khi tính toán thủy lực mạng lưới, em xuất kết quả từ Epanet sang Excel, và nhờ sự giúp đỡ của anh anhcos, lại xuất được từ Excel sang Autocad. Và em có một file cad như sau:
http://www.cadviet.c...oantonghopk.dwg
Trong đó có một bên là sơ đồ mạng lưới đường ống và một bên là bảng thống kê các số liệu của đường ống và nút. Công việc của em là cần thay các số liệu từ bảng vào bản đồ cho phù hợp với kết quả tính toán mới.

Vậy cho em hỏi, có cách nào giải quyết nào giải quyết công việc này nhanh hơn phương pháp thủ công.
Liệu có thể sử dụng được Attribute block?
Dữ liệu đầu vào gồm:
+ Bảng thống kê nút, gồm các thông tin: tên nút, cao độ, áp lực dư
+ Bảng thống kê đường ống, gồm các thông tin: số thứ tự ống, từ nút đến nút, chiều dài, đường kính, lưu lượng, vận tốc.
+ Sơ đồ mạng lưới.
Dữ liệu đầu ra: Sơ đồ tính toán thủy lực, trong đó:
+ Tại nút: thông tin cao độ ở nửa đường tròn phía dưới.
+ Trên đường ống: 5 thông tin gồm: chiều dài, lưu lượng, đường kính, vận tốc, độ dốc sắp xếp như hình vẽ. Trong đó, độ dốc được tính như trong hình vẽ.

Rất mong được giúp đỡ! Cảm ơn!
  • 0
http://khuyen.space

#245 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 09 October 2009 - 03:08 PM

Nhờ các bác viết giúp cái lisp như thế này:
bản vẽ của mình có một số đường có cao độ z, khi thao tác gặp rất nhiều bất tiện, mình muốn đưa các đối tượng đó cao độ z=0. Nhưng sau khi dung lisp supeiron trên diễn đàn thì các đối tượng nhảy lung tung hết. Nhờ các bác viết dùm lisp đưa các đối tượng về 0 nhưng không làm thay đổi vị trí của nó trên bản vẽ.
file chạy thử: http://www.cadviet.c...pfiles/2/bd.dwg
  • 0
Học học nữa học mãi.
Đúp học lại!

#246 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 09 October 2009 - 03:22 PM

Nhờ các bác viết giúp cái lisp như thế này:
bản vẽ của mình có một số đường có cao độ z, khi thao tác gặp rất nhiều bất tiện, mình muốn đưa các đối tượng đó cao độ z=0. Nhưng sau khi dung lisp supeiron trên diễn đàn thì các đối tượng nhảy lung tung hết. Nhờ các bác viết dùm lisp đưa các đối tượng về 0 nhưng không làm thay đổi vị trí của nó trên bản vẽ.
file chạy thử: http://www.cadviet.c...pfiles/2/bd.dwg

Đưa các đường contour về cao độ 0, có đưa cả text cao độ về cao độ 0 luôn không conghoan?
  • 0

#247 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 October 2009 - 03:33 PM

Nhờ các bác viết giúp cái lisp như thế này:
bản vẽ của mình có một số đường có cao độ z, khi thao tác gặp rất nhiều bất tiện, mình muốn đưa các đối tượng đó cao độ z=0. Nhưng sau khi dung lisp supeiron trên diễn đàn thì các đối tượng nhảy lung tung hết. Nhờ các bác viết dùm lisp đưa các đối tượng về 0 nhưng không làm thay đổi vị trí của nó trên bản vẽ.
file chạy thử: http://www.cadviet.c...pfiles/2/bd.dwg

Sao bác không dùng lệnh Flatten của Cad?
  • 1

#248 zippo.113

zippo.113

    biết pan

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

Đã gửi 09 October 2009 - 04:01 PM

Xin các cao thủ chỉ giáo !
Trong cad em thấy để sửa nhiều đối tượng cùng một thật dài dòng, ví dụ như sủa text trong bình đồ cứ phải ghõ như sau: SSX / select/ enter/ - CHT / select +P/ enter rồi tiếp tục chọn chiều cao, rộng...., mỗi lần làm như vậy thật khó chịu, em mong các bác cao thủ giúp em một cái lisp nào đó đơn giản hơn, ngắn hơn. Cảm ơn các bác nhiều !
  • 0

#249 zippo.113

zippo.113

    biết pan

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

Đã gửi 09 October 2009 - 04:02 PM

Xin các cao thủ chỉ giáo !
Trong cad em thấy để sửa nhiều đối tượng cùng một thật dài dòng, ví dụ như sủa text trong bình đồ cứ phải ghõ như sau: SSX / select/ enter/ - CHT / select +P/ enter rồi tiếp tục chọn chiều cao, rộng...., mỗi lần làm như vậy thật khó chịu, em mong các bác cao thủ giúp em một cái lisp nào đó đơn giản hơn, ngắn hơn. Cảm ơn các bác nhiều !
  • 0

#250 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 09 October 2009 - 04:20 PM

Xin các cao thủ chỉ giáo !
Trong cad em thấy để sửa nhiều đối tượng cùng một thật dài dòng, ví dụ như sủa text trong bình đồ cứ phải ghõ như sau: SSX / select/ enter/ - CHT / select +P/ enter rồi tiếp tục chọn chiều cao, rộng...., mỗi lần làm như vậy thật khó chịu, em mong các bác cao thủ giúp em một cái lisp nào đó đơn giản hơn, ngắn hơn. Cảm ơn các bác nhiều !

Bạn chọn các text cần thay đổi. Nhấn Ctrl+1 Cad sẽ hiện lên bảng Properties. Trong bảng đó nó có chiều cao, độ rộng...bạn có thể chỉnh trực tiếp trong đó
  • 0

#251 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 09 October 2009 - 07:33 PM

Đưa các đường contour về cao độ 0, có đưa cả text cao độ về cao độ 0 luôn không conghoan?

Chỉ cần các đường contour thôi a Thiep a, các text để vậy cũng được. Để mai em lên cty kiểm tra lênh Flatten của anh Natca thế nào! Cảm ơn a Thiệp nha!
  • 0
Học học nữa học mãi.
Đúp học lại!

#252 ut_cung

ut_cung

    biết vẽ line

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

Đã gửi 09 October 2009 - 10:03 PM

Nhờ các bác viết hộ cái lisp sau:
Mình có một polyline, biết cao độ hai điểm bất kỳ nằm trong polyline, mình muốn nội suy các cao độ nằm giữa hai điểm này.
trình tự thực hiện như thế này:
Chạy lisp:
Chọn polyline
pick điểm rồi nhập cao độ tại điểm này (cao độ điểm này đã có)
pick điểm và nhập cao độ điểm thứ hai (cao độ điểm này đã có)
pick điểm cần tìm cao độ (thuộc polyline) (Dùng phép nội suy tính ra cao độ điểm này)
pick điểm ghi cao độ điểm này.
pick điểm cần tìm thứ 2.
pick điẻm ghi cao độ điểm thứ 2.
Tiếp tục tìm cao độ các điểm khác..
Thank!
  • 0

#253 hoanghaiyp

hoanghaiyp

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 430 Bài viết
Điểm đánh giá: 244 (khá)

Đã gửi 09 October 2009 - 11:25 PM

Bạn sử dụng Code này thử nhé :

(defun c:dk (/ V H tam)
(setq tam (getpoint "\nNhap tam cua solid hinh tru:"))
(setq V (getreal "\nNhap the tich cua solid hinh tru:")
H (getreal "\nNhap chieu cao cua solid hinh tru: ")
D (sqrt (/ (* V 4) (* H pi)))
)
(command "cylinder" tam (/ D 2) H)
(alert
(strcat "\n The tich cua solid hinh tru la : " (rtos V 2 3)
"\n\n Chieu cao cua solid hinh tru la : " (rtos H 2 3)
"\n\n Ket qua tinh duong kinh cua solid hinh tru : " (rtos D 2 3)
)
)
(princ)
)

AutoLisp thật tuyệt vời...
Cảm ơn món quà mà Autodesk đã tặng cho chúng ta.
Cảm ơn tất cả.
Cảm ơn anh Tuệ đã nói trúng ý mình. Mình thấy yêu thích AutoLisp và yêu đời hơn. Nhất định mình sẽ học viết lisp, anh Tuệ hãy nói cho mình biết: để viết được lisp cần phải trang bị những kiến thức gì. Anh bớt chút thời gian, viết kinh nghiêm của bản thân từ lúc mới làm quen với lisp, đến khi viết được lisp. Chúc anh vui, khỏe , thành công, thành đạt ,trong cuộc sống! Cảm ơn anh nhiều nhé! :bigsmile: :bigsmile: :cry:
  • 1

#254 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 10 October 2009 - 08:49 AM

Nhờ các bác viết hộ cái lisp sau:
Mình có một polyline, biết cao độ hai điểm bất kỳ nằm trong polyline, mình muốn nội suy các cao độ nằm giữa hai điểm này.
trình tự thực hiện như thế này:
Chạy lisp:
Chọn polyline
pick điểm rồi nhập cao độ tại điểm này (cao độ điểm này đã có)
pick điểm và nhập cao độ điểm thứ hai (cao độ điểm này đã có)
pick điểm cần tìm cao độ (thuộc polyline)
(Dùng phép nội suy tính ra cao độ điểm này)

Phức tạp vậy bạn? -> Sư dụng lệnh ID là xong.

Command: id
Specify point: X = 3497.0558 Y = 3497.0558 Z = 10.4912 -> Chọn 1 điểm trên PLINE

-> Z = 10.4912 : đây chính là cao độ cần tìm
  • 2

#255 HoangSon614

HoangSon614

    biết lệnh properties

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

Đã gửi 10 October 2009 - 10:41 AM

Trước đây Tue_NV có viết cho mình cái lisp vẽ ký hiệu cắt ống. Nhưng nay vì công việc nên mình muốn phát triển thêm để tiện trong quá trình thiết kế. Nên mình có yêu cầu thế này nhờ Tue_NV hoặc các bạn giúp mình. Mình cảm ơn
Lisp trên chỉ vẽ được có 1 chiều (như hình 1), mình muốn khi pick điểm bất kỳ thì các hướng sẽ khác nhau (như hình minh hoạ đính kèm- Hình 2, 3, 4)
Mình gửi kèm file lisp và dwg
File đây: http://www.cadviet.c...s/2/cat_ong.rar
Visit My Website
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#256 conghoan1003

conghoan1003

    biết vẽ point

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

Đã gửi 10 October 2009 - 11:12 AM

Sao bác không dùng lệnh Flatten của Cad?

Cảm ơn a CHung nhiều, cái này đúng ý của em rồi!
@thiêp: Cái này e làm được rồi cảm ơn a Thiệp nha. không cần viết lisp nữa.
  • 0
Học học nữa học mãi.
Đúp học lại!

#257 ut_cung

ut_cung

    biết vẽ line

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

Đã gửi 10 October 2009 - 11:16 AM

Phức tạp vậy bạn? -> Sư dụng lệnh ID là xong.

Command: id
Specify point: X = 3497.0558 Y = 3497.0558 Z = 10.4912 -> Chọn 1 điểm trên PLINE

-> Z = 10.4912 : đây chính là cao độ cần tìm

Thực tế thì các cao độ của polyline này đều bằng không hết rồi. Công viêc. của mình là làm quy hoạch. muốn tìm cao độ đặt hố ga trên tuyến khi biết cao độ hố đầu tiên và hố cuối cung, giờ mình muốn tìm cao độ của các hố ở giữa. Mong tue giúp đỡ! Thank!
  • 0

#258 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 10 October 2009 - 11:33 AM

Trước đây Tue_NV có viết cho mình cái lisp vẽ ký hiệu cắt ống. Nhưng nay vì công việc nên mình muốn phát triển thêm để tiện trong quá trình thiết kế. Nên mình có yêu cầu thế này nhờ Tue_NV hoặc các bạn giúp mình. Mình cảm ơn
Lisp trên chỉ vẽ được có 1 chiều (như hình 1), mình muốn khi pick điểm bất kỳ thì các hướng sẽ khác nhau (như hình minh hoạ đính kèm- Hình 2, 3, 4)
Mình gửi kèm file lisp và dwg
File đây: http://www.cadviet.c...s/2/cat_ong.rar
Visit My Website

Bạn thay dòng :
(command ".INSERT" "C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg" po tle tle 0)
thành dòng :
(command ".INSERT" "C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg" po tle tle (/ (* (angle po1 po2) 180) pi))

đồng thời vào file daucat.dwg ở địa chỉ C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg
xoay hình vẽ 1 góc 90 độ ngược chiều kim đồng hồ và điểm Rotate là gốc toạ độ 0,0,0 -> giống y như hình số 3) mà bạn đã post là OK(

@ut_cung : Bạn vui lòng nói rõ hơn. Càng chi tiết, càng cụ thể -> càng tốt. Nếu có thể, bạn hãy upload file dwg minh hoạ
  • 2

#259 HoangSon614

HoangSon614

    biết lệnh properties

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

Đã gửi 10 October 2009 - 07:58 PM

Bạn thay dòng :
(command ".INSERT" "C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg" po tle tle 0)
thành dòng :
(command ".INSERT" "C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg" po tle tle (/ (* (angle po1 po2) 180) pi))

đồng thời vào file daucat.dwg ở địa chỉ C:\\Program Files\\AutoCAD 2007\\Support\\daucat.dwg
xoay hình vẽ 1 góc 90 độ ngược chiều kim đồng hồ và điểm Rotate là gốc toạ độ 0,0,0 -> giống y như hình số 3) mà bạn đã post là OK(

Cảm ơn Tue_NV nhiều lắm
  • 0
-~-~-~-~-~-~-~-~-~-~-~-~-~-~
Hôm qua là sự học hỏi nhận được sau 1 ngày
Ngày mai là sự bí ẩn mà chúng ta sẽ khám phá


------------------------------------------
http://www.tailieukythuat.com

#260 hoanghaiyp

hoanghaiyp

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 430 Bài viết
Điểm đánh giá: 244 (khá)

Đã gửi 11 October 2009 - 11:39 AM

Bạn làm như thế này :
Command: pe PEDIT -> gõ lệnh PE (hoặc PEDIT)

Mình muốn PE các đường Spline , line & Arc nhưng không được . Lệnh PE có nối được không, nếu không nhờ các anh viết giúp lisp nối Spline với các đường khác để nó trở thành 1 đối tượng như đường Polyline?
  • 0