Jump to content

win32com restricting to use TextAlign and TextOffset to place the text above the dim line


Recommended Posts

Posted

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}")
    

 

Posted

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)

 

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...