Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

Viết Lisp theo yêu cầu

Các bài được khuyến nghị

Tue_NV    3.841
Uh ! Mình không hiểu tại sao mà khi chạy xong sửa lại các point đó rồi chạy lại nó lại vẫn bắt point vào những điểm đó mặc dù mình đã cố gắng sửa thật chính xác rồi. Có một điều mình muốn hỏi bạn đó là tại sao khi bắt đầu gõ lệnh :

Lisp hỏi :chon duong mà mình không thề select được vào đó mà chỉ bao được các đối tượng là text có phải đó là lý do ?

Xem giùm mình nhé ! Cảm ơn bạn nhiều !

Cũng có thể do chế độ bắt điểm của CAD. Bạn phải dùng chế độ bắt điểm Insert bắt vào Middle Center của Text bát dính vào Curve (dùng chế độ bắt điểm Nearest).

Có lẽ mình đưa vào Lisp một khoảng hở cho phép của biến dis để CAD chấp nhận, không bắt lỗi bằng cách vẽ point vào điểm bắt dính Middle Center của Text trên Curve

Dòng này (if (/= dis 0) (Command "point" po1))

mình sửa lại như sau : (if (> dis 0.2) (Command "point" po1))

Giá trị 0.2mm tức là khoảng hở cho phép có thể chấp nhận được không bắt lỗi bằng cách vẽ point.

Code được sửa lại :

(defun c:btd()
(Command "undo" "BEgin")
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)

(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :")))
)
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(sssetfirst ss ss)
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while ((setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (> dis 0.2) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

 

Lisp hỏi :chon duong mà mình không thề select được vào đó.

Mình sử dụng hàm entsel : Pick chuột chọn đối tượng. Trong Lisp mình đã đưa vào vòng lặp while, khi nào bạn pick trúng đối tượng Curve thì mới dừng lại. Pick chưa trúng đối tượng thì phải pick lại. Bạn đồng ý chứ .

Nguyên tắc đoạn Lisp trên :

 

1. Một curve : đó là 1 SPline, PLine, line, Arc..

2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)

3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve

4. Đặt khoảng cách dis=Po1Po2.

Vậy thì Nếu dis Xem Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center

Vậy thì Nếu dis>0.2 (sai số) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
m.rduong    0
Cũng có thể do chế độ bắt điểm của CAD. Bạn phải dùng chế độ bắt điểm Insert bắt vào Middle Center của Text bát dính vào Curve (dùng chế độ bắt điểm Nearest).

Có lẽ mình đưa vào Lisp một khoảng hở cho phép của biến dis để CAD chấp nhận, không bắt lỗi bằng cách vẽ point vào điểm bắt dính Middle Center của Text trên Curve

Dòng này (if (/= dis 0) (Command "point" po1))

mình sửa lại như sau : (if (> dis 0.2) (Command "point" po1))

Giá trị 0.2mm tức là khoảng hở cho phép có thể chấp nhận được không bắt lỗi bằng cách vẽ point.

Code được sửa lại :

(defun c:btd()
(Command "undo" "BEgin")
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)

(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :")))
)
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(sssetfirst ss ss)
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (> dis 0.2) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

 

Lisp hỏi :chon duong mà mình không thề select được vào đó.

Mình sử dụng hàm entsel : Pick chuột chọn đối tượng. Trong Lisp mình đã đưa vào vòng lặp while, khi nào bạn pick trúng đối tượng Curve thì mới dừng lại. Pick chưa trúng đối tượng thì phải pick lại. Bạn đồng ý chứ .

Nguyên tắc đoạn Lisp trên :

 

1. Một curve : đó là 1 SPline, PLine, line, Arc..

2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)

3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve

4. Đặt khoảng cách dis=Po1Po2.

Vậy thì Nếu dis<0.2 (sai số) => Xem Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center

Vậy thì Nếu dis>0.2 (sai số) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center

 

Gửi bạn Tue_NV file này thử xem mình bắt snap đã đúng ý bạn chưa nhé. Bạn test giùm mình nhé ! Thank 's

 

http://www.cadviet.com/upfiles/test.dxf

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Gửi bạn Tue_NV file này thử xem mình bắt snap đã đúng ý bạn chưa nhé. Bạn test giùm mình nhé ! Thank 's

 

http://www.cadviet.com/upfiles/test.dxf

Chào bạn 'm.rduong'

Đoạn Lisp trên của mình chỉ chọn 1 đường curve mà thôi. và kiểm tra điểm bắt dính Middle Center của Text trên 1 Curve đó mà thôi. Như vậy bạn kiểm tra con số 10 trên curve đó mà thôi. Bạn lưu ý điều này nhé. Mình đã test kỹ lại rồi. Kích thuớc point size ở bản vẽ bạn hơi bị lớn, chỉnh lại ở dòng (setvar "Pdsize" 200)

thành (setvar "Pdsize" 10) là được

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
m.rduong    0
Chào bạn 'm.rduong'

Đoạn Lisp trên của mình chỉ chọn 1 đường curve mà thôi. và kiểm tra điểm bắt dính Middle Center của Text trên 1 Curve đó mà thôi. Như vậy bạn kiểm tra con số 10 trên curve đó mà thôi. Bạn lưu ý điều này nhé. Mình đã test kỹ lại rồi. Kích thuớc point size ở bản vẽ bạn hơi bị lớn, chỉnh lại ở dòng (setvar "Pdsize" 200)

thành (setvar "Pdsize" 10) là được

Uh Nhưng bản vẽ của mình thì rất nhiều nhánh đi ra từ một Curve. Bạn có cách nào để lisp kiểm tra được cả bản vẽ không vậy .

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vinhqc    4
Chào mọi người!

Nhờ các bác xem giúp sao đoạn lisp này của em khi nó hông chịu kết thúc cứ phải bấm Éc thi nó mới thoát. còn không thì nó cứ sửa Text sau cùng sau mổi lần bấm enter mà không chọn điểm.

(Defun C:ct ( )
(prompt "\nChon Text mau.")
 (setq DTD (car (entsel)))
 (setq DT (entget DTD))
 (setq NDT (cdr (assoc 1 DT)))

 (Prompt "\nChon cac doi tuong chep theo...")
 (Setq CDT (Ssget))

 (setq a (getpoint "\nChon diem lam chuan: "))
 (setq xa (car a))
 (setq ya (cadr a))

 (while
 (luuos)
 (setvar "osmode" 0)

 (setq b (getpoint "\nChon diem dat moi: "))
 (setq xb (car :cheers:)
 (setq yb (cadr :))
 (command "copy" CDT "" (list xa ya) (list xb yb))
 (command "copy" DTD "" (list xa ya) (list xb yb))
 (setq DTDM (entlast))

  (if (and (>= (ascii NDT) 48) (<= (ascii NDT) 57))
      (setq NDT (itoa (+ (atoi NDT) 1)))
      (setq NDT (chr (+ (ascii NDT) 1)))
  )

  (setq Elist (entget DTDM)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Oldtext (strcase Oldtext nil))
  (setq Newlist (cons '1 NDT))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)

 (traos)
)

   (Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vinhqc    4
Chào mọi người!

Nhờ các bác xem giúp sao đoạn lisp này của em khi nó hông chịu kết thúc cứ phải bấm Éc thi nó mới thoát. còn không thì nó cứ sửa Text sau cùng sau mổi lần bấm enter mà không chọn điểm.

(Defun C:ct ( )
(prompt "\nChon Text mau.")
 (setq DTD (car (entsel)))
 (setq DT (entget DTD))
 (setq NDT (cdr (assoc 1 DT)))

 (Prompt "\nChon cac doi tuong chep theo...")
 (Setq CDT (Ssget))

 (setq a (getpoint "\nChon diem lam chuan: "))
 (setq xa (car a))
 (setq ya (cadr a))

 (while
 (luuos)
 (setvar "osmode" 0)

 (setq b (getpoint "\nChon diem dat moi: "))
 (setq xb (car :cheers:)
 (setq yb (cadr :))
 (command "copy" CDT "" (list xa ya) (list xb yb))
 (command "copy" DTD "" (list xa ya) (list xb yb))
 (setq DTDM (entlast))

  (if (and (>= (ascii NDT) 48) (<= (ascii NDT) 57))
      (setq NDT (itoa (+ (atoi NDT) 1)))
      (setq NDT (chr (+ (ascii NDT) 1)))
  )

  (setq Elist (entget DTDM)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Oldtext (strcase Oldtext nil))
  (setq Newlist (cons '1 NDT))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)

 (traos)
)

   (Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vinhqc    4
Chào mọi người!

Nhờ các bác xem giúp sao đoạn lisp này của em khi nó hông chịu kết thúc cứ phải bấm Éc thi nó mới thoát. còn không thì nó cứ sửa Text sau cùng sau mổi lần bấm enter mà không chọn điểm.

(Defun C:ct ( )
(prompt "\nChon Text mau.")
 (setq DTD (car (entsel)))
 (setq DT (entget DTD))
 (setq NDT (cdr (assoc 1 DT)))

 (Prompt "\nChon cac doi tuong chep theo...")
 (Setq CDT (Ssget))

 (setq a (getpoint "\nChon diem lam chuan: "))
 (setq xa (car a))
 (setq ya (cadr a))

 (while
 (luuos)
 (setvar "osmode" 0)

 (setq b (getpoint "\nChon diem dat moi: "))
 (setq xb (car :cheers:)
 (setq yb (cadr :))
 (command "copy" CDT "" (list xa ya) (list xb yb))
 (command "copy" DTD "" (list xa ya) (list xb yb))
 (setq DTDM (entlast))

  (if (and (>= (ascii NDT) 48) (<= (ascii NDT) 57))
      (setq NDT (itoa (+ (atoi NDT) 1)))
      (setq NDT (chr (+ (ascii NDT) 1)))
  )

  (setq Elist (entget DTDM)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Oldtext (strcase Oldtext nil))
  (setq Newlist (cons '1 NDT))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)

 (traos)
)

   (Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vinhqc    4

Xin lổi vì mình mới tham gia diễn đàn nên chưa biết cách chọn trả lời. Nên tin vừa rồi gửi đi không có nội dung gì hết!Sorry!

Đoạn lisp của bạn Duy chỉ cần chuyển vị trí của dòng lệnh : (setq b (getpoint "\nChon diem dat moi: ")) lên ngay sau vòng lặp (While như trích đoạn sau là được.

 

(while

(setq b (getpoint "\nChon diem dat moi: "))

(luuos)

(setvar "osmode" 0)

(setq xb (car :cheers:)

(setq yb (cadr :))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
binharch77    163
Bạn có thể post yêu cầu về autolisp ở topic này.

Untitled_1_9.jpg

có đồng chí nào giúp mình được cái này không :

mình muốn tạo một cái lisp sao cho khi quét các đối tượng line, nếu 2 line vuông góc nhau thì insert block A như hình vẽ (đương nhiên trục block sẽ theo 2 trục của line tạo ra, nếu có 2 line vuông góc nhưng dư ra thì insert block B như hình vẽ.

 

cám ơn các bác nhiều.

mình nghĩ cái này hơn khó đấy.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ai có cái lisp ghi độ dốc dọc của một đoạn thẳng cho mình xin với. mình muốn tính độ dốc dọc của mặt đường cũ, mà nó nhiều mặt cắt quá mỗi lần tính lại phải đo chiều dài rồi nhân chia ra khổ quá. Ai biết chỉ mình với.

Thank!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Em cũng đang cần 1 lips tính diện tích giới hạn bởi các layer nữa ! các giúp em cả hai lips trên suất ra text luôn với nhé! chắc em phải học cách viết lips thôi!

Cái bạn cần đang dùng OK lắm, bạn dùng thử xem. Dùng lệnh "AR" hoặc "AR2" để tính nghe!

 

(defun DXF (code elist)

(cdr (assoc code elist))

);dxf

 

(defun c:AR(/ dtl dtcon pt1 pt2 ss et oslast vsize)

(if (= tl nil) (progn

(setq tl (getreal "\nDrawing scale : "))

; (setq ntl (/ 1000 tl))

; (setq tl2 (* ntl ntl))

)

)

(setq dtl 0)

(setq ss (ssadd))

(setq oslast (getvar "OSMODE"))

(command "osnap" "")

(setq ntl (/ 1000 tl))

(setq tl2 (* ntl ntl))

 

(print)

(print)

(setq pt1 (getpoint "\nPick internal point : "))

(while (/= pt1 nil)

(command "-boundary" pt1 "")

(setq et (entlast))

(ssadd et ss)

(command "area" "e" "last")

(setq vsize ( /(getvar "VIEWSIZE") 5))

(command "hatch" "SOLID" vsize "0" "l" "")

(setq et (entlast))

(ssadd et ss)

(setq dtcon (/ (getvar "AREA") tl2))

(setq dtl (+ dtcon dtl))

(prompt (strcat "\nComponent area : " (rtos dtcon 2 4)))

(print)

(print)

(setq pt1 (getpoint "\nPick internal point : "))

)

(command "setvar" "OSMODE" oslast)

(command "erase" ss "")

(setq ss nil)

(command "redraw")

; (setq dtl (/ (/ dtl tl2) 2))

; (setq dtl (/ dtl 2))

(print)

(prompt (strcat "\nTotal area : " (rtos dtl 2 4)))

(print)

(setq pt2 (getpoint "\nPoint to write: "))

(if (/= 0 (DXF 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))

(command "text" pt2 "0" (rtos dtl 2 2))

(command "text" pt2 "2" "0" (rtos dtl 2 2))

);if

(princ)

);defun AR

;------------------------------------------------------------------------

(defun c:AR2(/ dtl dtcon pt1 pt2 ss et oslast vsize)

(if (= tl nil) (progn

(setq tl (getreal "\nDrawing scale : "))

; (setq ntl (/ 1000 tl))

; (setq tl2 (* ntl ntl))

)

)

(setq dtl 0)

(setq ss (ssadd))

(setq oslast (getvar "OSMODE"))

(command "osnap" "")

(setq ntl (/ 1000 tl))

(setq tl2 (* ntl ntl))

 

(print)

(print)

(setq pt1 (getpoint "\nPick internal point : "))

(while (/= pt1 nil)

(command "-boundary" pt1 "")

(setq et (entlast))

(ssadd et ss)

(command "area" "e" "last")

(setq vsize ( /(getvar "VIEWSIZE") 5))

(command "hatch" "ANSI31" vsize "0" "last" "")

(setq et (entlast))

(ssadd et ss)

(setq dtcon (/ (getvar "AREA") tl2))

(setq dtl (+ dtcon dtl))

(prompt (strcat "\nComponent area : " (rtos dtcon 2 4)))

(print)

(print)

(setq pt1 (getpoint "\nPick internal point : "))

)

(command "setvar" "OSMODE" oslast)

(command "erase" ss "")

(setq ss nil)

(command "redraw")

; (setq dtl (/ (/ dtl tl2) 2))

(setq dtl (/ dtl 2))

(print)

(prompt (strcat "\nHaft total area : " (rtos dtl 2 4)))

(print)

(setq pt2 (getpoint "\nPoint to write: "))

(if (/= 0 (DXF 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))

(command "text" pt2 "0" (rtos dtl 2 2))

(command "text" pt2 "2" "0" (rtos dtl 2 2))

);if

(princ)

);defun AR2

;-------------------------------------------------------------------------------

(defun C:vd()

(print)

(print)

(print)

(setq last (getvar "OSMODE"))

(command "setvar" "OSMODE" "33")

(command "setvar" "DIMZIN" 0 )

 

(if (= tl nil) (setq tl (getreal "Ty le ban ve : ")))

 

(setq PT1 (getpoint "Diem 1 : "))

; (setq PT2 (getpoint "Diem 2 : "))

; (setq dist1 (distance pt1 pt2))

; (setq ntl (/ 1000 tl))

; (setq dist (/ dist1 ntl))

(setq sum 0)

 

(while (/= pt1 nil)

(setq PT2 (getpoint "Diem 2 : "))

(print)

(setq dist1 (distance pt1 pt2))

(setq ntl (/ 1000 tl))

(setq dist (/ dist1 ntl))

(prompt (strcat "\n Chieu dai doan vua do la " (rtos dist 2 4)))

(print)

(setq sum (+ sum dist))

(setq PT1 (getpoint "Diem 1 : "))

);while

 

(prompt (strcat "\n Tong chieu dai la " (rtos sum 2 4)))

(print)

(command "setvar" "OSMODE" "64")

(setq pt3 (getpoint "Viet vao cho nao ? : "))

;(setq x (+ (car pt3) 2))

;(setq pt3 (list x (cadr pt3)))

(setq sum2 (/ sum 2))

 

(command "text" "S" "2" pt3 "0" (rtos sum2 2 2))

 

(command "setvar" "OSMODE" last)

(princ)

)

 

(prompt "\n Start with AR to calculate area by pick points method")

(prompt "\n Start with AR2 to calculate haft area by pick points method")

(prompt "\n Danh VD de tinh tong chieu dai ")

(prompt "\n This version is used for Nguyen Cong Hoan-Cienco 625 only - 25/05/2007")

(princ)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Ai có cái lisp ghi độ dốc dọc của một đoạn thẳng cho mình xin với. mình muốn tính độ dốc dọc của mặt đường cũ, mà nó nhiều mặt cắt quá mỗi lần tính lại phải đo chiều dài rồi nhân chia ra khổ quá. Ai biết chỉ mình với.

Thank!

Bạn hãy đọc bài viết này : Lisp ghi độ dốc của một đoạn thẳng :http://www.cadviet.com/forum/index.php?sho...205&st=1680

Nếu có gì chưa được hãy post bài lên đây nhé.

 

To "mr duong" : Lỗi này cũng do bạn mà ra cả thôi. Tại sao bạn không nói rõ là bạn có n đường curve và bạn cần kiểm tra điểm bắt dính của Middle Center của Text trên n đường Curve đó. Hình vẽ bạn post bài lên đầu tiên chỉ có 1 curve và yêu cầu kiểm tra điểm bắt dính của Middle Center của Text trên 1 đường Curve đó. Tue_NV đang cố gắng hoàn thiện đoạn Code nhưng chưa thành công. Các bác có gợi ý thêm gì xin góp ý thêm để Tue_NV hoàn thiện đoạn Code : http://www.cadviet.com/forum/index.php?sho...205&st=1860

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
binharch77    163
Untitled_1_9.jpg

có đồng chí nào giúp mình được cái này không :

mình muốn tạo một cái lisp sao cho khi quét các đối tượng line, nếu 2 line vuông góc nhau thì insert block A như hình vẽ (đương nhiên trục block sẽ theo 2 trục của line tạo ra, nếu có 2 line vuông góc nhưng dư ra thì insert block B như hình vẽ.

 

cám ơn các bác nhiều.

mình nghĩ cái này hơn khó đấy.

HELP ME

 

có ai giúp được mình không vậy??? :cheers:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
HELP ME

 

có ai giúp được mình không vậy??? :cheers:

Chào bạn Binharch77,

Như bạn biết, bài toán bạn đặt ra khá phức tạp vì có khá nhiều phương án chọn lựa phải cân nhắc. Hoàn toàn không phải chỉ đơn giản như hình bạn post. Ví dụ khi hai đường thẳng vuông góc với nhau nhưng lại bị xoay đi một góc, hoặc khi hai đường giao nhau tạo thành nút chữ thập chứ không phải chữ T, hoặc hai đường vuông góc nhưng lại không cắt nhau, .....

Do vậy để xử lý được hết các tình huống cần có thời gian phân tích chứ không thể nhanh như bạn muốn được. Hiện tại mình cũng đang thử xem sao nhưng mới chỉ được trong vài trường hợp đơn giản, còn phải kiểm tra lại chứ chưa thể trả lời bạn được. Rất mong bạn bình tĩnh, để mình cố xem sao.

Hy vọng sớm giải quyết được yêu cầu của bạn.

Chúc bạn vui.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
binharch77    163
Chào bạn Binharch77,

Như bạn biết, bài toán bạn đặt ra khá phức tạp vì có khá nhiều phương án chọn lựa phải cân nhắc. Hoàn toàn không phải chỉ đơn giản như hình bạn post. Ví dụ khi hai đường thẳng vuông góc với nhau nhưng lại bị xoay đi một góc, hoặc khi hai đường giao nhau tạo thành nút chữ thập chứ không phải chữ T, hoặc hai đường vuông góc nhưng lại không cắt nhau, .....

Do vậy để xử lý được hết các tình huống cần có thời gian phân tích chứ không thể nhanh như bạn muốn được. Hiện tại mình cũng đang thử xem sao nhưng mới chỉ được trong vài trường hợp đơn giản, còn phải kiểm tra lại chứ chưa thể trả lời bạn được. Rất mong bạn bình tĩnh, để mình cố xem sao.

Hy vọng sớm giải quyết được yêu cầu của bạn.

Chúc bạn vui.

chào bạn, không phải mình cần gấp đâu... hihi, mình cũng đang nghiên cứu lisp,nhưng đến khúc này sao nó vật vã quá. vấn đề được đặt ra để giải quyết một trong những bài toán mà dân xây dựng rất và thường gặp phải.

 

nhưng cảm ơn bạn nhiều vì đã xem vấn đề này.

xong, mình sẽ post cho cadviet 1giải pháp cực kỳ hữu ích cho dân xây dựng mình.

cụng ly nào :cheers:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tdvn    53
chào bạn, không phải mình cần gấp đâu... hihi, mình cũng đang nghiên cứu lisp,nhưng đến khúc này sao nó vật vã quá. vấn đề được đặt ra để giải quyết một trong những bài toán mà dân xây dựng rất và thường gặp phải.

 

nhưng cảm ơn bạn nhiều vì đã xem vấn đề này.

xong, mình sẽ post cho cadviet 1giải pháp cực kỳ hữu ích cho dân xây dựng mình.

cụng ly nào :cheers:

Bạn binharch77 ơi, bạn nói mình thấy khó hiểu quá. Lúc thì bạn nói "nhưng đến khúc này sao nó vật vã", sau đó lại "post cho cadviet 1giải pháp cực kỳ hữu ích". Có nghĩa là bạn đã giải xong bài toán này rồi và muốn post cho anh em xem hay bạn nói đến vấn đề khác. Nếu bạn chưa giải quyết xong thì bạn nên post file lên, vì hình ảnh của bạn đưa lên nhiều nét bị khuất. Thêm nữa, bạn nên đưa ra tất cả những tình huống có thể có để bạn Phamthanhbinh không phải lúng lúng vì không biết sẽ có bao nhiêu tình huống. Và bạn cũng nên nói sơ qua công việc mình làm dẫn đến dùng cái lisp này, và file của bạn lớn cỡ nào, có khoảng bao nhiêu line tham gia. Nếu biết sơ qua về độ lớn dữ liệu, người lập trình dễ chọn nên dùng mô hình nào để lưu trữ dữ liệu ...

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tdvn    53
Bạn hãy đọc bài viết này : Lisp ghi độ dốc của một đoạn thẳng :http://www.cadviet.com/forum/index.php?sho...205&st=1680

Nếu có gì chưa được hãy post bài lên đây nhé.

 

To "mr duong" : Lỗi này cũng do bạn mà ra cả thôi. Tại sao bạn không nói rõ là bạn có n đường curve và bạn cần kiểm tra điểm bắt dính của Middle Center của Text trên n đường Curve đó. Hình vẽ bạn post bài lên đầu tiên chỉ có 1 curve và yêu cầu kiểm tra điểm bắt dính của Middle Center của Text trên 1 đường Curve đó. Tue_NV đang cố gắng hoàn thiện đoạn Code nhưng chưa thành công. Các bác có gợi ý thêm gì xin góp ý thêm để Tue_NV hoàn thiện đoạn Code : http://www.cadviet.com/forum/index.php?sho...205&st=1860

Mình nghĩ bạn nên dùng (ssget "c" p1 p2 '((0 . "LINE,SPLINE ....",

Với p1, p2 đc tính từ Middle Center của Text về 2 phía, mỗi phía 0.2; Nếu không có đối tượng nào thì đánh dấu lỗi, nếu có đối tượng thì có thể kiểm tra khoảng cách (hoặc không) rồi đưa ra kết luận.

Mình nghĩ bạn "mr duong" nên post một file thật phức tạp để làm ví dụ.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
LXD    12

Cho Em xin lỗi.

 

Em có việc ngoài List mà lại nói ở đây. Nhưng đây là nơi Em hay đọc nhất, nên tiện thể luôn.

 

Em vừa có bài bên "Góc tuyển dụng", Bác nào quan tâm mời ghé qua đọc.

 

Thanks các Pro./.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
binharch77    163
Bạn binharch77 ơi, bạn nói mình thấy khó hiểu quá. Lúc thì bạn nói "nhưng đến khúc này sao nó vật vã", sau đó lại "post cho cadviet 1giải pháp cực kỳ hữu ích". Có nghĩa là bạn đã giải xong bài toán này rồi và muốn post cho anh em xem hay bạn nói đến vấn đề khác. Nếu bạn chưa giải quyết xong thì bạn nên post file lên, vì hình ảnh của bạn đưa lên nhiều nét bị khuất. Thêm nữa, bạn nên đưa ra tất cả những tình huống có thể có để bạn Phamthanhbinh không phải lúng lúng vì không biết sẽ có bao nhiêu tình huống. Và bạn cũng nên nói sơ qua công việc mình làm dẫn đến dùng cái lisp này, và file của bạn lớn cỡ nào, có khoảng bao nhiêu line tham gia. Nếu biết sơ qua về độ lớn dữ liệu, người lập trình dễ chọn nên dùng mô hình nào để lưu trữ dữ liệu ...

giải pháp hay + chưa giải quyết được thuật toán = pó tay

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
lelenlau2    0

Xin chào các Bác trên diễn đàn. Em thì không hiểu gì về lisp lắm, nhưng lisp làm việc rất hiệu quả. Em đã lên diễn đàn nhièu lần và thu thập cho mình được nhiều lisp rất hay trên diễn đàn cadviẹt này.

Hôm nay Em lên diễn đàn này là để hỏi về lisp:

Em muốn có một lisp có thể tự động nội suy cao độ trong nova14, trong nova14 có thể nội suy được cao độ bằng lệnh CDTN nhưng nội suy một cách thủ công lâu quá.

Ý của Em là cần có một lisp tự động nội suy được trong nova14 theo ý mình muốn. Ví dụ: Nội suy tại tâm đường tròn, còn các đường tròn này là do mình tạo ra trên nova.

Mong các Bác bàn luận về vấn đề này và giúp Em viết lisp này với. Em xin chân thành cám ơn!

Phai Nova của Em như sau:

http://www.cadviet.com/upfiles/BAN_VE_NOVA..._04_2009bak.rar

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
lelenlau2    0

Xin chào các Bác trên diễn đàn. Em thì không hiểu gì về lisp lắm, nhưng lisp làm việc rất hiệu quả. Em đã lên diễn đàn nhièu lần và thu thập cho mình được nhiều lisp rất hay trên diễn đàn cadviẹt này.

Hôm nay Em lên diễn đàn này là để hỏi về lisp:

Em muốn có một lisp có thể tự động nội suy cao độ trong nova14, trong nova14 có thể nội suy được cao độ bằng lệnh CDTN nhưng nội suy một cách thủ công lâu quá.

Ý của Em là cần có một lisp tự động nội suy được trong nova14 theo ý mình muốn. Ví dụ: Nội suy tại tâm đường tròn, còn các đường tròn này là do mình tạo ra trên nova.

Mong các Bác bàn luận về vấn đề này và giúp Em viết lisp này với. Em xin chân thành cám ơn!

Phai Nova của Em như sau:

http://www.cadviet.com/upfiles/BAN_VE_NOVA...4_2009bak_1.rar

ANH EM TRÊN DIÊN ĐÀN BÀN LUẬN VỀ VẤN ĐỀ NÀY VIẾT GIÙM EM CÁI LISP NHA!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nataca    553
Xin chào các Bác trên diễn đàn. Em thì không hiểu gì về lisp lắm, nhưng lisp làm việc rất hiệu quả. Em đã lên diễn đàn nhièu lần và thu thập cho mình được nhiều lisp rất hay trên diễn đàn cadviẹt này.

Hôm nay Em lên diễn đàn này là để hỏi về lisp:

Em muốn có một lisp có thể tự động nội suy cao độ trong nova14, trong nova14 có thể nội suy được cao độ bằng lệnh CDTN nhưng nội suy một cách thủ công lâu quá.

Ý của Em là cần có một lisp tự động nội suy được trong nova14 theo ý mình muốn. Ví dụ: Nội suy tại tâm đường tròn, còn các đường tròn này là do mình tạo ra trên nova.

Mong các Bác bàn luận về vấn đề này và giúp Em viết lisp này với. Em xin chân thành cám ơn!

Phai Nova của Em như sau:

http://www.cadviet.com/upfiles/BAN_VE_NOVA...4_2009bak_1.rar

ANH EM TRÊN DIÊN ĐÀN BÀN LUẬN VỀ VẤN ĐỀ NÀY VIẾT GIÙM EM CÁI LISP NHA!

Theo mình thì không làm được. Bản thân nội suy cao độ trong Nova nó chỉ hiện kết quả ở dòng command. Nếu bạn muốn nội suy thì phải tự nội suy bằng lisp riêng thôi. Trên diễn đàn đã có lisp này. Bạn tìm kiếm xem.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
lelenlau2    0

Đã có lisp nội suy cao độ rồi hả Bác? Em không biết nó có chính xác như nova không nữa và như Em muốn nó nội suy đúng tâm đường tròn được không? Và nó có tự động nội suy hay mình phải kích từng điểm?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
lelenlau2    0

Các Bác xem vấn đề Em đặt ra thử có làm được không? viết giúp Em cái lisp với vì với một mạng lưới đường ống thật to thì phải nội suy từng điểm thật sự là một cực hình các Bác à! :cheers:

Các Bác hãy bàn luận thử xem có làm được không? Em đang chờ và theo dõi từng ngày trên diễn đàn để xem bàn luận của mọi người đấy.

cám ơn các bác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×