Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hatieu

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

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

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.

SDGFSDGDSVCXVXCVXC.jpg

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

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 ?

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
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.

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
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?

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
Đâ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(
  ;;;--- 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é.

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

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

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

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

loi_6.jpg

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.

loi2.jpg

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×