2
12
10
初来乍到
使用道具 举报
15
209
121
初露锋芒
;;; ------------------------------------------------------------------------;;; CreateFlex.lsp v1.1;;;;;; Copyright © January, 2007;;; Timothy G. Spangler;;;;;; Permission to use, copy, modify, and distribute this software;;; for any purpose and without fee is hereby granted, provided;;; that the above copyright notice appears in all copies and;;; that both that copyright notice and the limited warranty and;;; restricted rights notice below appear in all supporting;;; documentation.;;;;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED;;; WARRANTY. ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR;;; PURPOSE AND OF MERCHANTIBILITY ARE HEREBY DISCLAIMED BY THE;;; PROGRAMMER.;;;;;; -----------------------------------------------------------------------;;; ------------ COMMAND LINE FUNCTIONS(defun c:FLEX (/)(FLEX_START));;; ------------ MAIN FUNCTION(defun FLEX_START (/ *error* OldCmdEcho OldOrthoMode OldOsmode OldLunits OldLunits OldClayer OldFillModeActiveDoc Space FlexSize FlexStart TrunkLine EntList EntLayer StartPoint SidePoint ExtenLength LineStartLineEnd LineAngle BlockName FlexEnd);;; Begin Error Handler -------------------------------------------------(defun *error* (MSG) (if (not (member MSG '("Function cancelled" "quit / exit abort"))) (princ (strcat "\n*** Program Error: " (strcase MSG) " ***")) (princ "\n... Program Cancelled ...") ) (while (< 0 (getvar "cmdactive")) (command) ) (FLEX_RESET_ENV));;; End Error Handler ---------------------------------------------------(FLEX_SET_ENV));;; ------------ SETUP FLEXDUCT ENVIRONMENT SUB(defun FLEX_SET_ENV (/);; Set sysetm variable(setq OldCmdEcho (getvar "CMDECHO"))(setq OldOrthoMode (getvar "ORTHOMODE"))(setq OldOsmode (getvar "OSMODE"))(setq OldLunits (getvar "LUNITS"))(setq OldLuPrec (getvar "LUPREC"))(setq OldClayer (getvar "CLAYER"))(setq OldFillMode (getvar "FILLMODE"))(setvar "CMDECHO" 0);; Set undo marker(command "undo" "Begin")(setvar "ORTHOMODE" 0)(setvar "OSMODE" 514)(setvar "LUNITS" 2)(setvar "LUPREC" 4)(setvar "FILLMODE" 0);; Load VLISP funtionality(vl-load-com);; Set Vlisp Environment variables(setq ActiveDoc (vla-get-activedocument (vlax-get-acad-object)))(setq Space (if (= (getvar "cvport") 1) (vla-get-paperspace ActiveDoc) (vla-get-modelspace ActiveDoc) )) ;; Setup layer for centerline(FLEX_CREATE_LAYER "M-HVAC-CNTR" "Mechanical Plan - Ductwork centerline" "CENTER2" "25" "12" "0");; Run flex duct program(FLEX_RUN) );;; ------------ GET USER VARIABLES SUB(defun FLEX_RUN (/);; Get properties from current trunk line(while (null (setq TrunkLine (car(nentsel "\n Select trunk to add flex to: ")))) (princ "\n Duct not selected"))(setq EntList (entget TrunkLine))(setq FlexLayer (cdr (assoc 8 EntList)));; Set flex layer(setvar "CLAYER" FlexLayer);; Set tee properties(if (equal (cdr (assoc 0 EntList)) "LINE") (progn (setq LineStart (cdr (assoc 10 EntList))) (setq LineEnd (cdr (assoc 11 EntList))) (setq LineAngle (angle LineStart LineEnd)) (setq TrunkSize (distance LineStart LineEnd)) (setq FlexStart (polar LineStart LineAngle (/ (distance LineStart LineEnd) 2))) (setq FlexSize TrunkSize) ) (progn (princ "\n Trunk must be a line. ") (FLEX_RUN) ));; Get flex direction and endpoint(setq SidePoint (getpoint FlexStart "\n Define flex direction "))(setq TrunkDirection (FLEX_GET_PERP LineStart LineEnd SidePoint))(setq FlexEnd (polar FlexStart TrunkDirection 3.0))(FLEX_BLOCK FlexSize)(FLEX_CREATE FlexStart EndPoint FlexSize));;; ------------ CREATE FLEXDUCT SUB