Đến nội dung


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

[Yêu cầu] lisp vẽ mặt cắt từ bình đồ


  • Please log in to reply
45 replies to this topic

#1 saoemoi

saoemoi

    Chưa sử dụng CAD

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

Đã gửi 22 May 2007 - 07:42 AM

Các anh giúp em một lisp như sau:
Từ một bình đồ ta có thể vạch một đường bất kỳ để xuất ra mặt cắt, từ các mặt cắt đó để tính khối lượng nằm giữa 2 mặt cắt đã xuất ra.
Em đang tìm hiểu phần mềm autodesk landesktop 2004 anh nào có tài liệu hướng dẫn sử dụng bằng tiếng việt cho em được không? đang bí quá.
Chân thành cảm ơn các anh quan tâm.
  • 0

#2 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 22 May 2007 - 08:54 AM

Các anh giúp em một lisp như sau:
Từ một bình đồ ta có thể vạch một đường bất kỳ để xuất ra mặt cắt, từ các mặt cắt đó để tính khối lượng nằm giữa 2 mặt cắt đã xuất ra.
Em đang tìm hiểu phần mềm autodesk landesktop 2004 anh nào có tài liệu hướng dẫn sử dụng bằng tiếng việt cho em được không? đang bí quá.
Chân thành cảm ơn các anh quan tâm.



Đây là bài tóan gặp trong thiết kế đường:
Phân tích bài tóan ta sẽ gặp các vấn đề sau:
1.Bình đồ (mặt bằng) được thể hiện như thế nào:
Ở VN chuyện các bác khảo sát đi mia chưa được thống nhất, có bác thể hiện cao độ tại một điểm là một text nên mặt bằng cũng chỉ là bản vẽ ký hiệu thôi, có bác thể hiện được 3D (toa độ xyz rõ ràng) nhưng "TEXT" thể hiện cao độ là block hay là text đơn thuần - Với quan niệm một Developer thì tôi thấy là một Block có ATT thì tốt hơn vì có thể kiểm sóat được.
2. Cao độ một điểm được tính như thế nào:
Có người quan niệm cao độ một điểm là lấy cao độ điểm gần nhất hoặc là giao điểm của một đường song song với trục Z với mặt phẳng đi qua ba điểm gần nhất.
3. Hình dạng mặt cắt được định nghĩa như thế nào - Trong Nova thì mặt cắt được khai báo theo quy định của chương trình.
Tuy nhiên cũng có người muốn được định nghĩa mắt cắt bằng cách vẽ mặt cắt điển hình và để chương trình tự nhận ra.
...
Đây là bài tóan tương đối phức tạp

Nếu cần xử lý bài tóan này thì dùng NOVA hay SDR hoặc Eagle Point là cực chuẩn rồi.
  • 0

#3 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 23 May 2007 - 08:13 PM

Đây là bài tóan gặp trong thiết kế đường:
Phân tích bài tóan ta sẽ gặp các vấn đề sau:
1.Bình đồ (mặt bằng) được thể hiện như thế nào:
Ở VN chuyện các bác khảo sát đi mia chưa được thống nhất, có bác thể hiện cao độ tại một điểm là một text nên mặt bằng cũng chỉ là bản vẽ ký hiệu thôi, có bác thể hiện được 3D (toa độ xyz rõ ràng) nhưng "TEXT" thể hiện cao độ là block hay là text đơn thuần - Với quan niệm một Developer thì tôi thấy là một Block có ATT thì tốt hơn vì có thể kiểm sóat được.
2. Cao độ một điểm được tính như thế nào:
Có người quan niệm cao độ một điểm là lấy cao độ điểm gần nhất hoặc là giao điểm của một đường song song với trục Z với mặt phẳng đi qua ba điểm gần nhất.
3. Hình dạng mặt cắt được định nghĩa như thế nào - Trong Nova thì mặt cắt được khai báo theo quy định của chương trình.
Tuy nhiên cũng có người muốn được định nghĩa mắt cắt bằng cách vẽ mặt cắt điển hình và để chương trình tự nhận ra.
...
Đây là bài tóan tương đối phức tạp

Nếu cần xử lý bài tóan này thì dùng NOVA hay SDR hoặc Eagle Point là cực chuẩn rồi.


anh vndesperados có tiện ích nào về ngành trắc đạc, khảo sát. . . xin up lên cho anh em chuyên ngành địa hình tham khảo với. Thanks
  • 0

#4 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 24 May 2007 - 10:48 AM

Đây là một bài tóan tương đối khó. Không chỉ một vài đọan LISP là có thể thực hiện được. Ở vị trí là người dùng nên có thể bạn chỉ nghĩ là làm được việc này không có nhiều khó khăn, nhưng ở một vị trí là developer tôi thấy cần có sự hợp tác của nhiều thành viên trong diễn đàn này :s_dead: . Theo những gì mà tôi biết được, tôi đề nghị như sau, chúng ta sẽ chia nhỏ thành các "function main":
1. Đọc dữ liệu mặt bằng trên bản vẽ AutoCad.
Vì bản vẽ mặt bằng có thể không chuẩn từ nhiều nguồn nên cần có một công cụ chuẩn hóa:
VD: nên đưa tất cả các Text chứa cao độ thành block có ATT thể hiện cao độ (--> có thể xây dựng các đường đồng mức nếu cần thiết)
2. Nội suy cao độ tại một điểm bất kỳ từ cao độ các điểm lân cận (ít nhất là ba điểm)
3. Xây dựng quy định về cách định nghĩa mặt cắt điển hình.
Có thể bằng cách khai báo theo một quy tắc (cách này dễ cho Developer nhưng khó cho người dùng)
Hoặc vẽ mặt cắt điển hình rồi có một function để phân tích (Cách này thì khó cho Developer nhưng dễ cho người dùng)
Bản thân tôi sẽ chon cách dưới vì cái này "Một lần và mãi mãi" còn cách trên cũng "Một lần và mãi mãi" luôn.
4. ....
:ph34r:

Từ các "funtion main" chúng ta lại chia nhỏ thành các "fution code"

1. Đọc dữ liệu mặt bằng trên bản vẽ AutoCad
1.1: Xác định text cao độ.
1.2 Xác định giá trị cao độ
1.2 Chuẩn hóa cách thể hiện cao độ (Số hóa bản đồ)
(Cái này tôi làm rồi)
2. Nội suy cao độ tại một điểm bất kỳ từ cao độ các điểm lân cận (ít nhất là ba điểm)
2.1 Xác đinh ba điểm gần nhất với điểm cần nội suy. Điiểm cần nội suy có thể nằm trong tam giác ba điểm xác định hay nằm ngòai
2.2 Nội suy cao độ (Cái này đã làm được thuật tóan)
3. Xây dựng quy định về cách định nghĩa mặt cắt điển hình.
....
Mời ý kiến của các bác...
  • 0

#5 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 24 May 2007 - 10:53 AM

anh vndesperados có tiện ích nào về ngành trắc đạc, khảo sát. . . xin up lên cho anh em chuyên ngành địa hình tham khảo với. Thanks


Xin đính chính lại một lần nữa:
Tôi là Developer chuyên về JAVA NETWORKING, không phải là dân dùng CAD hay là CAD Developer.
LISP chỉ là yêu thích thôi
Vậy nên tôi không có nhiều đồ chơi về CAD lắm đâu. Tuy nhiên nếu bạn cần gì thì cứ POST lên đây một cách cụ thể. Tôi hi vọng có thể giúp được bạn
  • 0

#6 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 24 May 2007 - 06:16 PM

Xin đính chính lại một lần nữa:
Tôi là Developer chuyên về JAVA NETWORKING, không phải là dân dùng CAD hay là CAD Developer.
LISP chỉ là yêu thích thôi
Vậy nên tôi không có nhiều đồ chơi về CAD lắm đâu. Tuy nhiên nếu bạn cần gì thì cứ POST lên đây một cách cụ thể. Tôi hi vọng có thể giúp được bạn


bạn có thể giúp tôi viết 1 chương trình lên các điểm mia chi tiết dùng để vẽ bình đồ với đối tượng xuất ra là block cao độ có Att. Thanks
  • 0

#7 Timua

Timua

    Chưa sử dụng CAD

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

Đã gửi 02 July 2007 - 02:36 PM

Các anh giúp em một lisp như sau:
Từ một bình đồ ta có thể vạch một đường bất kỳ để xuất ra mặt cắt, từ các mặt cắt đó để tính khối lượng nằm giữa 2 mặt cắt đã xuất ra.
Em đang tìm hiểu phần mềm autodesk landesktop 2004 anh nào có tài liệu hướng dẫn sử dụng bằng tiếng việt cho em được không? đang bí quá.
Chân thành cảm ơn các anh quan tâm.



Tôi có cách nhưng chưa hay lắm
Bạn có thể cho tôi địa chỉ Email của bạn. Có thể sẽ giúp bạn được đôi chút
vantimua2003@gmail.com
  • 0

#8 saoemoi

saoemoi

    Chưa sử dụng CAD

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

Đã gửi 04 July 2007 - 11:02 AM

Tôi có cách nhưng chưa hay lắm
Bạn có thể cho tôi địa chỉ Email của bạn. Có thể sẽ giúp bạn được đôi chút
vantimua2003@gmail.com

Cảm ơn bạn trước. Mail của tôi là: saoemoi@gmail.com
  • 0

#9 Timua

Timua

    Chưa sử dụng CAD

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

Đã gửi 08 July 2007 - 09:25 AM

Xin chào anh em trong diễn đàn.
Tôi là thành viên mới, mong được sự chỉ giáo của các đại ca nghe
Vấn đề của tôi như thế này:
1- Tôi có một loạt các đường thẳng song song nhưng không cách đều
và một đường thẳng cắt ngang các đường thẳng song song đó.
2 - Tôi muốn viết một chương trình tự động tính khoảng cách các giao điểm theo trục X và trục Y
Mong sớm được giúo đỡ
  • 0

#10 xuanhai

xuanhai

    biết vẽ line

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

Đã gửi 09 July 2007 - 10:12 AM

Bạn dùng Land là ra ngay thôi mà.
  • 0

#11 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 12 July 2007 - 11:08 PM

Lisp vẽ mặt cắt từ bình đồ:
Lệnh VMC.


;; Bien toan cuc deltaH
(defun c:vmc ( / sel)
(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)
)
)
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)
(defun NhapdeltaH( / tmp)
(while (not tmp)
(setq tmp (getdist "\nVao khoang cach deltaH: "))
(if (not tmp)
(setq tmp deltaH)
)
)
(setq deltaH tmp)
)
;;;---------------------- Main --------------------------------
(princ "\nVMC © CADViet.com")
(if (not deltaH)
(NhapdeltaH)
)
(while (not sel)
(setq sel (entsel "\nVao line mat cat (hoac nhan Enter de nhap deltaH): ")
entl (car sel)
)
(if (not sel)
(NhapdeltaH)
)
)
(if (= "LINE" (cdr (assoc 0 (entget entl))))
(progn
(setq
p (cadr sel)
tt (entget entl)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
)
(if (> (distance p p1)
(distance p p2)
)
(setq p p1
p1 p2
p2 p
)
)
(luuos)
(setvar "osmode" 0)
(command ".zoom" p1 p2)
(setq
sspl (ssget "F"
(LIST P1 P2)
'((-4 . " (0 . "LWPOLYLINE")
(0 . "SPLINE")
(-4 . "OR>")
)
)
tappl (ss2ent sspl)
goc (+ (angle p1 p2) (/ pi 2.0))
index 0
tappn nil
)
(command ".zoom" "p")
(foreach entpl tappl
(if (setq tmp (giaodt entpl entl))
(setq
p (car tmp)
pn (polar p goc (* deltaH index))
index (1+ index)
tappn (append tappn (list pn))
)
)
)
(command ".pline")
(foreach pn tappn
(command pn)
)
(command "")
(traos)
)
)
(princ)
)

(vl-load-com)
(princ "\nVe mat cat tu binh do © CADViet.com 2007")
(princ "\nDung lenh VMC de bat dau!")
(princ)



Hướng dẫn sử dụng:
- Lệnh VMC vẽ mặt cắt của địa hình theo vết cắt cho trước. Địa hình được mô tả bằng các đối tượng pline hay spline có z=0 là đường đồng mức. Vết cắt là một line.
- Khi sử dụng lệnh lần đầu tiên, chương trình sẽ yêu cầu nhập deltaH. Các lần sau, chương trình sẽ không yêu cầu nhập lại deltaH. Muốn hiệu chỉnh giá trị deltaH, bạn nhấn enter khi chương trình hỏi vết cắt.
- Mỗi lần sử dụng, chương trình sẽ yêu cầu chọn 1 line làm vết cắt. Chương trình sẽ vẽ mặt cắt theo vết cắt và deltaH đã chỉ định.
  • 1

#12 vbao

vbao

    biết lệnh array

  • CADViet Team
  • PipPipPip
  • 184 Bài viết
Điểm đánh giá: 80 (tàm tạm)

Đã gửi 13 July 2007 - 07:49 AM

Lisp vẽ mặt cắt từ bình đồ:
Lệnh VMC.


;; Bien toan cuc deltaH
(defun c:vmc ( / sel)
(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)
)
)
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)
(defun NhapdeltaH( / tmp)
(while (not tmp)
(setq tmp (getdist "\nVao khoang cach deltaH: "))
(if (not tmp)
(setq tmp deltaH)
)
)
(setq deltaH tmp)
)
;;;---------------------- Main --------------------------------
(princ "\nVMC © CADViet.com")
(if (not deltaH)
(NhapdeltaH)
)
(while (not sel)
(setq sel (entsel "\nVao line mat cat (hoac nhan Enter de nhap deltaH): ")
entl (car sel)
)
(if (not sel)
(NhapdeltaH)
)
)
(if (= "LINE" (cdr (assoc 0 (entget entl))))
(progn
(setq
p (cadr sel)
tt (entget entl)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
)
(if (> (distance p p1)
(distance p p2)
)
(setq p p1
p1 p2
p2 p
)
)
(luuos)
(setvar "osmode" 0)
(command ".zoom" p1 p2)
(setq
sspl (ssget "F"
(LIST P1 P2)
'((-4 . "<OR")
(0 . "LWPOLYLINE")
(0 . "SPLINE")
(-4 . "OR>")
)
)
tappl (ss2ent sspl)
goc (+ (angle p1 p2) (/ pi 2.0))
index 0
tappn nil
)
(command ".zoom" "p")
(foreach entpl tappl
(if (setq tmp (giaodt entpl entl))
(setq
p (car tmp)
pn (polar p goc (* deltaH index))
index (1+ index)
tappn (append tappn (list pn))
)
)
)
(command ".pline")
(foreach pn tappn
(command pn)
)
(command "")
(traos)
)
)
(princ)
)

(vl-load-com)
(princ "\nVe mat cat tu binh do © CADViet.com 2007")
(princ "\nDung lenh VMC de bat dau!")
(princ)



Hướng dẫn sử dụng:
- Lệnh VMC vẽ mặt cắt của địa hình theo vết cắt cho trước. Địa hình được mô tả bằng các đối tượng pline hay spline có z=0 là đường đồng mức. Vết cắt là một line.
- Khi sử dụng lệnh lần đầu tiên, chương trình sẽ yêu cầu nhập deltaH. Các lần sau, chương trình sẽ không yêu cầu nhập lại deltaH. Muốn hiệu chỉnh giá trị deltaH, bạn nhấn enter khi chương trình hỏi vết cắt.
- Mỗi lần sử dụng, chương trình sẽ yêu cầu chọn 1 line làm vết cắt. Chương trình sẽ vẽ mặt cắt theo vết cắt và deltaH đã chỉ định.


Cảm ơn anh Hoành đã share với dân trắc địa, nhưng tôi sử dụng gặp lỗi như sau:

Command: vmc
VMC © CADViet.com
Vao line mat cat (hoac nhan Enter de nhap deltaH): .zoom
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window] <real time>:
Specify opposite corner:
Command: ; error: no function definition: SS2ENT

mong anh hướng dẫn. Thanks
  • 0

#13 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 13 July 2007 - 12:14 PM

Cảm ơn anh Hoành đã share với dân trắc địa, nhưng tôi sử dụng gặp lỗi như sau:

Command: vmc
VMC © CADViet.com
Vao line mat cat (hoac nhan Enter de nhap deltaH): .zoom
Specify corner of window, enter a scale factor (nX or nXP), or
[All/Center/Dynamic/Extents/Previous/Scale/Window] :
Specify opposite corner:
Command: ; error: no function definition: SS2ENT

mong anh hướng dẫn. Thanks

Xin lỗi tôi sơ suất, SS2ENT là hàm thường dùng, nên có sẵn trong ACAD của tôi.

Lisp mới sau khi sửa lại như sau:

;; Bien toan cuc deltaH
(defun c:vmc ( / sel)
(defun ss2ent(ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(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)
)
)
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)
(defun NhapdeltaH( / tmp)
(while (not tmp)
(setq tmp (getdist "\nVao khoang cach deltaH: "))
(if (not tmp)
(setq tmp deltaH)
)
)
(setq deltaH tmp)
)
;;;---------------------- Main --------------------------------
(princ "\nVMC © CADViet.com")
(if (not deltaH)
(NhapdeltaH)
)
(while (not sel)
(setq sel (entsel "\nVao line mat cat (hoac nhan Enter de nhap deltaH): ")
entl (car sel)
)
(if (not sel)
(NhapdeltaH)
)
)
(if (= "LINE" (cdr (assoc 0 (entget entl))))
(progn
(setq
p (cadr sel)
tt (entget entl)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
)
(if (> (distance p p1)
(distance p p2)
)
(setq p p1
p1 p2
p2 p
)
)
(luuos)
(setvar "osmode" 0)
(command ".zoom" p1 p2)
(setq
sspl (ssget "F"
(LIST P1 P2)
'((-4 . "(0 . "LWPOLYLINE")
(0 . "SPLINE")
(-4 . "OR>")
)
)
tappl (ss2ent sspl)
goc (+ (angle p1 p2) (/ pi 2.0))
index 0
tappn nil
)
(command ".zoom" "p")
(foreach entpl tappl
(if (setq tmp (giaodt entpl entl))
(setq
p (car tmp)
pn (polar p goc (* deltaH index))
index (1+ index)
tappn (append tappn (list pn))
)
)
)
(command ".pline")
(foreach pn tappn
(command pn)
)
(command "")
(traos)
)
)
(princ)
)

(vl-load-com)
(princ "\nVe mat cat tu binh do © CADViet.com 2007")
(princ "\nDung lenh VMC de bat dau!")
(princ)

  • 0

#14 Timua

Timua

    Chưa sử dụng CAD

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

Đã gửi 17 November 2007 - 03:15 PM

Xin lỗi tôi sơ suất, SS2ENT là hàm thường dùng, nên có sẵn trong ACAD của tôi.

Lisp mới sau khi sửa lại như sau:


;; Bien toan cuc deltaH
(defun c:vmc ( / sel)
(defun ss2ent(ss / sodt index lstent)
(setq
sodt (cond
(ss (sslength ss))
(t 0)
)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(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)
)
)
(defun GiaoDT (ent1 ent2)
(setq ob1 (vlax-ename->vla-object ent1)
ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value
(vla-IntersectWith ob1 ob2 acExtendNone)
)
)
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
(setq kq nil
sd (fix (/ (length g) 3))
)
(repeat sd
(setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
g (cdddr g)
)
)
kq
)
nil
)
)
(defun NhapdeltaH( / tmp)
(while (not tmp)
(setq tmp (getdist "\nVao khoang cach deltaH: "))
(if (not tmp)
(setq tmp deltaH)
)
)
(setq deltaH tmp)
)
;;;---------------------- Main --------------------------------
(princ "\nVMC © CADViet.com")
(if (not deltaH)
(NhapdeltaH)
)
(while (not sel)
(setq sel (entsel "\nVao line mat cat (hoac nhan Enter de nhap deltaH): ")
entl (car sel)
)
(if (not sel)
(NhapdeltaH)
)
)
(if (= "LINE" (cdr (assoc 0 (entget entl))))
(progn
(setq
p (cadr sel)
tt (entget entl)
p1 (cdr (assoc 10 tt))
p2 (cdr (assoc 11 tt))
)
(if (> (distance p p1)
(distance p p2)
)
(setq p p1
p1 p2
p2 p
)
)
(luuos)
(setvar "osmode" 0)
(command ".zoom" p1 p2)
(setq
sspl (ssget "F"
(LIST P1 P2)
'((-4 . "<OR")
(0 . "LWPOLYLINE")
(0 . "SPLINE")
(-4 . "OR>")
)
)
tappl (ss2ent sspl)
goc (+ (angle p1 p2) (/ pi 2.0))
index 0
tappn nil
)
(command ".zoom" "p")
(foreach entpl tappl
(if (setq tmp (giaodt entpl entl))
(setq
p (car tmp)
pn (polar p goc (* deltaH index))
index (1+ index)
tappn (append tappn (list pn))
)
)
)
(command ".pline")
(foreach pn tappn
(command pn)
)
(command "")
(traos)
)
)
(princ)
)

(vl-load-com)
(princ "\nVe mat cat tu binh do © CADViet.com 2007")
(princ "\nDung lenh VMC de bat dau!")
(princ)

-------------------------------------
Tôi đã copy chương trình vẽ mặt cắt từ binhg đồ và chạy trong Auto CAD nhưng kết quả chỉ cho một đường Pline, không thấy mặt cắt đâu cả. Kính mong Mr. Hoành chỉ giáo. Tôi thực sự cần chương trình này.
Xin cảm ơn
  • 0

#15 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 17 November 2007 - 03:44 PM

-------------------------------------
Tôi đã copy chương trình vẽ mặt cắt từ binhg đồ và chạy trong Auto CAD nhưng kết quả chỉ cho một đường Pline, không thấy mặt cắt đâu cả. Kính mong Mr. Hoành chỉ giáo. Tôi thực sự cần chương trình này.
Xin cảm ơn

Pline đó chính là phôi của mặt cắt.
Chương trình chỉ cho ra kết quả mặt cắt dạngphôi chứ không cho ra một mặt cắt dạng đầy đủ để dùng luôn. Muốn dùng được, bạn phải thêm các kích thước cao độ,...
  • 0

#16 persuasion_hp

persuasion_hp

    Chưa sử dụng CAD

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

Đã gửi 17 November 2007 - 03:47 PM

-------------------------------------
Tôi đã copy chương trình vẽ mặt cắt từ binhg đồ và chạy trong Auto CAD nhưng kết quả chỉ cho một đường Pline, không thấy mặt cắt đâu cả. Kính mong Mr. Hoành chỉ giáo. Tôi thực sự cần chương trình này.
Xin cảm ơn

Xin chào các bác. tôi là một thành viên mới, kiến thức về slip còn kém nhưng vấn đề mà các bác đưa ra hồi xưa đi học bọn tôi giải quyết bằng cách dùng phần mềm softdesk 8. Giải quyết vấn đề các bác nêu ra là lên mặt cắt từ bình đồ và tính khối lượng cực kỳ chính xác và đơn giản. Nó là một phần mêm chạy ngay trên nền cad 14( đấy là phiên bản tôi dùng cách đây 3 năm hồi còn là SV) bay giờ chắc có phiên bản chạy trên cad 2004 rồi.Phần mềm này rất hay có thể tính khối lượng đào đắp, san lấp, vẽ đường đồng mức cho bản đồ, lên mặt cắt cực nhanh với khối lượng không hạn chế. các bác có thê search trên google tim phần mềm này. chúc thành công.
  • 0

#17 se7en

se7en

    biết vẽ ellipse

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

Đã gửi 17 November 2007 - 06:47 PM

Nói chung thì đây là 1 vấn đề cũ và thường gặp bên cầu đường hay trắc địa...nếu là dân trong nghề thì đương nhiên sẽ có lúc dùng qua các phần mềm hỗ trợ để tính toán khối lượng, vẽ bình đồ, xuất mặt cắt dọc, mặt cắt ngang,...ít ai đi tìm hiểu để viết code hay lisp thực hiện các công việc trên (trừ khi muốn tìm hiểu sâu thêm các công cụ ấy đã làm điều đó như thế nào :-)...)
thường thì dùng các công cụ đã có sẵn, cái này khá chính xác và đơn giản.
bạn có thể sử dụng các phần mềm như CAD Land Desktop, softdesk(cái này cũ), Liscad Plus (bên trắc địa),Surfer,SRD...mấy cái này đều có thể giải quyết các câu hỏi bạn đặt ra. :bigsmile:
  • 0
Mê xe và súng
Thích để súng trong xe

#18 tnmtpc

tnmtpc

    biết dimcontinue

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

Đã gửi 25 January 2008 - 04:24 PM

Đúng là bạn là thành viên mới nên chưa biết CadViet đã nói đến phần mềm này rồi .Các bạn có thể Download tại Softdesk8.0
và: Hướng dẫn sử dụng Softdesk

Bác xem lại giúp, không down được cái softdesk8.0
  • 0

#19 khanhcdm

khanhcdm

    Chưa sử dụng CAD

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

Đã gửi 13 May 2011 - 11:21 PM

Chào các bác!
Mình là thành viên mới, cũng đang công tác trong lĩnh vực kỹ thuật địa chất nên việc thường xuyên phải cắt các mặt cắt dựa trên các bình đồ có sẵn một cách nhanh tróng sã giải quyết cho mình được rất nhiều khâu.
Và mình cũng đang tập tành về lisp nữa tuy nhiên vẫn chỉ là một chicken mà thôi! Hì hì!
Trước tiên, em rất cám ơn Mr Nguyen Hoanh về sự đóng góp. Tiếp đến là việc em load vào mà không nhận lệnh VMC, không biết vì lý do gì - Cad 2008.
Thank nhiều hơn nữa nếu có bác nào có thể phát triển thêm nữa.
Chúc cho diễn đàn phát triển mạnh!

{Bài viết đầu tay}
  • 0

#20 tiendung89

tiendung89

    biết lệnh move

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

Đã gửi 27 September 2011 - 12:45 AM

-------------------------------------
Tôi đã copy chương trình vẽ mặt cắt từ binhg đồ và chạy trong Auto CAD nhưng kết quả chỉ cho một đường Pline, không thấy mặt cắt đâu cả. Kính mong Mr. Hoành chỉ giáo. Tôi thực sự cần chương trình này.
Xin cảm ơn

anh Hoành ơi cho em hỏi sao em làm đúng như thế mà máy em lại báo lỗi như thế này:

" APPLOAD ve mat cat.lsp successfully loaded.
Command: ; error: misplaced dot on input
Command: "
anh giúp em với
  • 0
Tôi không phải là đặc biệt, nhưng tôi là duy nhất ^^