2016-07-26 2 views
0

Ich arbeite in Map 3d mit einer Zeichnung, die nicht präzise ist. Ich habe dwg mit Dimension die ich mit der Zeichnung überlappen kann. Ich muss diese Dimension ausrichten, aber ich möchte nicht jedes Mal den Wert eingeben, nachdem ich ihn gestreckt habe. Gibt es eine Möglichkeit, die Messung so zu ändern, dass sie sich nicht ändert? AutoCAD/Map 3D setzt aktuellen Messwert in Textüberschreibung

Antwort

1

Ich glaube nicht, dass dies mit der Programmierung verwandt ist, aber Sie können override dimension values auf AutoCAD.

können Sie in VB

Sub OverrideDimensionText() 
Dim dimObj As AcadDimAligned 
Dim point1(0 To 2) As Double 
Dim point2(0 To 2) As Double 
Dim location(0 To 2) As Double 

' Define the dimension 
point1(0) = 5#: point1(1) = 3#: point1(2) = 0# 
point2(0) = 10#: point2(1) = 3#: point2(2) = 0# 
location(0) = 7.5: location(1) = 5#: location(2) = 0# 

' Create an aligned dimension object in model space 
Set dimObj = ThisDrawing.ModelSpace. _ 
       AddDimAligned(point1, point2, location) 

' Change the text string for the dimension 
dimObj.TextOverride = "The value is <>" 
dimObj.Update 
End Sub 
+0

Vielen Dank, ich weiß, dass ich manuell überschreiben kann. Aber ich habe Tausende von diesen Objekten und es würde eine Menge Zeit brauchen. Ich dachte daran, eine einfache Lisp-Funktion zu erstellen, wenn es keinen anderen Weg gibt. Leider weiß ich nicht viel darüber. – Gary

+0

Ich habe gerade eine VB und einen Link mit einem Beispielcode hinzugefügt ... –

0

aktualisieren versuchen: ich mit der letzten Aussage falsch war, aber hier ist die Lösung: http://www.cadtutor.net/forum/archive/index.php/t-31690.html VVA den Lisp-Code am Ende bekam. Mit Befehl DIMO wird der Text überschrieben.

;;Dim override 
(defun c:dimo (/ COPYDIM CURLAY DELSET DIMLST 
DIMSET ERRCOUNT LAYCOL LENT 
NEXTENT OVTEXT *ERROR* ACTDOC 
OLDECHO) 
;;; Vladimir Smirnov {Smirnoff} on dwg.ru 
(defun *ERROR* (msg) 
(setvar "CMDECHO" oldEcho) 
); end of error 
(vl-load-com) 
(setq oldEcho(getvar "CMDECHO") 
actDoc(vla-get-ActiveDocument 
(vlax-get-acad-object)) 
layCol(vla-get-Layers actDoc) 
); end setq 
(setvar "CMDECHO" 0) 
(if 
(setq dimSet 
(ssget "_:L" '((0 . "DIMENSION")))) 
(progn 
(setq dimLst 
(mapcar 'vlax-ename->vla-object 
(vl-remove-if 'listp 
(mapcar 'cadr(ssnamex dimSet)))) 
); end setq 
(vla-StartUndoMark actDoc) 
(foreach dim dimLst 
(vla-put-TextOverride dim (dim-get-text-string (vlax-vla-object->ename dim))) 
(vla-put-Color dim 22) 
) 
(vla-EndUndoMark actDoc) 
); end progn 
); end if 
(setvar "CMDECHO" oldEcho) 
(princ) 
); end of c:dimo 

(defun Col_Item_Find (Collection Item/result) 
(if 
(not 
(vl-catch-all-error-p 
(setq result 
(vl-catch-all-apply 'vla-item 
(list Collection Item))))) 
result 
); end if 
); end of Col_Item_Find 
;;; Dim restore 
(defun c:dimr (/ COPYDIM CURLAY DELSET DIMLST 
DIMSET ERRCOUNT LAYCOL LENT 
NEXTENT OVTEXT *ERROR* ACTDOC 
OLDECHO) 
;;; Vladimir Smirnov {Smirnoff} on dwg.ru 
(defun *ERROR* (msg) 
(setvar "CMDECHO" oldEcho) 
); end of error 

(vl-load-com) 
(setq oldEcho(getvar "CMDECHO") 
actDoc(vla-get-ActiveDocument 
(vlax-get-acad-object)) 
layCol(vla-get-Layers actDoc) 
); end setq 
(setvar "CMDECHO" 0) 
(if 
(setq dimSet 
(ssget '((0 . "DIMENSION")))) 
(progn 
(setq dimLst 
(mapcar 'vlax-ename->vla-object 
(vl-remove-if 'listp 
(mapcar 'cadr(ssnamex dimSet)))) 
errCount 0 
); end setq 
(vla-StartUndoMark actDoc) 
(foreach dim dimLst 
(setq curLay(vla-get-Layer dim)) 
(if 
(/= :vlax-true 
(vla-get-Lock(Col_Item_Find layCol curLay))) 
(progn 
(vla-put-TextOverride dim "<>") 
(vla-put-Color dim 82) 
); end progn 
(setq errCount(1+ errCount)) 
); end if 
); end foreach 
(if(/= 0 errCount) 
(princ 
(strcat "\n" 
(itoa errCount)" were on locked layer!")) 
); end if 
(vla-EndUndoMark actDoc) 
); end progn 
); end if 
(setvar "CMDECHO" oldEcho) 
(princ) 
) 
(defun mip_MTEXT_Unformat (Mtext/text Str) 
(setq MM Mtext) 
(setq Text "") 
(while (/= Mtext "") 
(cond 
((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]") 
(setq Mtext (substr Mtext 3) Text (strcat Text Str))) 
((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2))) 
((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]") 
(setq Mtext (substr Mtext 3))) 
((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]") 
(setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext))))) 
((wcmatch (strcase (substr mtext 1 4)) "\\PQ[CRJD],\\PXQ") ;;;Add by KPblC 
(setq mtext (substr mtext (+ 2 (vl-string-search ";" mtext)))) 
) 
((wcmatch (strcase (substr Mtext 1 2)) "\\P") 
(if (or 
(zerop (strlen Text)) 
(= " " (substr Text (strlen Text))) 
(= " " (substr Mtext 3 1))) 
(setq Mtext (substr Mtext 3)) 
(setq Mtext (substr Mtext 3) Text (strcat Text " ")))) 
((wcmatch (strcase (substr Mtext 1 2)) "\\S") 
(setq Str (substr Mtext 3 (- (vl-string-search ";" Mtext) 2)) 
Text (strcat Text (vl-string-translate "#^\\" "/^\\" Str)) 
Mtext (substr Mtext (+ 4 (strlen Str))))) 
(t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2))))) 
Text) 
(defun dim-get-text-string (dim/str) 
(setq str "") 
(vlax-for item (vla-item (vla-get-blocks 
(vla-get-activedocument (vlax-get-acad-object)) 
) ;_ end of vla-get-Blocks 
(cdr (assoc 2 (entget dim))) 
) ;_ end of vla-item 
(if (vlax-property-available-p item 'Textstring) 
(setq str (vla-get-textstring item)) 
) 
) 
(mip_MTEXT_Unformat str) 
) 
(princ "\nType Dimo to override and Dimr to restore")