Đến nội dung


Hình ảnh
- - - - -

Nhờ các bác lisp tính diện tích, chu vi, khối lượng của một tiết diện


  • Please log in to reply
7 replies to this topic

#1 hatieu

hatieu

    biết vẽ pline

  • Advance Member
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 11 November 2008 - 11:41 AM

Dưới đây là bản vẽ minh hoạ của em, em có một tiết diện nhôm cần điền những thông số cần thiết như trên hình. Em kiếm đưọc trên diễn đàn lisp GA (tính diện tích và chu vi) nhưng nó không có phần tính khối lượng. Bác nào có thể giúp em viết thêm phần tính khối lượng cho em được không.
Hình đã gửi
  • 0
Công ty cổ phần đầu tư và xây dựng AGA
Chuyên tư vấn, cung cấp, thi công hệ vách dựng nhôm kính khổ lớn, cửa nhôm kính,
kính cường lực, vách ngăn, lan can, cầu thang kinh, lam nhôm chăn nắng.
Hot: 0984.985.119

#2 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 11 November 2008 - 12:14 PM

Bạn hãy cho đường link của lisp GA đi.
Phần khối lượng thì bạn sẽ nhập khối lượng riêng của vật liệu khi được hỏi hay là viết "chết" trong lisp ?
  • 0

#3 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 11 November 2008 - 04:13 PM

Bạn hãy cho đường link của lisp GA đi.
Phần khối lượng thì bạn sẽ nhập khối lượng riêng của vật liệu khi được hỏi hay là viết "chết" trong lisp ?

Từ 1 tiết diện ngay cả khi có khối lượng riêng của vật liệu bạn vẫn không thể tính ra trọng lượng được. Muốn tính trọng lượng thì cần có thể tích nên dử liệu đầu vào thiếu cả phần chiều dài của vật thể nửa. Đề nghị bạn hatieu làm rỏ 2 vấn đề trên thì mới giải bài toán của bạn được.
  • 0

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


#4 hatieu

hatieu

    biết vẽ pline

  • Advance Member
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 12 November 2008 - 08:26 AM

Từ 1 tiết diện ngay cả khi có khối lượng riêng của vật liệu bạn vẫn không thể tính ra trọng lượng được. Muốn tính trọng lượng thì cần có thể tích nên dử liệu đầu vào thiếu cả phần chiều dài của vật thể nửa. Đề nghị bạn hatieu làm rỏ 2 vấn đề trên thì mới giải bài toán của bạn được.


Đây là lisp GA của em sưu tầm được

Thế này nha, dựa trên cơ sở của lisp GA có sẵn rồi, các bác viết cho em thêm phần tính weight theo công thức weight= (areax2,7)/1000 đơn vị là kg/m (khối lượng tính cho một m) ok và cho in ra kết quả luôn.
Bác cứ tính theo công thức của em đưa ra là được em cảm ơn?
  • 0
Công ty cổ phần đầu tư và xây dựng AGA
Chuyên tư vấn, cung cấp, thi công hệ vách dựng nhôm kính khổ lớn, cửa nhôm kính,
kính cường lực, vách ngăn, lan can, cầu thang kinh, lam nhôm chăn nắng.
Hot: 0984.985.119

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 November 2008 - 11:09 AM

Đây là lisp GA của em sưu tầm được

Thế này nha, dựa trên cơ sở của lisp GA có sẵn rồi, các bác viết cho em thêm phần tính weight theo công thức weight= (areax2,7)/1000 đơn vị là kg/m (khối lượng tính cho một m) ok và cho in ra kết quả luôn.
Bác cứ tính theo công thức của em đưa ra là được em cảm ơn?

Đây là lisp của bạn mình làm theo ý bạn rồi nè :
(defun C:GA()

;;;--- Turn the command echo off
(setvar "cmdecho" 0)

;;;--- Inform the user of the plot number
(princ "\n Starting Number is ")(princ (getvar "useri1"))
(princ ". To change this, reset the system variable USERI1")

;;;--- Get the interior selection point
(setq pt(getpoint "\n Select Interior of Area : "))

;;;--- Create a hatch pattern in the area
(command "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")

;;;--- If the hatch pattern was created...
(if(setq en(entlast))
(progn

;;;--- Get the dxf group codes from the hatch entity
(setq enlist(entget en))

;;;--- Build a list to eventually make a polyline entity
(setq plist(list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")))

;;;--- Set up an empty list, a flag, and a counter
(setq newList(list) flag 0 cntr 0)

;;;--- Cycle through every item in the hatch's dxf group codes
(while(< cntr (length enlist))

;;;--- Get the first item
(setq a(nth cntr enlist))

;;;--- If it is the first group code 10, increment the flag and proceed
(if (= (car a) 10)(setq flag(+ flag 1)))

;;;--- Skip the first group code 10 in the entity list
(if (> flag 1)

;;;--- If the dxf group code number is 10, then...
(if(= (car a) 10)
(progn

;;;--- Start a temporary list holding the dxf group codes for a VERTEX entity
;;; Add codes 0 and 10
(setq tmp(list (cons 0 "VERTEX") a))

;;;--- In case there are bulges, look for codes 42 and 50 while the next code isn't
;;; a group code 10 and there are more items in the dxf group codes to look for.
(while(and (B) 42)(= (car B) 50))

;;;--- Add it to the temporary list
(setq tmp(append tmp (list B)))

)
)

;;;--- Add the temporary list to the new list
(setq newList(append newList (list tmp)))
)
)
)

;;;--- Increment the counter to get the next group 10 code
(setq cntr(+ cntr 1))
)

;;;--- In order to close the polyline, we will need to save the start point
;;; and use it later as the end point of the polyline
(setq lastPt(car newList))

;;;--- Strip off the last point, which is the point selected during the hatch command
(setq newList(reverse(cdr(reverse newList))))

;;;--- Delete the hatch pattern
(entdel en)

;;;--- Start creating the polyline entity
(entmake
(list
(cons 0 "POLYLINE") ; Object type
(cons 66 1) ; Vertices follow
)
)

;;;--- Add each vertex to the polyline entity...
(foreach a newList
(entmake a )
)

;;;--- Close the polyline by adding the first point
(entmake lastPt)

;;;--- Finally add the SEQEND to create the polyline
(entmake (list (cons 0 "SEQEND")))

;;;--- Get the entity name of the polyline just created
(setq en(entlast))

;;;--- Use the area command on the polyline
(command "area" "Object" en)

;;;--- Get the Area of the Polyline
(setq myArea(getvar "area"))



;;;--- NOTE: Here would be a good place to do any manipulation of the area.
;;; Such as converting it to square feet or acres.


;;;--- Get the perimeter of the polyline
(setq myPerim(getvar "perimeter"))


;;;--- NOTE: Here would be a good place to do any manipulation of the perimeter.
;;; Such as converting to feet or meters.


;;;--- Get the plot number to use from the USERI1 system variable.
(setq myNum(getvar "useri1"))

;;;--- Don't start with zero, which is Autocad's default
(if(= myNum 0)(setq myNum 1))

;;;--- Increment the counter before saving for next time
(setvar "useri1" (+ myNum 1))

;;;--- Convert the number to a string
(setq myNum(itoa myNum))

;;;--- Grab the current textsize
(setq tht(getvar "textsize"))

;;;--- Get the current text style
(setq csty(getvar "textstyle"))

;;;--- See if the text style has a preset height
(if(= 0 (cdr(assoc 40(tblsearch "style" csty))))
(progn

;;;--- Insert the text with a height parameter
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" Pt tht 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) tht 0 (strcat "AREA=" (rtos kl 2 4)))
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) tht 0 (strcat "PERIMETER=" (rtos myPerim)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) 0 (strcat "Weight=" (rtos kl 2 4)))
)
(progn

;;;--- Else, Insert the text without a height parameter
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" Pt 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) 0 (strcat "AREA=" (rtos myarea 2 4)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) 0 (strcat "PERIMETER=" (rtos myPerim)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) 0 (strcat "Weight=" (rtos kl 2 4)))
)
)

;;;--- Delete the polyline entity
(entdel en)
)
(alert "Hatch pattern could not be created. Make sure the area is enclosed.")
)

;;;--- Turn the command echo back on
(setvar "cmdecho" 1)

;;;--- Suppress the last echo for a clean exit
(princ)
)
Bạn chạy thử nhé.
  • 0

#6 hatieu

hatieu

    biết vẽ pline

  • Advance Member
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 12 November 2008 - 02:48 PM

Đây là cái bạn cần:

;;--- GA.lsp   -   GetArea
;;;
;;;
;;;--- Select a spot on the interior of an enclosed area and this program
;;; will write the Plot Number, Area, and Perimeter on that spot.
;;;
;;;
;;;--- This program uses the -bhatch command to create a hatch over the area.
;;; It then gets a list of all of the control points for the hatch and
;;; creates a polyline boundary (using the ENTMAKE) function. The area
;;; command is used on the polyline to find the area and perimeter.
;;; No islands are taken into consideration.
;;;
;;;
;;;--- Created on 8/6/04
;;; Copyright 2004 by JefferyPSanders.com
;;; All rights reserved.
;;;
;;;
;;;--- Program is issued as is without gauranties of the accuracy nor of
;;; damages resulting from use of the program.
;;;
;;;
;;;--- Tested with AutoCAD Release 14 and 2004
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;; ;;;
;;; 888 888 888 8888888 8888 888 ;;;
;;; 8888 8888 88888 888 88888 888 ;;;
;;; 88888 88888 888 888 888 888888 888 ;;;
;;; 888888 888888 888 888 888 888 888888 ;;;
;;; 888 88888 888 88888888888 888 888 88888 ;;;
;;; 888 888 888 888 888 8888888 888 8888 ;;;
;;; ;;;
;;; ;;;
;;; 888 888888888 888888888 ;;;
;;; 88888 888 888 888 888 ;;;
;;; 888 888 888 888 888 888 ;;;
;;; 888 888 888888888 888888888 ;;;
;;; 88888888888 888 888 ;;;
;;; 888 888 888 888 ;;;
;;; ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun C:GA()

;;;--- Turn the command echo off
(setvar "cmdecho" 0)

;;;--- Inform the user of the plot number
(princ "\n Starting Number is ")(princ (getvar "useri1"))
(princ ". To change this, reset the system variable USERI1")

;;;--- Get the interior selection point
(setq pt(getpoint "\n Select Interior of Area : "))

;;;--- Create a hatch pattern in the area
(command "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")

;;;--- If the hatch pattern was created...
(if(setq en(entlast))
(progn

;;;--- Get the dxf group codes from the hatch entity
(setq enlist(entget en))

;;;--- Build a list to eventually make a polyline entity
(setq plist(list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")))

;;;--- Set up an empty list, a flag, and a counter
(setq newList(list) flag 0 cntr 0)

;;;--- Cycle through every item in the hatch's dxf group codes
(while(< cntr (length enlist))

;;;--- Get the first item
(setq a(nth cntr enlist))

;;;--- If it is the first group code 10, increment the flag and proceed
(if (= (car a) 10)(setq flag(+ flag 1)))

;;;--- Skip the first group code 10 in the entity list
(if (> flag 1)

;;;--- If the dxf group code number is 10, then...
(if(= (car a) 10)
(progn

;;;--- Start a temporary list holding the dxf group codes for a VERTEX entity
;;; Add codes 0 and 10
(setq tmp(list (cons 0 "VERTEX") a))

;;;--- In case there are bulges, look for codes 42 and 50 while the next code isn't
;;; a group code 10 and there are more items in the dxf group codes to look for.
(while(and (< cntr (length enlist))(/= (car (nth (+ cntr 1) enlist)) 10))

;;;--- Increment the counter to get to the 42 and 50 codes
(setq cntr(+ cntr 1))

;;;--- Get the next code
(setq b(nth cntr enlist))

;;;--- If it is a 42 or 50 code...
(if(or (= (car b) 42)(= (car b) 50))

;;;--- Add it to the temporary list
(setq tmp(append tmp (list b)))

)
)

;;;--- Add the temporary list to the new list
(setq newList(append newList (list tmp)))
)
)
)

;;;--- Increment the counter to get the next group 10 code
(setq cntr(+ cntr 1))
)

;;;--- In order to close the polyline, we will need to save the start point
;;; and use it later as the end point of the polyline
(setq lastPt(car newList))

;;;--- Strip off the last point, which is the point selected during the hatch command
(setq newList(reverse(cdr(reverse newList))))

;;;--- Delete the hatch pattern
(entdel en)

;;;--- Start creating the polyline entity
(entmake
(list
(cons 0 "POLYLINE") ; Object type
(cons 66 1) ; Vertices follow
)
)

;;;--- Add each vertex to the polyline entity...
(foreach a newList
(entmake a )
)

;;;--- Close the polyline by adding the first point
(entmake lastPt)

;;;--- Finally add the SEQEND to create the polyline
(entmake (list (cons 0 "SEQEND")))

;;;--- Get the entity name of the polyline just created
(setq en(entlast))

;;;--- Use the area command on the polyline
(command "area" "Object" en)

;;;--- Get the Area of the Polyline
(setq myArea(getvar "area"))
;;;--- NOTE: Here would be a good place to do any manipulation of the area.
;;; Such as converting it to square feet or acres.
;;;--- Get the perimeter of the polyline
(setq myPerim (getvar "perimeter"))

;;;--- Get the weight of the polyline
(setq myWeigh (/ (* myArea 2.7) 1000))

;;;--- NOTE: Here would be a good place to do any manipulation of the perimeter.
;;; Such as converting to feet or meters.


;;;--- Get the plot number to use from the USERI1 system variable.
(setq myNum(getvar "useri1"))

;;;--- Don't start with zero, which is Autocad's default
(if(= myNum 0)(setq myNum 1))

;;;--- Increment the counter before saving for next time
(setvar "useri1" (+ myNum 1))

;;;--- Convert the number to a string
(setq myNum(itoa myNum))

;;;--- Grab the current textsize
(setq tht(getvar "textsize"))

;;;--- Get the current text style
(setq csty(getvar "textstyle"))

;;;--- See if the text style has a preset height
(if(= 0 (cdr(assoc 40(tblsearch "style" csty))))
(progn

;;;--- Insert the text with a height parameter
(command "text" "Justify" "Center" Pt tht 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) tht 0 (strcat "AREA=" (rtos myArea 2 2) "(m2)"))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) tht 0 (strcat "PERIMETER=" (rtos myPerim 2 2) "(m)"))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) tht 0 (strcat "WIEGHT=" (rtos myWeigh 2 3) "(kg/m)"))
)
(progn

;;;--- Else, Insert the text without a height parameter
(command "text" "Justify" "Center" Pt 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) 0 (strcat "AREA=" (rtos myArea 2 2) "(m2)"))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) 0 (strcat "PERIMETER=" (rtos myPerim 2 2) "(m)"))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) tht 0 (strcat "WIEGHT=" (rtos myWeigh 2 3) "(kg/m)"))

)
)

;;;--- Delete the polyline entity
(entdel en)
)
(alert "Hatch pattern could not be created. Make sure the area is enclosed.")
)

;;;--- Turn the command echo back on
(setvar "cmdecho" 1)

;;;--- Suppress the last echo for a clean exit
(princ)
)


Cảm ơn anh, nhưng cái của anh bị lỗi phần tính weight kết quả toàn bằng 0, mà có lúc làm tiết diện của em bị biến dạng
Đây là tiết diện của em anh thử xem. Anh xem lại và sửa lỗi hộ em nha.
Tiet dien
  • 0
Công ty cổ phần đầu tư và xây dựng AGA
Chuyên tư vấn, cung cấp, thi công hệ vách dựng nhôm kính khổ lớn, cửa nhôm kính,
kính cường lực, vách ngăn, lan can, cầu thang kinh, lam nhôm chăn nắng.
Hot: 0984.985.119

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 12 November 2008 - 04:10 PM

Cảm ơn anh, nhưng cái của anh bị lỗi phần tính weight kết quả toàn bằng 0, mà có lúc làm tiết diện của em bị biến dạng
Đây là tiết diện của em anh thử xem. Anh xem lại và sửa lỗi hộ em nha.
Tiet dien

Mình check lại rồi. Bạn thử nhé:
;;;--- GA.lsp - GetArea
;;;
;;;
;;;--- Select a spot on the interior of an enclosed area and this program
;;; will write the Plot Number, Area, and Perimeter on that spot.
;;;
;;;
;;;--- This program uses the -bhatch command to create a hatch over the area.
;;; It then gets a list of all of the control points for the hatch and
;;; creates a polyline boundary (using the ENTMAKE) function. The area
;;; command is used on the polyline to find the area and perimeter.
;;; No islands are taken into consideration.
;;;
;;;
;;;--- Created on 8/6/04
;;; Copyright 2004 by JefferyPSanders.com
;;; All rights reserved.
;;;
;;;
;;;--- Program is issued as is without gauranties of the accuracy nor of
;;; damages resulting from use of the program.
;;;
;;;
;;;--- Tested with AutoCAD Release 14 and 2004



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; ;;;
;;; 888 888 888 8888888 8888 888 ;;;
;;; 8888 8888 88888 888 88888 888 ;;;
;;; 88888 88888 888 888 888 888888 888 ;;;
;;; 888888 888888 888 888 888 888 888888 ;;;
;;; 888 88888 888 88888888888 888 888 88888 ;;;
;;; 888 888 888 888 888 8888888 888 8888 ;;;
;;; ;;;
;;; ;;;
;;; 888 888888888 888888888 ;;;
;;; 88888 888 888 888 888 ;;;
;;; 888 888 888 888 888 888 ;;;
;;; 888 888 888888888 888888888 ;;;
;;; 88888888888 888 888 ;;;
;;; 888 888 888 888 ;;;
;;; ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun C:GA()

;;;--- Turn the command echo off
(setvar "cmdecho" 0)

;;;--- Inform the user of the plot number
(princ "\n Starting Number is ")(princ (getvar "useri1"))
(princ ". To change this, reset the system variable USERI1")

;;;--- Get the interior selection point
(setq pt(getpoint "\n Select Interior of Area : "))

;;;--- Create a hatch pattern in the area
(command "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")

;;;--- If the hatch pattern was created...
(if(setq en(entlast))
(progn

;;;--- Get the dxf group codes from the hatch entity
(setq enlist(entget en))

;;;--- Build a list to eventually make a polyline entity
(setq plist(list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")))

;;;--- Set up an empty list, a flag, and a counter
(setq newList(list) flag 0 cntr 0)

;;;--- Cycle through every item in the hatch's dxf group codes
(while(< cntr (length enlist))

;;;--- Get the first item
(setq a(nth cntr enlist))

;;;--- If it is the first group code 10, increment the flag and proceed
(if (= (car a) 10)(setq flag(+ flag 1)))

;;;--- Skip the first group code 10 in the entity list
(if (> flag 1)

;;;--- If the dxf group code number is 10, then...
(if(= (car a) 10)
(progn

;;;--- Start a temporary list holding the dxf group codes for a VERTEX entity
;;; Add codes 0 and 10
(setq tmp(list (cons 0 "VERTEX") a))

;;;--- In case there are bulges, look for codes 42 and 50 while the next code isn't
;;; a group code 10 and there are more items in the dxf group codes to look for.
(while(and (< cntr (length enlist))(/= (car (nth (+ cntr 1) enlist)) 10))

;;;--- Increment the counter to get to the 42 and 50 codes
(setq cntr(+ cntr 1))

;;;--- Get the next code
(setq b(nth cntr enlist))

;;;--- If it is a 42 or 50 code...
(if(or (= (car b) 42)(= (car b) 50))

;;;--- Add it to the temporary list
(setq tmp(append tmp (list b)))

)
)

;;;--- Add the temporary list to the new list
(setq newList(append newList (list tmp)))
)
)
)

;;;--- Increment the counter to get the next group 10 code
(setq cntr(+ cntr 1))
)

;;;--- In order to close the polyline, we will need to save the start point
;;; and use it later as the end point of the polyline
(setq lastPt(car newList))

;;;--- Strip off the last point, which is the point selected during the hatch command
(setq newList(reverse(cdr(reverse newList))))

;;;--- Delete the hatch pattern
(entdel en)

;;;--- Start creating the polyline entity
(entmake
(list
(cons 0 "POLYLINE") ; Object type
(cons 66 1) ; Vertices follow
)
)

;;;--- Add each vertex to the polyline entity...
(foreach a newList
(entmake a )
)

;;;--- Close the polyline by adding the first point
(entmake lastPt)

;;;--- Finally add the SEQEND to create the polyline
(entmake (list (cons 0 "SEQEND")))

;;;--- Get the entity name of the polyline just created
(setq en(entlast))

;;;--- Use the area command on the polyline
(command "area" "Object" en)

;;;--- Get the Area of the Polyline
(setq myArea(getvar "area"))



;;;--- NOTE: Here would be a good place to do any manipulation of the area.
;;; Such as converting it to square feet or acres.


;;;--- Get the perimeter of the polyline
(setq myPerim(getvar "perimeter"))


;;;--- NOTE: Here would be a good place to do any manipulation of the perimeter.
;;; Such as converting to feet or meters.


;;;--- Get the plot number to use from the USERI1 system variable.
(setq myNum(getvar "useri1"))

;;;--- Don't start with zero, which is Autocad's default
(if(= myNum 0)(setq myNum 1))

;;;--- Increment the counter before saving for next time
(setvar "useri1" (+ myNum 1))

;;;--- Convert the number to a string
(setq myNum(itoa myNum))

;;;--- Grab the current textsize
(setq tht(getvar "textsize"))

;;;--- Get the current text style
(setq csty(getvar "textstyle"))

;;;--- See if the text style has a preset height
(if(= 0 (cdr(assoc 40(tblsearch "style" csty))))
(progn

;;;--- Insert the text with a height parameter
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" Pt tht 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) tht 0 (strcat "AREA=" (rtos kl 2 4)))
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) tht 0 (strcat "PERIMETER=" (rtos myPerim)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) tht 0 (strcat "Weight=" (rtos kl 2 4)))
)
(progn

;;;--- Else, Insert the text without a height parameter
(setq kl (/ (* myArea 2.7) 1000))
(command "text" "Justify" "Center" Pt 0 myNum)
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* tht 1.5)) 0 (strcat "AREA=" (rtos myarea 2 4)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 2.0(* tht 1.5))) 0 (strcat "PERIMETER=" (rtos myPerim)))
(command "text" "Justify" "Center" (polar Pt (* pi 1.5) (* 3.0(* tht 1.5))) 0 (strcat "Weight=" (rtos kl 2 4)))
)
)

;;;--- Delete the polyline entity
(entdel en)
)
(alert "Hatch pattern could not be created. Make sure the area is enclosed.")
)

;;;--- Turn the command echo back on
(setvar "cmdecho" 1)

;;;--- Suppress the last echo for a clean exit
(princ)
)

  • 0

#8 hatieu

hatieu

    biết vẽ pline

  • Advance Member
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 13 November 2008 - 08:14 AM

Đây là lisp của bạn mình làm theo ý bạn rồi nè :
Gửi Tue_nv, cảm ơn bạn đã nhiệt tình giúp mình. Mình đã thử cái lisp của bạn nhưng khi load lisp nó bị lỗi
Hình đã gửi
Và khi chạy thử thì Cad của em bị đơ luôn không hoạt động được
Bạn xem lại cho mình xem mình dùng cad 2008.


Còn cái lisp của anh philipdn em đã thử nhưng vẫn không được nó báo kết quả vẫn không đúng. Hôm qua em thử thì weight= 0, nhưng hôm nay thì kết quả lại khác kể cả diện tích cũng bị sai. Nhân tiện bác xem lại hộ em.
Hình đã gửi
  • 0
Công ty cổ phần đầu tư và xây dựng AGA
Chuyên tư vấn, cung cấp, thi công hệ vách dựng nhôm kính khổ lớn, cửa nhôm kính,
kính cường lực, vách ngăn, lan can, cầu thang kinh, lam nhôm chăn nắng.
Hot: 0984.985.119