美文网首页
用Autolisp和Excel绘制圆法兰

用Autolisp和Excel绘制圆法兰

作者: 怪怪001 | 来源:发表于2019-12-05 07:43 被阅读0次

    当我们在设计管道时,需要绘制圆法兰。我们需要翻出公司的标准图集,然后根据标准图集绘制。现在我们运用Autolisp和Excel解决这个问题。

    步骤一:用户输入

    1. 获取管道直径

    2. 获取圆法兰的视图方向

    3. 获取圆法兰的中心点位置

    (initget "DN80 DN100 DN125 DN150 DN200 DN250 DN300 DN350 DN400 DN450 DN500 DN550 DN600 DN650 DN700 DN750 DN800 DN850 DN900 DN950 DN1000")

    (setq size (getkword "\nEnter Flange Size: <DN80>"))

    (initget "F R FR")

    (setq view (getkword "\nEnter view orient:<F> or <R> or <FR>"))

    (setq pt1 (getpoint "\nEnter center point of the flange: "))

    (if (= size nil) (setq size "DN80"))

    (if (= view nil) (setq view "F"))

    (setq size (strcase size))

    (setq view (strcase view))

    步骤二:数据获取

    1. 根据管径从Excel表格中获得圆法兰对应的内孔、中心孔、外圆和开孔数量

    ;*****************导入Excel应用程序资源***********************************************

    (defun jinn-get-excel-Lib()

      (setq exlib "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\EXCEL.EXE")

      (if exlib

        (vlax-import-type-library 

        :tlb-filename exlib

        :methods-prefix "MX-"

        :properties-prefix "MX-"

        :constants-prefix "MX-"

        )

      )

    )

    ;*****************打开Excel文件************************************

    (defun OpenExcelFile(filename)

      (setq XLobj (vlax-get-or-create-object "Excel.Application"))

      (if (null XLobj) (vl-exit-with-error (princ "\nExcel start fail.")))

      (vla-put-visible XLobj 1)

      (setq wbs (vlax-get-property XLobj "WorkBooks"))

      (setq wb (vlax-invoke-method wbs "open" filename))

      (if (null wb) (vl-exit-with-error (princ "\nFile is not exist.")))

    )

    ;***************激活工作表******************************************

    (defun ActivateSheetName(sheetname)

      (setq shs (vlax-get-property wb "Sheets"))

      (setq shtCircleFlange (vlax-get-property shs "Item" sheetname))

      (vlax-invoke-method shtCircleFlange "Activate")

    )

    ;****************取得指定的单元格对象*******************************

    (defun Get_XL_Cell(wkst row col)

      (vlax-variant-value (MX-Get-Item (MX-Get-Cells wkst) row col))

    )

    ;****************读取单元格数据************************************

    (defun Get_XL_Cell_value(wkst row col)

      (vlax-variant-value (MX-get-value (Get_XL_Cell wkst row col)))

    )

    ;***************写入单元格数据*************************************

    (defun Put_XL_Cell_value(wkst row col strValue)

      (vlax-put-property (Get_XL_Cell wkst row col) "Value2" strValue)

    )

    ;*************** 根据管径从Excel表格中获得圆法兰对应的内孔、中心孔、外圆和开孔数量

    (defun xl-circleFlange(size view)

      (vl-load-com)

      (setq filename "D:\\Autocad\\StandardPart.xlsx")

      (if (null MX-acos) (jinn-get-excel-Lib))

      (OpenExcelFile filename)

      (ActivateSheetName "CircleFlange")

      (setq row1 2)

      (repeat 21

        ;(princ row1)

        (setq strSize (Get_XL_Cell_value shtCircleFlange row1 1))

        ;(princ strSize)

        ;(princ "\n")

        (if (= size (Get_XL_Cell_value shtCircleFlange row1 1))

          (progn

            (setq id (Get_XL_Cell_value shtCircleFlange row1 2))

            (setq cd (Get_XL_Cell_value shtCircleFlange row1 3))

            (setq od (Get_XL_Cell_value shtCircleFlange row1 4))

            (setq hQty (Get_XL_Cell_value shtCircleFlange row1 5))

            (if (= view "F") (Flange_Front id cd od hQty))

            (if (= view "R") (Flange_Right id cd od))

            (if (= view "FR") (Flange id cd od hQty))        

            ;(exit)

          )      

        )

        (setq row1 (+ row1 1))

      )

      (vlax-invoke-method wbs "close")

      (prin1)

    )

    步骤三:绘制图形

    1.根据视图方向和中心点的位置绘制图形

    ;法兰主视图绘制程序

    ;id-内圆直径

    ;od-外圆直径

    ;cd-中心圆直径

    ;hQty-法兰开孔数量

    (defun Flange_Front(id cd od hQty)

      (setq pt2 (polar pt1 0 (* (/ od 2.0) 1.05)))

      (setq pt3 (polar pt1 pi (* (/ od 2.0) 1.05)))

      (setq pt4 (polar pt1 (/ pi 2) (* (/ od 2.0) 1.05)))

      (setq pt5 (polar pt1 (* pi 1.5) (* (/ od 2.0) 1.05)))

      (setq pt6 (polar pt1 (/ pi hQty) (/ cd 2.0)))

      (setq pt7 (polar pt6 (/ pi hQty) 10))

      (setq pt8 (polar pt6 (+ (/ pi hQty) pi) 10))

      (setq pt9 (polar pt6 (+ (/ pi hQty) (* pi 0.5)) 10))

      (setq pt10 (polar pt6 (+ (/ pi hQty) (* pi 1.5)) 10))

      (command "-amlayer" "O" "CON1")

      (command "Circle" pt1 (/ id 2.0))

      (command "Circle" pt1 (/ od 2.0))

      (command "Circle" pt6 7)

      (setq en1 (entlast))

      (command "-amlayer" "O" "CENW")

      (command "Circle" pt1 (/ cd 2.0))

      (command "Line" pt2 pt3 "")

      (command "Line" pt4 pt5 "")

      (command "Line" pt7 pt8 "")

      (setq en2 (entlast))

      (command "Line" pt9 pt10 "")

      (setq en3 (entlast))

      (command "-array" en1 en2 en3 "" "p" pt1 hQty 360 "y")

      (PRINC)

    )

    ;法兰右视图绘制程序

    (defun Flange_Right(id cd od)

      (setq pt2 (polar pt1 0 (* (/ od 2) 1.5)))

      (setq pt3 (polar pt2 (/ pi 2) (/ od 2.0)))

      (setq pt4 (polar pt3 0 8))

      (setq pt5 (polar pt4 (* pi 1.5) od))

      (setq pt6 (polar pt5 pi 8))

      (setq pt7 (polar pt2 pi 3))

      (setq pt8 (polar pt2 0 11))

      (setq pt9 (polar pt2 (/ pi 2) (/ id 2.0)))

      (setq pt10 (polar pt9 0 8))

      (setq pt11 (polar pt2 (* pi 1.5) (/ id 2.0)))

      (setq pt12 (polar pt11 0 8))

      (setq pt13 (polar pt2 (/ pi 2) (/ cd 2.0)))

      (setq pt14 (polar pt13 pi 3))

      (setq pt15 (polar pt13 0 11))

      (setq pt16 (polar pt2 (* pi 1.5) (/ cd 2.0)))

      (setq pt17 (polar pt16 pi 3))

      (setq pt18 (polar pt16 0 11))

      (command "-amlayer" "O" "CON1")

      (command "PLine" pt3 pt4 pt5 pt6 pt3 "")

      (command "-amlayer" "O" "HIDW")

      (command "Line" pt9 pt10 "")

      (command "Line" pt11 pt12 "")

      (command "-amlayer" "O" "CENW")

      (command "Line" pt7 pt8 "")

      (command "Line" pt14 pt15 "")

      (command "Line" pt17 pt18 "")

    )

    ;法兰绘制主视图和右视图程序

    (defun Flange(id cd od hQty)

      (Flange_Front id cd od hQty)

      (Flange_Right id cd od)

    )

    把上面所有的代码合在一起形成一个lsp文件,用cad加载就可以使用。

    如有问题,请在下面的评论区告诉我。

    相关文章

      网友评论

          本文标题:用Autolisp和Excel绘制圆法兰

          本文链接:https://www.haomeiwen.com/subject/uiwrgctx.html