Vatsal Posted Monday at 07:55 AM Posted Monday at 07:55 AM I am new to automating drawings in Autocad. I am using win32com to access autocad. I am using AddDimAligned function to add dimension but having trouble placing the text above the dimension line as the error is saying can not be set. Here is my code - class AutoCAD: def __init__(self): try: self.acad = win32com.client.Dispatch("AutoCAD.Application") time.sleep(2) self.acad.Visible = True self.doc = self.acad.ActiveDocument self.modelspace = self.doc.ModelSpace time.sleep(2) self.linetypes = self.doc.Linetypes self.layers = self.doc.Layers try: self.dimensionstyle = self.doc.DimStyles.Item("DIM") except Exception as e: print(f"Error: DIM dimension style not found. Creating it... {e}") # Create a new dimension style 'DIM' if it doesn't exist self.dimensionstyle = self.doc.DimStyles.Add("DIM") print("DIM dimension style created.") if self.modelspace.Count > 0: self.open_new_drawing() except Exception as e: raise AutoCADError(f"Error initializing AutoCAD: {e}") def add_dimension(self, dimension): try: distance_mm = dimension.convert_to_mm() dimension_obj = None if dimension.dimension_type == DimensionType.ALIGNED: dimension_obj = self.modelspace.AddDimAligned(dimension.start_point.to_variant(), dimension.end_point.to_variant(), dimension.text_point.to_variant()) elif dimension.dimension_type == DimensionType.LINEAR: dimension_obj = self.modelspace.AddDimLinear(dimension.start_point.to_variant(), dimension.end_point.to_variant(), dimension.text_point.to_variant()) elif dimension.dimension_type == DimensionType.ANGULAR: dimension_obj = self.modelspace.AddDimAngular(dimension.start_point.to_variant(), dimension.end_point.to_variant(), dimension.text_point.to_variant()) elif dimension.dimension_type == DimensionType.RADIAL: dimension_obj = self.modelspace.AddDimRadial(dimension.start_point.to_variant(), dimension.end_point.to_variant(), dimension.text_point.to_variant()) elif dimension.dimension_type == DimensionType.DIAMETER: dimension_obj = self.modelspace.AddDimDiameter(dimension.start_point.to_variant(), dimension.end_point.to_variant(), dimension.text_point.to_variant()) dimension_obj.TextOverride = f"{distance_mm:.0f}" # Set the dimension text to the calculated distance # self.dimensionstyle.TextAlign = 3 # 3 = centered text # self.dimensionstyle.TextOffset = 5 return dimension_obj except Exception as e: raise AutoCADError(f"Error adding dimension: {e}") def edit_dim_properties(self, dim,height=0.1,gap=0.02, units_precision=2, arrow_head_size=0.1,text_offset=5 ): try: dim.TextHeight = height dim.TextGap = gap dim.PrimaryUnitsPrecision = units_precision dim.ArrowheadSize = arrow_head_size dim.TextOffset = text_offset except Exception as e: raise AutoCADError(f"Error editing dimension properties: {e}") Quote
BIGAL Posted Monday at 09:22 PM Posted Monday at 09:22 PM You can definitely move the text in a dim. For above text maybe look at DIMTAD variable. This is lisp but look at how many variables you can set for a dim. (entmake (list (cons 0 "DIMSTYLE") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbDimStyleTableRecord") (cons 2 Dim_Name) ;Dim style name (cons 70 0) ; Standard flag (cons 3 " [m]"); DIMPOST (cons 4 ""); DIMAPOST (cons 5 DIMBLK-Name) ;DIMBLK-Name of block instead of default arrowhead (cons 6 DIMBLK-Name);(cons 6 "ClosedFilled"); DIMBLK1 (cons 7 "Standard") ; text style name (cons 170 0) ;DIMALT-turns off alternate units (cons 40 dimscale) ;DIMSCALE-sets the overall scale factor applied to all dimensions (cons 41 Arrow_Size) ;DIMASZ-sets the size of the arrow/tick (cons 42 Extension_Line_Origin_Offset); DIMEXO (cons 43 Dimension_Line_Spacing); DIMDLI (cons 44 Extension_Above_Dimension_Line) ;DIMEXE-specifies how far to extend the extention line beyound the dim line (cons 45 0.0); DIMRND (cons 46 0) ;DIMDLE-sets the distance the dimension line extends beyond the extension line (cons 47 0.0); DIMTP (cons 48 0.0); DIMTM (cons 71 0); DIMTOL (cons 72 0); DIMLIM (cons 73 0) ;DIMTIH-controls the position of dimension text inside extention lines ;METTE IL TESTO DI QUOTA ORIZZONTALE (cons 74 0) ;DIMTOH-controls the position of dimension text outside extention lines (cons 75 1); DIMSE1 ;1 sopprime la linea di estensione, 0 la lascia (cons 76 1); DIMSE2 ;1 sopprime la linea di estensione, 0 la lascia (cons 77 1) ;DIMTAD-controls the vertical position of text in relation to the dim line (cons 78 3) ;DIMZIN-controls the suppression of zeros (cons 79 1); DIMAZIN (cons 140 Text_Height) ;DIMTXT-specifies the height of the text in the dim (cons 141 Center_Mark_Size); DIMCEN (cons 142 0.0); DIMTSZ (cons 143 0.5) ;DIMALTF-controls the scale factor for alt. units (cons 144 quote_scale); DIMLFAC ;scala di quota (cons 145 0.0); DIMTVP (cons 146 0.64); DIMTFAC (cons 147 Gap_From_dimension_Line_to_Text) ;DIMGAP-sets the distance from around the dim text (cons 170 0); DIMALT (cons 171 2) ;DIMALTD-controls the decimal places for units (cons 172 0) ;DIMTOFL-forces a line inside extension lines (cons 173 1); DIMSAH (cons 174 0); DIMTIX (cons 175 0); DIMSOXD (cons 176 256); DIMCLRD (cons 177 256); DIMCLRE (cons 178 256); DIMCLRT color of text (cons 179 0); DIMADEC (cons 270 2) ;DIMUNIT-sets the units format for all dims ;2 decimale ; 4architettonico (cons 271 Decimal_Places) ;DIMDEC-sets the number of decimal places of primary units (cons 272 Tolerance_Decimal_places); DIMTDEC (cons 273 2) ;DIMALTU-sets the units for alt. units (cons 275 0) ;DIMAUNIT-sets the angular format for angular dims (cons 276 1); DIMFRAC (cons 277 2); DIMLUNIT ;2 decimale ; 4architettonico (cons 278 0); DIMDSEP (cons 279 Text_Movement); DIMTMOVE (cons 280 0) ;DIMJUST-controls the horizontal positioning of dim text (cons 281 -1); DIMSD1 (cons 282 -1); DIMSD2 (cons 283 1); DIMTOLJ (cons 284 3); DIMTZIN (cons 285 1); DIMALTZ (cons 286 0) ;DIMALTTZ-Toggles the suppression in tolerance values ;(cons 287 0); DIMFIT ;(cons 288 0); DIMUPT ;(cons 289 0); DIMATFIT (cons 340 (tblobjname "style" "Estilo_Cotas")); DIMTXSTY ;(cons 341 (cdr (assoc 330 (entget (tblobjname "block" "."))))); DIMLDRBLK ;(cons 342 (cdr (assoc 330 (entget(tblobjname "block" "_Oblique"))))); DIMBLK must setvar dimblk 1st ;(cons 343 (cdr (assoc 330 (entget(tblobjname "block" "_Oblique"))))); DIMBLK1 ;(cons 344 (cdr (assoc 330 (entget(tblobjname "block" "_Oblique"))))); DIMBLK2 ;(cons 371 -2); DIMLWD ;(cons 372 -2); DIMLWE ) ) (entmake ds) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.